Системы Координат
Термины «проекция» и «координатная система» иногда используются один вместо другого, но, на самом деле, понятия, которые они отражают, различны.
Проекция – это уравнения или наборы уравнений, которые содержат математические параметры для карты. Точное число и природа параметров зависят от типа проекции. Проекция – это метод уменьшения искажений карты, вызванных кривизной земной поверхности или, точнее говоря, проекция компенсирует недостатки отображения карты на плоскости в двух измерениях, в то время как координаты существуют в трёх измерениях.
Координатная система – когда параметрам проекции присваиваются определенные значения, они становятся системой координат. Система координат – это набор параметров, описывающих координаты, одна из которых является проекцией.
Системы Координат (СК) представлены типом axipy.CoordSystem
.
Объекты типа CoordSystem
могут быть созданы, используя:
строку MapInfo PRJ
строку WKT - Well-known text;
строку PROJ;
единиц измерения - для создания СК в план-схеме;
Примечание
Полный список доступных функций создания систем координат содержится в
документации к классу axipy.CoordSystem
.
merc = CoordSystem.from_epsg(3395)
print(merc.name)
'''
>>> Меркатора WGS84
'''
Функция from_string()
позволяет создавать СК
из “универсального представления” - строки с префиксом типа, двоеточием
и значением.
Возможные префиксы: proj, wkt, epsg, prj.
crs = CoordSystem.from_string('prj:Earth Projection 12, 62, "m", 0')
print(crs.name)
'''
>>> Робинсона NAD27
'''
Трансформация координат
Координаты любой точки земной поверхности в разных системах координат будут различаться, переход от одной системы координат к другой осуществляется с помощью специальных формул преобразований и набора параметров,используемых в этих формулах.
Функционал по переходу координат из одной СК в другую выделен в отельный класс
axipy.cs.CoordTransformer
. Он позволяет преобразовывать
координаты между двумя СК.
transformer = CoordTransformer('epsg:4326', 'epsg:26953')
coordinate = (55.76, 37.6)
result = transformer.transform(coordinate)
print(f"Point({result.x}, {result.y})")
'''
>>> Point(8513601.095442554, 9873107.576049749)
'''