Как преобразовать широту или долготу к метрам?

Второе изображение имеет некоторые проблемы, вот правильное: введите описание изображения здесь

114
задан Pacerier 20 December 2014 в 16:17
поделиться

8 ответов

    'below is from
'http://www.zipcodeworld.com/samples/distance.vbnet.html
Public Function distance(ByVal lat1 As Double, ByVal lon1 As Double, _
                         ByVal lat2 As Double, ByVal lon2 As Double, _
                         Optional ByVal unit As Char = "M"c) As Double
    Dim theta As Double = lon1 - lon2
    Dim dist As Double = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + _
                            Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * _
                            Math.Cos(deg2rad(theta))
    dist = Math.Acos(dist)
    dist = rad2deg(dist)
    dist = dist * 60 * 1.1515
    If unit = "K" Then
        dist = dist * 1.609344
    ElseIf unit = "N" Then
        dist = dist * 0.8684
    End If
    Return dist
End Function
Public Function Haversine(ByVal lat1 As Double, ByVal lon1 As Double, _
                         ByVal lat2 As Double, ByVal lon2 As Double, _
                         Optional ByVal unit As Char = "M"c) As Double
    Dim R As Double = 6371 'earth radius in km
    Dim dLat As Double
    Dim dLon As Double
    Dim a As Double
    Dim c As Double
    Dim d As Double
    dLat = deg2rad(lat2 - lat1)
    dLon = deg2rad((lon2 - lon1))
    a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Cos(deg2rad(lat1)) * _
            Math.Cos(deg2rad(lat2)) * Math.Sin(dLon / 2) * Math.Sin(dLon / 2)
    c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a))
    d = R * c
    Select Case unit.ToString.ToUpper
        Case "M"c
            d = d * 0.62137119
        Case "N"c
            d = d * 0.5399568
    End Select
    Return d
End Function
Private Function deg2rad(ByVal deg As Double) As Double
    Return (deg * Math.PI / 180.0)
End Function
Private Function rad2deg(ByVal rad As Double) As Double
    Return rad / Math.PI * 180.0
End Function
1
ответ дан dbasnett 24 November 2019 в 02:32
поделиться

Существует довольно много способов вычислить это. Все они используют приближения сферической тригонометрии, где радиус является тем земли.

попытка http://www.movable-type.co.uk/scripts/latlong.html некоторое время методов и кода на различных языках.

2
ответ дан rcaval 24 November 2019 в 02:32
поделиться

Существует много инструментов, которые сделают это легким. См. ответ monjardin для получения дополнительной информации о том, что включено.

Однако выполнение этого является не обязательно трудным. Это кажется на использование Java таким образом, я рекомендовал бы изучить что-то как GDAL. Это обеспечивает обертки Java для их стандартных программ, и у них есть все инструменты, требуемые преобразовать из Lat/Lon (географические координаты) к UTM (спроектированная система координат) или некоторая другая разумная проекция карты.

UTM хорош, потому что это - метры, настолько легкие работать с. Однако необходимо будет получить соответствующее зона UTM , чтобы она сделала хорошее задание. Существуют некоторые простые коды, доступные через гугление для нахождения соответствующей зоны для lat/long пары.

7
ответ дан Community 24 November 2019 в 02:32
поделиться

Земля является раздражающе неправильной поверхностью, таким образом, нет никакой простой формулы, чтобы сделать это точно. Необходимо жить с приблизительной моделью земли и спроектировать координаты на нее. Модель, которую я обычно вижу используемый для этого, WGS 84. Это - то, что устройства GPS обычно используют для решения той же самой проблемы.

NOAA имеет некоторое программное обеспечение, которое можно загрузить для помощи с этим на их веб-сайте .

8
ответ дан T.E.D. 24 November 2019 в 02:32
поделиться

Широты и долготы определяют точки, не расстояния, таким образом, Ваш вопрос несколько бессмыслен. Если Вы спрашиваете о кратчайшем расстоянии между два (lat, lon) точки, см. эта статья Wikipedia о больших круговых расстояниях.

11
ответ дан John Feminella 24 November 2019 в 02:32
поделиться

Одна морская миля (1 852 метра) определяется как один аркминута из долготы на экватор. Однако необходимо определить проекция карты (см. также UTM), в котором Вы работаете на преобразование, чтобы действительно иметь смысл.

2
ответ дан Judge Maygarden 24 November 2019 в 02:32
поделиться

Вам нужно преобразовать координаты в радианы, чтобы создать сферическую геометрию. После преобразования вы можете рассчитать расстояние между двумя точками. Затем расстояние можно преобразовать в любую нужную меру.

-2
ответ дан 24 November 2019 в 02:32
поделиться

Если это достаточно близко, вы можете рассматривать их как координаты на плоской плоскости. Это работает, скажем, на уровне улицы или города, если безупречная точность не требуется, и все, что вам нужно, - это приблизительное предположение о расстоянии, которое нужно сравнить с произвольным пределом.

0
ответ дан 24 November 2019 в 02:32
поделиться
Другие вопросы по тегам:

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