zoukankan      html  css  js  c++  java
  • 地图 查经纬度 算距离

    A.计算两点距离

    public const double EarthRadiusKm = 6378.137; // WGS-84 
    public double GetDistance(double p1Lat, double p1Lng,
                              double p2Lat, double p2Lng)
    {
    
        double dLat1InRad = p1Lat * (Math.PI / 180);
        double dLong1InRad = p1Lng * (Math.PI / 180);
        double dLat2InRad = p2Lat * (Math.PI / 180);
        double dLong2InRad = p2Lng * (Math.PI / 180);
        double dLongitude = dLong2InRad - dLong1InRad;
        double dLatitude = dLat2InRad - dLat1InRad;
        double a = Math.Pow(Math.Sin(dLatitude / 2), 2)
                          + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) 
                          * Math.Pow(Math.Sin(dLongitude / 2), 2);
        double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
        double dDistance = EarthRadiusKm * c;
        return dDistance;
    }  

     

    B.获取经纬度,

     ApiUrl: http://maps.google.co.uk/maps/geo?q= + searchkey + &output=xml

                http://maps.google.fr/maps/geo?q= + searchkey + &output=xml

     searchkey=housenum.Trim()+" "+street.Trim()+" "+city.Trim()+" "+postcode.Trim()).Replace(" ", "+")

    public bool GetCoordinate(string ApiUrl, string searchkey,
                          out double logitute, out double Latitude)
    {
    
        string xmldoc = "";
        logitute=0;
        Latitude=0;
        HttpWebRequest request;
        HttpWebResponse response = null;
        Stream stream;
        string resultStr = "0,0";
        try
        {
            request = (HttpWebRequest)WebRequest.Create(ApiUrl);
            response = (HttpWebResponse)request.GetResponse();
            stream = response.GetResponseStream();
            xmldoc = new StreamReader(stream,
                        System.Text.Encoding.Default).ReadToEnd();
            stream.Close();
            response.Close();
        }
        catch (Exception ex)
        {
    
        }
        //xml demo
        //<Point>
        //<coordinates>116.4074130,39.9042140,0</coordinates>
        //</Point>
    
        int startPosition = xmldoc.IndexOf("<coordinates>");
        int endPosition = xmldoc.IndexOf("</coordinates>");
        if (startPosition >= 0 && endPosition >= 0)
        {
            string coordi = xmldoc.Substring(startPosition,
                                    endPosition - startPosition);
            int douposition = coordi.LastIndexOf(",");
            coordi = coordi.Substring(0, douposition);
            resultStr = coordi.Replace("<coordinates>", "")
                              .Replace("</coordinates>", "");
        }
        else
        {
            resultStr = "no";
        }
    
        if (!resultStr.Equals("no"))
        {
            var p=resultStr.Split(',');
            if (p.Length==2)
            {
                var style = NumberStyles.AllowDecimalPoint;
                var culture =CultureInfo.CreateSpecificCulture("en-GB");
                return (double.TryParse(p[0], style, culture, out logitute) 
                    && double.TryParse(p[1], style, culture, out Latitude));
            }
        }
        return false;
    
    }
     

     C.Google Map API V3,设置某地经纬度.

        var gMap;
        var gPoint;
        var gMarker;
        var gMapRegion="NL";
        var gMarkerImg= 'bg_A.png';
      function initialize() {
          
                gPoint = new google.maps.LatLng(52.3702157, 4.8951679);
            var myOptions = {
                zoom: 8,
                center:gPoint,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            gMap = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
            gMarker = new google.maps.Marker({
            position: gPoint,
            draggable:true,
            map: gMap,
            icon: gMarkerImg
            });
    
      
    
        google.maps.event.addListener(gMap, 'rightclick', function (event) {        
            gMarker.setPosition(event.latLng)
           
        });
    
       
        google.maps.event.addListener(gMarker, 'position_changed', function () {
            var p = gMarker.getPosition();   
            $("#txtlat").val(p.lat().toFixed(7));
            $("#txtlng").val(p.lng().toFixed(7));
        });
        google.maps.event.addListener(gMarker, 'mouseover', function () {
            SetTipPosition(gMarker, 150, 150);
        });
    
        
        google.maps.event.addListener(gMarker, 'mouseout', function () {
              $("#flowerInfo").css("display","none");
          });
    
          function SetTipPosition(marker,tipwidth,tipheight) {
              var ne = gMap.getBounds().getNorthEast();
              var sw = gMap.getBounds().getSouthWest();
              var height = Math.abs(ne.lat() - sw.lat());
              var width = Math.abs(ne.lng() - sw.lng());
    
              var mp = marker.getPosition();
              var x = Math.abs(mp.lng() - sw.lng());
              var y = Math.abs(mp.lat() - ne.lat());
    
              var distanceMark = 10;
              var xx = 1.00 * x / width * $("#map_canvas").width() + distanceMark;
              var yy = 1.00 * y / height * $("#map_canvas").height()+ distanceMark;
              if (xx + tipwidth > $("#map_canvas").width())
                  xx = xx - tipwidth - 2 * distanceMark;
              if (yy + tipheight > $("#map_canvas").height())
                  yy = yy - tipheight - 2 * distanceMark;
    
              var content = "lat:" + marker.getPosition().lat().toFixed(7) 
    + ",lng:" + marker.getPosition().lng().toFixed(7)
    + ",Zoom:" + gMap.getZoom(); ShowTip(xx + "px", yy + "px",content); } } function ShowTip(x, y, content) { if ($("#flowerInfo").length == 0) { $("#map_canvas div:first div:first").append("<div id='flowerInfo'
    style='z-index: 230; position: absolute;
    display:none;150px;height:150px;background-color:write'><b>"
    + content + "</b></div>"); } else { $("#flowerInfo").html("<b>"+content+"</b>") } $("#flowerInfo").css({ left: x, top: y, display: "block" }); } $(function () { initialize(); if ($("#txtlat").val() != '' && $("#txtlng").val() != '') { var p = new google.maps.LatLng($("#txtlat").val(), $("#txtlng").val()) gMarker.setPosition(p); gMap.setCenter(p); } $("#btnSearch").click(function () { var address = $("#txtKeyword").val(); var geocoder = new google.maps.Geocoder(); if (geocoder) { geocoder.geocode({ "address": address, "region": gMapRegion }, function (results, status) { if (status == google.maps.GeocoderStatus.OK && results.length > 0 &&
    results[0].address_components[results[0].address_components.length - 1].short_name == gMapRegion) { gMarker.setPosition(results[0].geometry.location); gMarker.setIcon(gMarkerImg); var bounds = new google.maps.LatLngBounds(); for (var i = 0; i < results.length; i++) { if (results[i].address_components.pop().short_name == gMapRegion) bounds.union(results[i].geometry.bounds); } //for gMap.fitBounds(bounds); gMap.setZoom((gMap.getZoom() > 10) ? gMap.getZoom() - 2 : 8); } //if else { gMarker.setIcon(); gMarker.setPosition(gPoint); gMap.setCenter(gPoint); gMap.setZoom(8); } }); } // if }); // click }); //jquery
     <input id="txtKeyword" type="text" value="Hoorn"/>
     <input id="btnSearch" type="button" value="Search"/>
     <input id="txtlat" type="text" value="52.7625419"/>
     <input id="txtlng" type="text" value="6.8946796"/>
     <div id="map_canvas" style="100%; height:80%;" >
     </div> 
  • 相关阅读:
    mysql常用函数
    mysql中utf8_bin、utf8_general_ci、utf8_general_cs编码区别
    JS 中的return false的作用
    css3 animation动画执行结束,停顿几秒后重新开始执行
    (原)人月神话-阅读笔记
    (原创)cocosStudio: text设置颜色问题
    (原创)cocos-js js调用android
    (原创)cocos-js 实现震屏效果
    (转)Cocos2d-js中使用Shader方法--以一个简单的波纹效果为例:
    (转)Cocos2dx-JS 在 Sprite 上使用 Shader
  • 原文地址:https://www.cnblogs.com/AspDotNetMVC/p/2733909.html
Copyright © 2011-2022 走看看