axioma.cs.
CoordSystem
¶Данный класс позволяет производить работу с координатными проекциями. Для инициализации проекций необходимо использовать фабрику классов CoordSysFactory
Тип исходных данных при формировании объекта координатной системы SourceType
:¶Наименование величины Значение Описание St_Unknown 0 Не определен St_Prj 1 Строка MapBasic St_Proj4 2 Строка Proj4 St_Epsg 3 Значение EPSG St_Wkt 4 Строка Wkt
DEGREES_TO_METERS
¶Градусы в метры для сферы
DEGREES_TO_RADIANS
¶Коэффициент пересчета градусов в радианы
EARTH_SPHERE_RADIUS
¶Радиус сферы
LAT_LON_EPSG
¶EPSG для координатной системы Широта/Долгота
METERS_TO_DEGREES
¶Метры в градусы для сферы
RADIANS_TO_DEGREES
¶Коэффициент пересчета радиан в градусы
affineTransform
()¶Возвращает матрицу афинного преобразования, если таковая имеется
Результат: Матрица афинного преобразования Тип результата: QTransform
cartesianDistance
(point_1, point_2)¶Расчет расстояния между двумя точками в текущей проекции
Параметры: Результат: расстояние между точками
Тип результата:
clone
()¶Клонирует текущую КС
Результат: Копию координатной системы Тип результата: CoordSystem
description
()¶Описание координатной системы
Результат: Описание координатной системы Тип результата: str
epsg
()¶Пробует найти номер EPSG. Сначала ищем в описании проекции PRJ файла, затем пробуем использовать алгоритмы OGR, и наконец, ищем соответствие в файле epsg.xml
Результат: Соответствующее проекции значение EPSG. -1 если соответствующей не найдено Тип результата: int
exportToWkt
()¶Экспорт в формат WKT
Результат: Строка WKT или пустая строка если аналога не найдено Тип результата: str
forward
(p_in, p_out)¶Получение картезианских координат из градусов точки
Параметры: Результат: успешность операции. True выполнено успешно. False преобразование не произведено
Тип результата:
forward
(r_in, r_out)Получение картезианских координат из градусов rect
Параметры: Результат: успешность операции. True выполнено успешно. False преобразование не произведено
Тип результата:
forward
(list_in)Получение картезианских координат из градусов массива точек
Параметры: list_in ( list
[QPointF
]) – Входное значениеРезультат: Массив преобразованных точек. Если операция произведена с ошибкой, выбрасывается исключение Тип результата: list
[QPointF
]
getInvFlattening
()¶Коэффициент сжатия эллипсоида
Результат: Значение коэффициента Тип результата: float
getTOWGS84Params
()¶Коэффициенты преобразования датума к WGS84
Результат: Коэффициенты. Если получить невозможно, возникает ошибка. Тип результата: list
[str
]
inverse
(p_in, p_out)¶Получение географических координат (градусов) из картезианских координат для точки
Параметры: Результат: успешность операции. True выполнено успешно. False преобразование не произведено
Тип результата:
inverse
(r_in, r_out)Получение географических координат (градусов) из картезианских координат для rect
Параметры: Результат: успешность операции. True выполнено успешно. False преобразование не произведено
Тип результата:
inverse
(list_in, list_out)Получение географических координат (градусов) из картезианских координат для массива точек. Подход немного отличается от преобразования точек или прямоугольника
Параметры: list_in ( list
[QPointF
]) – Входное значениеРезультат: Массив преобразованных точек. Если операция произведена с ошибкой, выбрасывается исключение Тип результата: list
[QPointF
]
isEqual
(coordSystem)¶Сравнение с другой координатной системой
Параметры: coordSystem ( CoordSystem
) – КС для сравненияРезультат: Результат сравнения. True, если эквивалентны Тип результата: bool
prjStr
()¶Формирует строку формата MapBasic
Результат: Строка prj или пустая строка если аналога не найдено Тип результата: str
proj4Str
()¶Формирует строку формата proj4
Результат: Строка proj4 или пустая строка если аналога не найдено Тип результата: str
rectNumericCoordSys
()¶Возвращает MBR для КС
Результат: Прямоугольник для данной КС в случае успешного выполнения или пустой QRectF Тип результата: QRectF
setAffineTransform
(value)¶Установка нового значения матрицы преобразования для проекции
Параметры: value ( QTransform
) – Матрица
setDescription
(description)¶Задание описания координатной системы
Параметры: description ( str
) – Описание координатной системы
setRectCoordSystem
(rect)¶Установка нового ограничивающего прямоугольника для проекции
Параметры: rect ( QRectF
) – Новое значение прямоугольника
sourceData
()¶Данные, которые использовались при создании данной координатной системы
Тип результата: SourceData
sphericalDistance
(point_1, point_2)¶Расчет расстояния между двумя точками на сфере
Параметры: Результат: расстояние между точками, успешность операции
Тип результата:
- static
testEqual
(cs1, cs2)¶Сравнение двух координатных систем
Параметры:
- cs1 (
CoordSystem
) – Первая КС для сравнения- cs2 (
CoordSystem
) – Вторая КС для сравненияРезультат: Результат сравнения. True, если эквивалентны
Тип результата:
unit
()¶Единицы измерения в текущей КС
Результат: Единица измерения Тип результата: LinearUnit
Пример использования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #!/usr/bin/python3
# -*- coding: utf-8 -*-
# Import
import sys
import axioma.core
from axioma.cs import *
from PyQt5.QtCore import *
from PyQt5.QtGui import QGuiApplication
a = QGuiApplication(sys.argv)
core = axioma.core.Core()
core.initialize()
def checkCoordSystem(cs):
if cs is not None:
print ("Ok: %s" % cs.description())
return True
else:
print ("Ошибка")
return False
# Инициализация координатной системы из EPSG
cs_latlon = axioma.app.csfactory.createFromEPSG(4326)
checkCoordSystem(cs_latlon)
print ("IsLatLong: %r" % cs_latlon.isLatLong())
# Инициализация координатной системы из строки MapInfo PRJ
cs_merc = CoordSysFactory.defaultCoordSysFactory().createFromPRJ("Earth Projection 10, 104, \"m\", 0")
if checkCoordSystem(cs_merc):
print ("IsLatLong: %r" % cs_merc.isLatLong())
# Инициализация координатной системы из строки proj4
robin_proj4_str = "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-8,160,176,-0,-0,-0,0 +units=m +no_defs"
robin_proj4 = CoordSysFactory.defaultCoordSysFactory().createFromProj4(robin_proj4_str)
checkCoordSystem(robin_proj4)
# Инициализация координатной системы из строки WKT
ll_wkt_str = "GEOGCS[\"unnamed\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563],TOWGS84[0,0,0,-0,-0,-0,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]"
ll_wkt = CoordSysFactory.defaultCoordSysFactory().createFromWKT(ll_wkt_str)
if checkCoordSystem(ll_wkt):
print("Mapbasic string: %s" % ll_wkt.prjStr())
# Экспорт в WKT
wkt = cs_latlon.exportToWkt()
print(wkt)
ll_wkt_2 = CoordSysFactory.defaultCoordSysFactory().createFromWKT(wkt)
checkCoordSystem(ll_wkt_2)
# Локальная координатная система
cs_ne = CoordSysFactory.defaultCoordSysFactory().createFromPRJ("NonEarth 0,1")
if checkCoordSystem(cs_ne):
print ("IsNonEarth: %r" % cs_ne.isNonEarth())
# Расстояние между двумя точками в проекции и на сфере
print( "Cartesian distance %f" % cs_latlon.cartesianDistance(QPointF(0.0, 0.0), QPointF(45.0, 45.0)))
sd = cs_latlon.sphericalDistance(QPointF(0.0, 0.0), QPointF(45.0, 45.0))
print( "Spherical distance %f (success=%r)" % (sd[0], sd[1]))
# Получение ограничивающего прямоугольника для кординатной системы
rect = cs_merc.rectNumericCoordSys();
print ("Rect of CoordSystem: (%.1f %.1f) (%.1f %.1f)" % (rect.left(), rect.top(), rect.right(), rect.bottom()))
# Сравнение двух координатных систем
print ("Compare CoordSystems: %r %r" % ( cs_latlon.isEqual(robin_proj4), cs_latlon.isEqual(cs_merc)))
# Прямое и обратное преобразование координат (forward / inverse)
p_out = QPointF()
p_in = QPointF(45.0, 45.0)
res = cs_latlon.forward(p_in, p_out) # Из градусов в метры
if res:
print ("Forward (%f, %f) res=%r" % (p_out.x(), p_out.y(), res))
p_out1 = QPointF()
res = cs_latlon.inverse(p_out, p_out1) # Из метров в градусы
if res:
print ("Inverse (%f, %f) res=%r" % (p_out1.x(), p_out1.y(), res))
# Преобразование из одной координатной системы в другую
transform = CoordTransform(cs_latlon, robin_proj4)
p_out = transform.forward(p_in)
print ("p_out = (%f, %f)" % (p_out.x(), p_out.y()))
# Получение координат mgrs
mgrs = Mgrs(cs_latlon)
print("mgrs %s" % mgrs.getMGRSString(-45, 45))
|