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文件中获取用户位置并显示自定义标记点

为了让事情更清楚:

  • 我有一个来自WebConfig文件的半径参数,比如5000(米)
  • 我在地图上找到了用户的位置
  • 使用我拥有的xml列表(xml的Lat-Long值为 每个商店)我想在地图上放置自定义标记 以用户位置为中心的5 km^2区域范围
  • 有没有办法实现这个目标

    如何仅通过传递用户的位置坐标和距离参数(在我的例子中是5000)来计算点的横向和纵向值

    编辑:


    我的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;iif(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感谢您编辑您的答案并使其更加清晰。意识到您的第一个答案也很有用后,我有点灰心丧气:)对于那些正在寻找解决方案的人,我找到了一些有效的例子: