Php 半径/最近结果-谷歌地图API
首先,我使用的是谷歌地图API v3。我有一个大地图,显示了从数据库中提取的所有结果,现在我想实现一个功能,显示距离当前位置X公里范围内的最近结果半径(由HTML5 geolocation提供服务) 由于地图包含所有结果,我希望能够添加X公里,然后它将被提交,结果将根据用户的当前位置返回最近的结果。然后,整个地图应删除所有超出半径的标记,留下半径在X公里以内的标记 我需要一个有效的代码、教程或一篇关于如何做到这一点的文章。这里是 我想这是一种方法。可以使用从中心点或当前位置创建边界。您可以使用Php 半径/最近结果-谷歌地图API,php,javascript,mysql,google-maps,google-maps-api-3,Php,Javascript,Mysql,Google Maps,Google Maps Api 3,首先,我使用的是谷歌地图API v3。我有一个大地图,显示了从数据库中提取的所有结果,现在我想实现一个功能,显示距离当前位置X公里范围内的最近结果半径(由HTML5 geolocation提供服务) 由于地图包含所有结果,我希望能够添加X公里,然后它将被提交,结果将根据用户的当前位置返回最近的结果。然后,整个地图应删除所有超出半径的标记,留下半径在X公里以内的标记 我需要一个有效的代码、教程或一篇关于如何做到这一点的文章。这里是 我想这是一种方法。可以使用从中心点或当前位置创建边界。您可以使用s
setRadius(radius:number)
以米为单位指定圆的半径。使用创建的圆,您可以循环使用标记,查看它们是否在圆的边界内,并检查标记是否在边界内
我继续创建了一个在地图上有五个点的小演示,当您单击“创建圆”按钮时,它将使第一个标记成为中心点,并绘制一个半径为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中使用:
选择
身份证件
(3959 *
acos(
cos(弧度(37))*
cos(弧度(纬度))*
cos(弧度(lng)-弧度(-122))+
sin(弧度(37))*
正弦(弧度(纬度))
)
)作为距离
从标记
距离小于25的
按距离排序
限值0,20;
另外,在您的示例@JSFiddleDemo上签出Sidenote:每次单击按钮,您都会再次放大并删除不透明度。
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;