0

例は次の場所にあります。

http://projects.snowshtechnologies.com/findhrr/_admin/_geolocate/content.php

完全なアイデアのソースを表示します。

テキスト検索結果がマップを再配置するとすぐに、JS に long/lat フィールドを入力させようとしています。

リンクされたマップ スクリプトには、長い緯度を親フォームに返す送信機能があります (このリンクには含まれていません。心配する必要はありません)。

ここには 2 つの主な方法があります。

最初はテキスト検索です。これは、住所を入力して地図の場所を購入するために使用されます。必要な修正はここにあります。ユーザーが検索をクリックすると、マップは位置を返します - すべて問題ありません。ただし、テキスト領域に表示され、送信ボタンを有効にするには、経度/緯度も必要です。次のメソッドでその機能を確認できます。

2 番目の方法では、ユーザーがマップをドラッグするだけで、最後にクリックした位置が経度/緯度フィールドに入力されます。

txt 検索機能:

function FindLoc(numResults)
{
    try
    {
       results = map.Find(document.getElementById('txtWhat').value,
                      document.getElementById('txtWhere').value,
                      null,
                      null,
                      index,
                      numResults,
                      true,
                      true,
                      true,
                      true,
                      MoreResults);
        index = parseInt(index)+9;

    }
    catch(e)
    {
        alert(e.message);
    }

    map.AttachEvent("onchange", DisplayCoords);
}

クリックされた長い/緯度の位置をページに出力する機能displayCoordsがあります。テキスト検索機能に含めましたが、喜びはありません。

map.AttachEvent("onchange", DisplayCoords);

何か案は?

4

1 に答える 1

0

ソースを変更できないため、これをテストして確認することはできませんが、次のことを希望していると思います。

1) FindLoc の "map.AttachEvent" を削除します。これは、ユーザーが検索を実行するたびに新しいイベントを添付するためです。とにかく、それはマップ タイプの正しいイベント名ではないため、トリガーされません。有効なイベントのリストはこちらです。

2) 検索結果の配列である resultsArray パラメータを読み取り、配列要素から LatLong プロパティを読み取るように、MoreResults コールバックを変更します。このクラスはここに文書化されています。たとえば、次のようなものです。

var pos;
if (resultsArray && resultsArray.length > 0) {
    pos = resultsArray[0].LatLong;
    if (pos) {
        document.getElementById("mapLatitude").value = pos.Latitude;
        document.getElementById("mapLongitude").value = pos.Longitude;
        document.getElementById('getLongLat').style.display='block';
    }
}

編集: resultsArray は常に null のように見えるため、代わりに Places 配列を使用する必要があります。これを MoreResults の先頭に追加します。

if (places && places.length > 0) {
    document.getElementById("mapLatitude").value = places[0].LatLong.Latitude;
    document.getElementById("mapLongitude").value = places[0].LatLong.Longitude;
    document.getElementById('getLongLat').style.display='block';
}

私はこの代替案をテストしましたが、うまくいきました。

于 2012-09-10T21:55:04.010 に答える