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

Коэффициент пересчета радиан в градусы

class SourceData

Описывает источник, на базе которого была создана координатная система

type

Тип источника

Type:SourceType
string

Исходные данные при формировании координатной системы

Type:str
affineTransform()

Возвращает матрицу афинного преобразования, если таковая имеется

Результат:Матрица афинного преобразования
Тип результата:QTransform
cartesianDistance(point_1, point_2)

Расчет расстояния между двумя точками в текущей проекции

Параметры:
  • point_1 (QPointF) – первая точка
  • point_2 (QPointF) – вторая точка
Результат:

расстояние между точками

Тип результата:

float

clone()

Клонирует текущую КС

Результат:Копию координатной системы
Тип результата:CoordSystem
description()

Описание координатной системы

Результат:Описание координатной системы
Тип результата:str
epsg()

Пробует найти номер EPSG. Сначала ищем в описании проекции PRJ файла, затем пробуем использовать алгоритмы OGR, и наконец, ищем соответствие в файле epsg.xml

Результат:Соответствующее проекции значение EPSG. -1 если соответствующей не найдено
Тип результата:int
exportToWkt()

Экспорт в формат WKT

Результат:Строка WKT или пустая строка если аналога не найдено
Тип результата:str
forward(p_in, p_out)

Получение картезианских координат из градусов точки

Параметры:
  • p_in (QPointF) – входное значение
  • p_out (QPointF) – выходное значение
Результат:

успешность операции. True выполнено успешно. False преобразование не произведено

Тип результата:

bool

forward(r_in, r_out)

Получение картезианских координат из градусов rect

Параметры:
  • r_in (QRectF) – входное значение
  • r_out (QRectF) – выходное значение
Результат:

успешность операции. True выполнено успешно. False преобразование не произведено

Тип результата:

bool

forward(list_in)

Получение картезианских координат из градусов массива точек

Параметры:list_in (list [QPointF]) – Входное значение
Результат:Массив преобразованных точек. Если операция произведена с ошибкой, выбрасывается исключение
Тип результата:list [QPointF]
getInvFlattening()

Коэффициент сжатия эллипсоида

Результат:Значение коэффициента
Тип результата:float
getSemiMajor()

Большая полуось эллипсоида

Результат:Размер большой полуоси
Тип результата:float
getSemiMinor()

Малая полуось эллипсоида

Результат:Размер малой полуоси
Тип результата:float
getTOWGS84Params()

Коэффициенты преобразования датума к WGS84

Результат:Коэффициенты. Если получить невозможно, возникает ошибка.
Тип результата:list [ str ]
inverse(p_in, p_out)

Получение географических координат (градусов) из картезианских координат для точки

Параметры:
  • p_in (QPointF) – входное значение
  • p_out (QPointF) – выходное значение
Результат:

успешность операции. True выполнено успешно. False преобразование не произведено

Тип результата:

bool

inverse(r_in, r_out)

Получение географических координат (градусов) из картезианских координат для rect

Параметры:
  • r_in (QRectF) – входное значение
  • r_out (QRectF) – выходное значение
Результат:

успешность операции. True выполнено успешно. False преобразование не произведено

Тип результата:

bool

inverse(list_in, list_out)

Получение географических координат (градусов) из картезианских координат для массива точек. Подход немного отличается от преобразования точек или прямоугольника

Параметры:list_in (list [QPointF]) – Входное значение
Результат:Массив преобразованных точек. Если операция произведена с ошибкой, выбрасывается исключение
Тип результата:list [QPointF]
isEqual(coordSystem)

Сравнение с другой координатной системой

Параметры:coordSystem (CoordSystem) – КС для сравнения
Результат:Результат сравнения. True, если эквивалентны
Тип результата:bool
isLatLong()

Является ли данная КС широтой/долготой

Результат:True, если да
Тип результата:bool
isNonEarth()

Является ли данная КС декартовой

Результат: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)

Расчет расстояния между двумя точками на сфере

Параметры:
  • point_1 (QPointF) – первая точка
  • point_2 (QPointF) – вторая точка
Результат:

расстояние между точками, успешность операции

Тип результата:

float, bool

static testEqual(cs1, cs2)

Сравнение двух координатных систем

Параметры:
  • cs1 (CoordSystem) – Первая КС для сравнения
  • cs2 (CoordSystem) – Вторая КС для сравнения
Результат:

Результат сравнения. True, если эквивалентны

Тип результата:

bool

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))