使用地方信息库搜索Google Maps V3上的现有点

时间:2012-10-19 16:01:15

标签: javascript google-maps-api-3 google-maps-markers

好吧,所以自从我第一次发布这篇文章并且我没有通过硬核解释我想要做的事情,这是我的第二次尝试。

在我的网站上,我已经实施了Google Maps V3 Javascript。创建一组预定义的点(来自CMS内)并通过具有所需信息的数组推送到地图。我的客户想知道的是,该站点的用户是否可以执行搜索以从该阵列中查找现有点。我当时认为这将涉及使用Places库,但这会返回来自Google的所有有效结果,而不是来自CMS中创建的自定义点数组。

$('#points-search').submit(function(){
    geocoder = new gm.Geocoder();

    var searchAddress = $(this).children('input[type="text"]').val();
    var searchPoints = [];

    if (geocoder){
        geocoder.geocode({'address' : searchAddress}, function(results, status){
            if (status == gm.GeocoderStatus.OK){
                $.each(results, function(i, result){
                    searchPoints.push({"lat" : result.geometry.location.Xa, "lng" : result.geometry.location.Ya});
                });
            } else {
                                    alert('nothing found!')
            }
        });
    }

    return false;
});

当然,该代码尚未完成。从理论上讲,我想要做的是,如果我搜索“4777 Avenue Pierre-de Coubertin”,它会找到我的$ points数组中的正确点,而不是在蒙特利尔找到现有地址以及所有其他点有这个地址的世界。

lat: 45.5
lng: -73.553459
location: "2 Rue de la Commune Ouest, <br />Montreal, QC H2Y 2E2, Canada"
name: "Montreal Science Centre"
pointType: "Community"
url: "/points/item/montreal-science-centre"

lat: 45.514229
lng: -73.531342
location: "4777 Avenue Pierre-de Coubertin<br />Montreal, QC H1V 1B3, Canada"
name: "Montreal Biodome"
pointType: "Curated"
url: "/points/item/montreal-biodome"

我希望对我正在尝试做的事情的描述更清楚一点。非常感谢。

2 个答案:

答案 0 :(得分:1)

  

我的客户想知道的是,该网站的用户是否可以执行搜索以查找   来自这个数组的现有点。

答案是肯定的。搜索涉及哪些标准? infowindow中的数据?最近点?您是否拥有可以更有效地进行搜索的数据库?

  

理论上我想做的是,比方说,如果我搜索“4777 Avenue Pierre-de   Coubertin“,它会找到我的$ points数组中的正确点,而不是找到它   蒙特利尔现有的地址以及该地址的世界上所有其他地点。

您有选择:

  1. 在infowindows中搜索该字符串的文本(或该地址的对象属性,您可能希望创建一个没有HTML格式的版本以使搜索更容易)
  2. 对输入地址进行地理编码并找到标记数组中最近的点(假设结果位于您感兴趣的区域)。
  3. 其他内容或上述内容的组合。

答案 1 :(得分:1)

您希望反转地理编码所有地址并使用harvesine公式查找邻近值。还有其他技术,如r-tree,空间索引和空间填充曲线。那些也是邻近搜索,可以比使用harvesine公式逐个搜索快得多。