第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

計(jì)算兩個(gè)緯度和經(jīng)度地理坐標(biāo)之間的距離

計(jì)算兩個(gè)緯度和經(jīng)度地理坐標(biāo)之間的距離

C#
慕的地6264312 2019-08-30 16:18:54
我正在計(jì)算兩個(gè)GeoCoordinates之間的距離。我正在針對(duì)其他3-4個(gè)應(yīng)用測(cè)試我的應(yīng)用。當(dāng)我計(jì)算距離時(shí),我計(jì)算得到的平均值為3.3英里,而其他應(yīng)用程序的距離為3.5英里。這與我正在嘗試執(zhí)行的計(jì)算有很大不同。有沒有好的類庫來計(jì)算距離?我在C#中計(jì)算它是這樣的:public static double Calculate(double sLatitude,double sLongitude, double eLatitude,                                double eLongitude){    var radiansOverDegrees = (Math.PI / 180.0);    var sLatitudeRadians = sLatitude * radiansOverDegrees;    var sLongitudeRadians = sLongitude * radiansOverDegrees;    var eLatitudeRadians = eLatitude * radiansOverDegrees;    var eLongitudeRadians = eLongitude * radiansOverDegrees;    var dLongitude = eLongitudeRadians - sLongitudeRadians;    var dLatitude = eLatitudeRadians - sLatitudeRadians;    var result1 = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) +                   Math.Cos(sLatitudeRadians) * Math.Cos(eLatitudeRadians) *                   Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);    // Using 3956 as the number of miles around the earth    var result2 = 3956.0 * 2.0 *                   Math.Atan2(Math.Sqrt(result1), Math.Sqrt(1.0 - result1));    return result2;}我能做錯(cuò)什么?我應(yīng)該先以km為單位計(jì)算,然后轉(zhuǎn)換為里程?
查看完整描述

3 回答

?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

該會(huì)有地理座標(biāo)類(.NET框架4和更高)已經(jīng)有GetDistanceTo方法。


var sCoord = new GeoCoordinate(sLatitude, sLongitude);

var eCoord = new GeoCoordinate(eLatitude, eLongitude);


return sCoord.GetDistanceTo(eCoord);

距離以米為單位。


您需要引用System.Device。


查看完整回答
反對(duì) 回復(fù) 2019-08-30
?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊

GetDistance是最好的解決方案,但在很多情況下我們無法使用此方法(例如通用應(yīng)用程序)


用于計(jì)算 coorindates之間距離的算法的偽代碼:


public static double DistanceTo(double lat1, double lon1, double lat2, double lon2, char unit = 'K')

{

    double rlat1 = Math.PI*lat1/180;

    double rlat2 = Math.PI*lat2/180;

    double theta = lon1 - lon2;

    double rtheta = Math.PI*theta/180;

    double dist =

        Math.Sin(rlat1)*Math.Sin(rlat2) + Math.Cos(rlat1)*

        Math.Cos(rlat2)*Math.Cos(rtheta);

    dist = Math.Acos(dist);

    dist = dist*180/Math.PI;

    dist = dist*60*1.1515;


    switch (unit)

    {

        case 'K': //Kilometers -> default

            return dist*1.609344;

        case 'N': //Nautical Miles 

            return dist*0.8684;

        case 'M': //Miles

            return dist;

    }


    return dist;

}

真實(shí)世界C#實(shí)現(xiàn),它使用擴(kuò)展方法


用法:


var distance = new Coordinates(48.672309, 15.695585)

                .DistanceTo(

                    new Coordinates(48.237867, 16.389477),

                    UnitOfLength.Kilometers

                );

執(zhí)行:


public class Coordinates

{

    public double Latitude { get; private set; }

    public double Longitude { get; private set; }


    public Coordinates(double latitude, double longitude)

    {

        Latitude = latitude;

        Longitude = longitude;

    }

}

public static class CoordinatesDistanceExtensions

{

    public static double DistanceTo(this Coordinates baseCoordinates, Coordinates targetCoordinates)

    {

        return DistanceTo(baseCoordinates, targetCoordinates, UnitOfLength.Kilometers);

    }


    public static double DistanceTo(this Coordinates baseCoordinates, Coordinates targetCoordinates, UnitOfLength unitOfLength)

    {

        var baseRad = Math.PI * baseCoordinates.Latitude / 180;

        var targetRad = Math.PI * targetCoordinates.Latitude/ 180;

        var theta = baseCoordinates.Longitude - targetCoordinates.Longitude;

        var thetaRad = Math.PI * theta / 180;


        double dist =

            Math.Sin(baseRad) * Math.Sin(targetRad) + Math.Cos(baseRad) *

            Math.Cos(targetRad) * Math.Cos(thetaRad);

        dist = Math.Acos(dist);


        dist = dist * 180 / Math.PI;

        dist = dist * 60 * 1.1515;


        return unitOfLength.ConvertFromMiles(dist);

    }

}


public class UnitOfLength

{

    public static UnitOfLength Kilometers = new UnitOfLength(1.609344);

    public static UnitOfLength NauticalMiles = new UnitOfLength(0.8684);

    public static UnitOfLength Miles = new UnitOfLength(1);


    private readonly double _fromMilesFactor;


    private UnitOfLength(double fromMilesFactor)

    {

        _fromMilesFactor = fromMilesFactor;

    }


    public double ConvertFromMiles(double input)

    {

        return input*_fromMilesFactor;

    }


查看完整回答
反對(duì) 回復(fù) 2019-08-30
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

這是JavaScript版本的男人和女孩


function distanceTo(lat1, lon1, lat2, lon2, unit) {

      var rlat1 = Math.PI * lat1/180

      var rlat2 = Math.PI * lat2/180

      var rlon1 = Math.PI * lon1/180

      var rlon2 = Math.PI * lon2/180

      var theta = lon1-lon2

      var rtheta = Math.PI * theta/180

      var dist = Math.sin(rlat1) * Math.sin(rlat2) + Math.cos(rlat1) * Math.cos(rlat2) * Math.cos(rtheta);

      dist = Math.acos(dist)

      dist = dist * 180/Math.PI

      dist = dist * 60 * 1.1515

      if (unit=="K") { dist = dist * 1.609344 }

      if (unit=="N") { dist = dist * 0.8684 }

      return dist

}


查看完整回答
反對(duì) 回復(fù) 2019-08-30
  • 3 回答
  • 0 關(guān)注
  • 619 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)