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> 
  • 相关阅读:
    vue form dynamic validator All In one
    TypeScript api response interface All In One
    closable VS closeable All In One
    macOS 如何开启 WiFi 热点 All In One
    vue css inline style All In One
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
    牛腩新闻 59 整合添加新闻页 FreeTextBox 富文本编辑器,检测到有潜在危险的 Request.Form 值,DropDownList 的使用
    牛腩新闻 61尾声: error.aspx的使用 防止报错
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (上)
    牛腩新闻 62:尾声续2 asp.net的编译和发布
  • 原文地址:https://www.cnblogs.com/AspDotNetMVC/p/2733909.html
Copyright © 2011-2022 走看看