Google maps 谷歌地图在一个地区的自定义标记
可能重复:Google maps 谷歌地图在一个地区的自定义标记,google-maps,google-maps-api-3,google-maps-markers,latitude-longitude,Google Maps,Google Maps Api 3,Google Maps Markers,Latitude Longitude,可能重复: 我正在尝试开发一个谷歌地图页面,在该页面中,我可以从位于用户周围计算区域内的XML文件中获取用户位置并显示自定义标记点 为了让事情更清楚: 我有一个来自WebConfig文件的半径参数,比如5000(米) 我在地图上找到了用户的位置 使用我拥有的xml列表(xml的Lat-Long值为 每个商店)我想在地图上放置自定义标记 以用户位置为中心的5 km^2区域范围 有没有办法实现这个目标 如何仅通过传递用户的位置坐标和距离参数(在我的例子中是5000)来计算点的横向和纵向值 编辑:
我正在尝试开发一个谷歌地图页面,在该页面中,我可以从位于用户周围计算区域内的XML文件中获取用户位置并显示自定义标记点 为了让事情更清楚:
我的XML文档有点大,包括世界各地的whitegoods商店 国家。我的主要问题是过滤这些数据行(long,latt) 使用用户的当前位置
I need something like:
func distanceCale(int long, int latt, int radius)
to return me some values that can help me filter my XML data.
I guess my question was not clear enough at the firs place. :)
您可以使用。此公式已在一个XML文件中使用,该文件显示给定半径内的标记 对于您的应用程序,javascript代码用于从XML文件生成标记
function deg2rad(degrees){
radians = degrees * (Math.PI/180);
//document.write(radians);
return radians;
}
function Haversine(lat1,lon1,lat2,lon2) {
deltaLat = lat2 - lat1 ;
deltaLon = lon2 - lon1 ;
earthRadius = 3959; // in miles 6371 in meters.
alpha = deltaLat/2;
beta = deltaLon/2;
a = Math.sin(deg2rad(alpha)) * Math.sin(deg2rad(alpha)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(deg2rad(beta)) * Math.sin(deg2rad(beta)) ;
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
distance = earthRadius * c;
return distance.toFixed(2);
}
解析XML时使用Haversine函数
var radius = document.getElementById('radiusSelect').value;
for (var i = 0; i < markerNodes.length; i++) {
var lat = parseFloat(markerNodes[i].getAttribute("lat"));
var lng = parseFloat(markerNodes[i].getAttribute("lng"));
var latlng = new google.maps.LatLng(
lat,
lng);
var distance = Haversine(center.lat(),center.lng(),lat,lng);
if(distance<=radius) {
createOption(name, distance, i);
createMarker(latlng, name, distance);
bounds.extend(latlng);
}
var radius=document.getElementById('radiussect').value;
对于(变量i=0;i if(distance)我的XML文档有点大,包括全国各地的whitegoods商店。我的主要问题是使用用户的当前位置筛选这些数据行(long,latt)。我需要类似于:func distance cale(int long,int latt,int radius)返回一些可以帮助我过滤XML数据的值。我想我的问题还不够清楚。haversine公式允许您这样做:lat1,lon1是用户的位置。使用lat2,lon2迭代XML,使用每个点。这会给出距离,如果它小于半径,则在地图上显示它,如果大于半径radius,不要显示它。您最好使用空间启用的数据库或FusionTables来存储数据。@ouzmpasa请查看编辑的答案和新链接,以使用XML中的标记进行映射file@davidstrachan感谢您编辑您的答案并使其更加清晰。意识到您的第一个答案也很有用后,我有点灰心丧气:)对于那些正在寻找解决方案的人,我找到了一些有效的例子: