Преобразование долготы широты в метрах / футах в дюймах (haversine in python) [дублировать]

Если это сериализация «один путь» (для отладки или регистрации или что-то еще), тогда fmt.Printf("%#v", var) очень приятно. (Update: чтобы вывести вывод в строку вместо печати, используйте str := fmt.Sprintf("%#v", var).

Если размер имеет значение, вы можете использовать %v, но мне нравится %#v, потому что он также будет включать поле имена и имя типа структуры.

Третий вариант - %+v, который будет содержать имена полей, но не тип структуры.

Все они задокументированы вверху fmt documentation .

Если вам нужна двухсторонняя сериализация, JSON, Gob или XML являются самыми легкими / встроенными параметрами в Go, см. пакеты кодирования .

2
задан gansub 11 April 2018 в 13:13
поделиться

1 ответ

Эти два пункта находятся всего в нескольких сантиметрах друг от друга. Похоже, что pyproj / Geod не очень хорошо справляется с точками, которые находятся близко друг к другу. Это немного странно, поскольку простая плоскостная геометрия более чем достаточна на таких расстояниях. Кроме того, это сообщение об ошибке несколько подозрительно, так как оно предполагает, что две точки являются антиподальными , т. Е. Диаметрально противоположными, что явно не так! OTOH, возможно, антиподальная точка, о которой он упоминает, является некоторой промежуточной точкой, которая возникает как-то в расчете ... Тем не менее, я бы довольно колебался в использовании библиотеки, которая ведет себя так.

Учитывая этот дефект, я подозреваю, что pyproj имеет другие недостатки. В частности, он, вероятно, использует старые формулы Винценти для своих эллипсоидных геодезических расчетов, которые, как известно, неустойчивы при работе с почти антиподовыми точками и не особенно точны на больших расстояниях. Я рекомендую использовать современные алгоритмы К. Ф. Карни.

Д-р Karney является основным источником статей Википедии о геодезических, в частности геодезических на эллипсоиде , а его географическийlib доступен на PyPi, поэтому вы можете легко установить его с помощью pip. См. Его сайт SourceForge для получения дополнительной информации и привязки географических ссылок на других языках.

FWIW, вот краткий демонстрационный пример использования geographiclib для вычисления расстояния в вашем вопросе.

from geographiclib.geodesic import Geodesic

Geo = Geodesic.WGS84

lat1, lon1 = -7.313341167341917, 10.65583081724002
lat2, lon2 = -7.313340663909912, 10.655830383300781

d = Geo.Inverse(lat1, lon1,  lat2, lon2)
print(d['s12'])

output

0.07345528623159624

Эта цифра находится в метрах, поэтому эти две точки находятся на расстоянии более 73 мм.


Если вы 'd хотели бы видеть, что geographiclib используется для решения сложной геодезической проблемы, см. этот ответ math.stackexchange , который я написал в прошлом году, с исходным кодом Python 2/3 в gist .


Надеюсь, это уже не проблема, так как pyproj теперь использует код из географического списка .

5
ответ дан PM 2Ring 15 August 2018 в 20:50
поделиться
Другие вопросы по тегам:

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