Если это сериализация «один путь» (для отладки или регистрации или что-то еще), тогда fmt.Printf("%#v", var)
очень приятно. (Update: чтобы вывести вывод в строку вместо печати, используйте str := fmt.Sprintf("%#v", var)
.
Если размер имеет значение, вы можете использовать %v
, но мне нравится %#v
, потому что он также будет включать поле имена и имя типа структуры.
Третий вариант - %+v
, который будет содержать имена полей, но не тип структуры.
Все они задокументированы вверху fmt documentation .
Если вам нужна двухсторонняя сериализация, JSON, Gob или XML являются самыми легкими / встроенными параметрами в Go, см. пакеты кодирования .
Эти два пункта находятся всего в нескольких сантиметрах друг от друга. Похоже, что 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 теперь использует код из географического списка .
> conda install -c conda-forge geographiclib
– Joël 7 May 2018 в 12:52