半径/最近的结果-谷歌地图API
Radius/nearest results - Google Maps API
首先,我使用谷歌地图API v3。我有一张显示从数据库中提取的所有结果的大地图,现在我想实现一个功能,显示距离当前位置X公里内最近结果的半径(由HTML5地理定位提供)。
由于地图包含所有结果,我希望能够添加X公里,然后它将被提交,结果将返回根据用户当前位置最近的结果。然后,整个地图应删除所有超出半径的标记,留下X公里半径内的标记。
我需要一个有效的代码,教程或一篇关于如何做到这一点的文章。
这里是JSFiddle演示:
我想这是一种方法。您可以使用Google Map V3 API的圆圈从您的中心点或当前位置创建边界。可以用setRadius(radius:number)
指定圆的半径,以米为单位。有了创建的圆圈,你可以遍历你的标记,看看它们是否在圆圈的边界内,使用圆圈的getBounds对象,它是一个latlnbounds,并检查标记是否在边界内。
我继续创建了一个小演示,在地图上有五个点,当你点击创建圆圈按钮时,它会将第一个标记作为中心点,并绘制一个半径为5000的圆圈,并使用上面描述的方法过滤掉没有在边界内的标记:
function createRadius(dist) {
var myCircle = new google.maps.Circle({
center: markerArray[markerArray.length - 1].getPosition(),
map: map,
radius: dist,
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FF0000",
fillOpacity: 0.35
});
var myBounds = myCircle.getBounds();
//filters markers
for(var i=markerArray.length;i--;){
if(!myBounds.contains(markerArray[i].getPosition()))
markerArray[i].setMap(null);
}
map.setCenter(markerArray[markerArray.length - 1].getPosition());
map.setZoom(map.getZoom()+1);
}
这个解决方案只有一个主要缺陷——它获取矩形中的数据,而不是圆形中的数据。
如果您不想查询任何超出所需的数据-使用SQL中的haversine公式:
SELECT
id,
(3959 *
acos(
cos(radians(37)) *
cos(radians(lat)) *
cos(radians(lng) - radians(-122)) +
sin(radians(37)) *
sin(radians(lat))
)
) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
也可以查看使用PHP, MySQL &谷歌地图
相关文章:
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 标记的实时更新,无需加载页面谷歌地图API V3
- 覆盖在赢得'不允许点击下面的标记,谷歌地图api v3
- 谷歌地图Api和JS代码不工作
- 谷歌地图API-InfoBubble赢得't关闭-关闭()不会'不起作用
- 如何在多承诺链中处理谷歌地图API V3事件
- 谷歌地图api和gMapsLatLonPicker
- 谷歌地图API-“;toGeoJson”;返回几何体为null的对象
- 谷歌地图API v3:Initial View is Fine,but Gray Box with No Map if
- 为什么谷歌地图API's方法未从RequireJS中正确调用
- 使用谷歌地图api计算距离并将其设置在表格中<td>
- 使用谷歌地图API和phonegap显示当前位置+方向
- 使用谷歌地图api v3自动完成字段(法国大道、邮编、城市)
- 谷歌地图API标记没有标记我的位置
- 使用谷歌地图api 3为MapTypeId.TERRAIN分离按钮
- 在JQuery中使用谷歌地图Api事件/侦听器
- 在Ionic应用程序上使用$.getScript加载谷歌地图Api
- 我该如何解决“;未捕获引用错误:谷歌没有定义"?(谷歌地图API)
- 谷歌地图API-显示具有不同图标的标记
- 如何停止地图移动时,鼠标悬停在标记在谷歌地图API 3