CoordSystem¶
-
class
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
()¶ Возвращает матрицу афинного преобразования, если таковая имеется
- Результат
Матрица афинного преобразования
- Тип результата
-
cartesianDistance
(point_1, point_2)¶ Расчет расстояния между двумя точками в текущей проекции
-
clone
()¶ Клонирует текущую КС
- Результат
Копию координатной системы
- Тип результата
-
description
()¶ Описание координатной системы
- Результат
Описание координатной системы
- Тип результата
-
epsg
()¶ Пробует найти номер EPSG. Сначала ищем в описании проекции PRJ файла, затем пробуем использовать алгоритмы OGR, и наконец, ищем соответствие в файле epsg.xml
- Результат
Соответствующее проекции значение EPSG. -1 если соответствующей не найдено
- Тип результата
-
exportToWkt
()¶ Экспорт в формат WKT
- Результат
Строка WKT или пустая строка если аналога не найдено
- Тип результата
-
forward
(p_in, p_out)¶ Получение картезианских координат из градусов точки
-
forward
(r_in, r_out)¶ Получение картезианских координат из градусов rect
-
forward
(list_in)¶ Получение картезианских координат из градусов массива точек
-
getInvFlattening
()¶ Коэффициент сжатия эллипсоида
- Результат
Значение коэффициента
- Тип результата
-
getTOWGS84Params
()¶ Коэффициенты преобразования датума к WGS84
-
inverse
(p_in, p_out)¶ Получение географических координат (градусов) из картезианских координат для точки
-
inverse
(r_in, r_out)¶ Получение географических координат (градусов) из картезианских координат для rect
-
inverse
(list_in, list_out)¶ Получение географических координат (градусов) из картезианских координат для массива точек. Подход немного отличается от преобразования точек или прямоугольника
-
isEqual
(coordSystem)¶ Сравнение с другой координатной системой
- Параметры
coordSystem (
CoordSystem
) – КС для сравнения- Результат
Результат сравнения. True, если эквивалентны
- Тип результата
-
prjStr
()¶ Формирует строку формата MapBasic
- Результат
Строка prj или пустая строка если аналога не найдено
- Тип результата
-
projStr
()¶ Формирует строку формата proj
- Результат
Строка proj или пустая строка если аналога не найдено
- Тип результата
-
rectNumericCoordSys
()¶ Возвращает MBR для КС
- Результат
Прямоугольник для данной КС в случае успешного выполнения или пустой QRectF
- Тип результата
-
setAffineTransform
(value)¶ Установка нового значения матрицы преобразования для проекции
- Параметры
value (
QTransform
) – Матрица
-
setDescription
(description)¶ Задание описания координатной системы
- Параметры
description (
str
) – Описание координатной системы
-
setRectCoordSystem
(rect)¶ Установка нового ограничивающего прямоугольника для проекции
- Параметры
rect (
QRectF
) – Новое значение прямоугольника
-
sourceData
()¶ Данные, которые использовались при создании данной координатной системы
- Тип результата
-
sphericalDistance
(point_1, point_2)¶ Расчет расстояния между двумя точками на сфере
-
static
testEqual
(cs1, cs2)¶ Сравнение двух координатных систем
- Параметры
cs1 (
CoordSystem
) – Первая КС для сравненияcs2 (
CoordSystem
) – Вторая КС для сравнения
- Результат
Результат сравнения. True, если эквивалентны
- Тип результата
-
unit
()¶ Единицы измерения в текущей КС
- Результат
Единица измерения
- Тип результата
-
Пример использования:
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().createFromProj(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))
|