3

可能重复:
计算“乌鸦飞”的距离php

我正在尝试开发一个GoogleMaps页面,我可以在其中获取用户位置并从位于用户周围计算区域内的XML文件中显示自定义标记点。

为了让事情更清楚:

  1. 我有一个来自WebConfig文件的半径参数,比如 5000(以米为单位)
  2. 我在地图上找到了用户位置,
  3. 使用我拥有的xml列表(xml 具有每个商店的 Lat-Long 值)我想在地图上放置自定义标记,该标记位于 5 km^2区域范围内用户位置为 center

有没有办法实现这个目标?

如何仅通过传递用户的位置坐标和距离参数(在我的情况下为 5000)来计算一个点的纬度和经度值?

编辑 :

我的 XML 文档有点庞大,包括全国各地的白色家电商店。我的主要问题是使用用户的当前位置过滤这些数据行(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. :)
4

1 回答 1

3

您可以使用Haversine 公式实现此目的。此公式已在 一个 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);
         }
于 2012-12-19T09:55:38.420 回答