0

示例可以在以下位置找到:

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

查看完整想法的来源。

我试图让 JS 在文本搜索结果重新定位地图后立即填充长/纬度字段。

链接的 Map 脚本具有提交功能,可将长纬度返回到父表单(未包含在此链接中 - 所以不用担心!)

这里主要有两种方法:

首先是文本搜索 - 用于确定地图位置购买输入地址。所需的修复就在这里,用户点击搜索后,地图返回位置 - 一切都好。但我现在还需要 long/lat 出现在文本区域并启用提交按钮.. 您可以在下一个方法中看到该功能:

第二种方法只是允许用户拖动地图,最后点击的位置将填充 lon/lat 字段。

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 可以将点击的 long/lat 位置输出到页面,我已将它包含在文本搜索功能中,但没有任何乐趣。

map.AttachEvent("onchange", DisplayCoords);

有任何想法吗?

4

1 回答 1

0

我无法更改您的来源,因此我无法确定这一点,但是,我相信您想要执行以下操作:

1)去掉FindLoc中的“map.AttachEvent”,因为每次用户执行查找时都会附加一个新事件,而且无论如何它不是地图类型的正确事件名称,因此不会被触发。有效事件列表在这里

2) 更改您的 MoreResults 回调,使其读取 resultsArray 参数,这是一个查找结果数组,并从数组元素中读取 LatLong 属性。此类在此处记录。例如,类似:

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 似乎总是为空,因此您需要使用 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 回答