Вычислить область полигона, обеспечивающую значения широты и долготы в C # [дубликат]

Привязать событие к родительскому объекту, который уже существует:

$(document).on("click", "selector", function() {
    // Your code here
});
91
задан Jason N. Gaylord 28 March 2017 в 12:52
поделиться

10 ответов

Класс GeoCoordinate (.NET Framework 4 и выше) уже имеет метод GetDistanceTo .

var sCoord = new GeoCoordinate(sLatitude, sLongitude);
var eCoord = new GeoCoordinate(eLatitude, eLongitude);

return sCoord.GetDistanceTo(eCoord);

Расстояние находится в метрах .

Вам нужно обратиться к System.Device.

237
ответ дан qub1n 20 August 2018 в 13:15
поделиться
  • 1
    Найджел, ты уверен, что метод DistanceTo будет работать по телефону? Я думал, что он использовал 2.0 версию GeoCoordinate для WP7. – Jason N. Gaylord 17 June 2011 в 06:20
  • 2
    Я проверил это, и GeoCordinate для устройства имеет метод GetDistanceTo, на который вы ссылались (но не то, что у вас было выше). Ничего страшного. Я собираюсь проверить это, чтобы узнать, лучше ли построенный расчет. Спасибо, Найджел! – Jason N. Gaylord 17 June 2011 в 06:37
  • 3
    Я могу задать неправильный вопрос, но в какой единице результат? Это Мили или Километры. Я не могу найти его нигде. – Saeed Neamati 21 October 2015 в 03:50
  • 4
    @SaeedNeamati - тоже искал это, согласно msdn.microsoft.com/en-us/library/… - он находится в метрах. – Andy Butland 24 March 2016 в 09:56
  • 5
    Да, GeoCoordinate.GetDistanceTo () возвращает значение в метрах. Для меня, в США, если он меньше 1610, я конвертирую его в ноги (метры * 3.28084), иначе я пересчитываю их в мили (метры * 0.000621371). Точность более чем достаточно для моих целей. – user3235770 29 July 2016 в 16:55

Вы можете использовать System.device.Location:

System.device.Location.GeoCoordinate gc = new System.device.Location.GeoCoordinate(){
Latitude = yourLatitudePt1,
Longitude = yourLongitudePt1
};

System.device.Location.GeoCoordinate gc2 = new System.device.Location.GeoCoordinate(){
Latitude = yourLatitudePt2,
Longitude = yourLongitudePt2
};

Double distance = gc2.getDistanceTo(gc);

удачи

0
ответ дан Danilo Garro 20 August 2018 в 13:15
поделиться
76
ответ дан David Leitner 20 August 2018 в 13:15
поделиться

Вот ребята и gals версии 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
}
10
ответ дан Elliot Wood 20 August 2018 в 13:15
поделиться
0
ответ дан Hamzeh Soboh 20 August 2018 в 13:15
поделиться

Для тех, кто использует Xamarin и не имеет доступа к классу GeoCoordinate, вместо этого вы можете использовать класс Android Location:

public static double GetDistanceBetweenCoordinates (double lat1, double lng1, double lat2, double lng2) {
            var coords1 = new Location ("");
            coords1.Latitude = lat1;
            coords1.Longitude = lng1;
            var coords2 = new Location ("");
            coords2.Latitude = lat2;
            coords2.Longitude = lng2;
            return coords1.DistanceTo (coords2);
        }
4
ответ дан Justin 20 August 2018 в 13:15
поделиться

И здесь, для тех, кто еще не удовлетворен, исходный код из класса .NET-Frameworks GeoCoordinate, реорганизован в автономный метод:

public double GetDistance(double longitude, double latitude, double otherLongitude, double otherLatitude)
{
    var d1 = latitude * (Math.PI / 180.0);
    var num1 = longitude * (Math.PI / 180.0);
    var d2 = otherLatitude * (Math.PI / 180.0);
    var num2 = otherLongitude * (Math.PI / 180.0) - num1;
    var d3 = Math.Pow(Math.Sin((d2 - d1) / 2.0), 2.0) + Math.Cos(d1) * Math.Cos(d2) * Math.Pow(Math.Sin(num2 / 2.0), 2.0);

    return 6376500.0 * (2.0 * Math.Atan2(Math.Sqrt(d3), Math.Sqrt(1.0 - d3)));
}
0
ответ дан Marc 20 August 2018 в 13:15
поделиться

Вычисление расстояния между точками широты и долготы ...

        double Lat1 = Convert.ToDouble(latitude);
        double Long1 = Convert.ToDouble(longitude);

        double Lat2 = 30.678;
        double Long2 = 45.786;
        double circumference = 40000.0; // Earth's circumference at the equator in km
        double distance = 0.0;
        double latitude1Rad = DegreesToRadians(Lat1);
        double latititude2Rad = DegreesToRadians(Lat2);
        double longitude1Rad = DegreesToRadians(Long1);
        double longitude2Rad = DegreesToRadians(Long2);
        double logitudeDiff = Math.Abs(longitude1Rad - longitude2Rad);
        if (logitudeDiff > Math.PI)
        {
            logitudeDiff = 2.0 * Math.PI - logitudeDiff;
        }
        double angleCalculation =
            Math.Acos(
              Math.Sin(latititude2Rad) * Math.Sin(latitude1Rad) +
              Math.Cos(latititude2Rad) * Math.Cos(latitude1Rad) * Math.Cos(logitudeDiff));
        distance = circumference * angleCalculation / (2.0 * Math.PI);
        return distance;
2
ответ дан MattD 20 August 2018 в 13:15
поделиться
3
ответ дан Mitch Wheat 20 August 2018 в 13:15
поделиться

На основе функции Эллиот Вуд эта функция C работает ...

#define SIM_Degree_to_Radian(x) ((float)x * 0.017453292F)
#define SIM_PI_VALUE                         (3.14159265359)

float GPS_Distance(float lat1, float lon1, float lat2, float lon2)
{
   float theta;
   float dist;

   theta = lon1 - lon2;

   lat1 = SIM_Degree_to_Radian(lat1);
   lat2 = SIM_Degree_to_Radian(lat2);
   theta = SIM_Degree_to_Radian(theta);

   dist = (sin(lat1) * sin(lat2)) + (cos(lat1) * cos(lat2) * cos(theta));
   dist = acos(dist);

//   dist = dist * 180.0 / SIM_PI_VALUE;
//   dist = dist * 60.0 * 1.1515;
//   /* Convert to km */
//   dist = dist * 1.609344;

   dist *= 6370.693486F;

   return (dist);
}

Вы можете изменить ее на двойную. Он возвращает значение в км.

2
ответ дан Santiago Villafuerte 20 August 2018 в 13:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: