如何使用Google Maps API v.3将最近的标记添加到可见地图区域中的知识点?

时间:2011-03-28 09:27:31

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

我已经读过this question,但我有些遗憾在我的情况下应用,因为我有很多标记(atm~5000,每天都在增长)。

在我的应用程序中,用户将他的标记(让我们称之为标记A)单击地图或通过地址通过地理编码;我必须知道标记A的特定半径是否有标记。

正如我所说,我无法遍历所有标记,它可能会杀死用户浏览器,如果可能的话,我会喜欢避免ajax请求搜索我的数据库。

实际上我是通过MarkerManager

在地图上插入标记的

有没有办法只搜索地图可见区域中的标记?

2 个答案:

答案 0 :(得分:1)

经过多次研究,我以迭代解决方案(demo here)结束。

为了减少要迭代的项目数量,我在州的基础上划分(此刻已经被捕获),也许将来我可以添加更多的划分。

如果它对其他人有用,我的'解决方案'意味着一个像:

这样的数组
places = {
    "it":[
        "Rome",
        "Venice"
    ],
    "fr":[
        "Paris",
        "Lyon"
    ],
    "es":[
        "Madrid",
        "Barcelona",
        "Girona"
    ]
}

一个谷歌地理编码与用户标记coords得到状态('fr','它')在哪里寻找地方。

答案 1 :(得分:0)

您可以使用将检索getBounds()对象的方法LatLngBounds。使用此对象,您可以调用方法getNorthEast(); getSouthWest()方法,这些方法将分别检索地图的西北和东南边界。 了解这些边界后,您可以在应用程序中执行计算 (伪代码):

if (yourPointLatitude > southWestBoundLatitude && yourPointLatitude < northWestBoundLatitude && yourPointLongitude > northWestBoundLongitude && yourPointLongitude < southEastBoundLongitude)
{
    //take some action, the point is in the map bounds
}

注意:此案例仅适用于特定的地理位置 - &gt;它只适用于世界东北部(例如欧洲)。如果你想要不同的位置,请在if语句中使用其他逻辑,那就是它......

修改:查看这些链接了解详情:Map LatLngBounds