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

projStr()

Формирует строку формата proj

Результат

Строка proj или пустая строка если аналога не найдено

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

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