Я использую PostGIS 2.0.0 и хотел бы сохранить поверхность GML таким образом, чтобы можно было рассчитывать пересечения между этой поверхностью и различными точками и линиями. В моем случае у Surface будет один PolygonPatch без внутренних колец и внешнего кольца, которое может быть LineStringSegment, Geodesic, Arc или Circle. Расстояния могут составлять от десятков до сотен миль. Я вижу, что PostGIS имеет CIRCULARSTRING
и CURVEPOLYGON
, кажется, хороший способ хранения Arc, за исключением того, что они не поддерживаются только geography
типом geometry
. Как лучше всего хранить это? (Я совершенно новичок в PostGIS и GIS в целом, поэтому вполне возможно, что я упускаю что-то очевидное.)
9
Ответы:
ST_GeomFromGML
Вы можете сохранить свои объекты GML как тип данных PostGIS Geometry, используя функцию ST_GeomFromGML, которая преобразует ваш GML в тип данных геометрии. К вашему сведению: есть аналогичные функции для KML, WKT и так далее.
просто сделайте что-то вроде:
Если у вас есть это в поле геометрии, вы можете делать все забавные пересечения и вещи, которые вы хотите делать в PostGIS
Затем вы можете выплюнуть свой результат обратно в формате GML, используя ST_AsGML
РЕДАКТИРОВАТЬ # 1 Я считаю, что вы ищете:
http://postgis.net/docs/ST_Distance_Sphere.html
http://postgis.net/docs/ST_Distance_Spheroid.html
РЕДАКТИРОВАТЬ № 2
Я использую "POSTGIS =" 1.5.2 "(более старая версия, чем вы), и следующее утверждение работает просто отлично:
Вы должны использовать комбинацию функций, чтобы получить то, что вам нужно.
distance_spheroid не поддерживает CIRCULARSTRING, потому что он принимает в типах данных геометрии.
Пожалуйста, добавьте РЕДАКТИРОВАТЬ к вашему первоначальному вопросу с образцом образца GML, с которым у вас есть проблемы, и я напишу заявления для вас.
источник
В конце концов я отказался от хранения «точной» дуги или круга. При импорте дуги GML (которая определяется 3 точками на дуге) я временно создаю геометрию
CIRCULARSTRING
, а затем преобразую ее в географию, например так:При импорте GML ArcByCenterPoint (который определяется центральной точкой, радиусом, начальным и конечным углами) я аппроксимирую его напрямую, проецируя точки с интервалами в 1 градус от начального угла до конечного угла. Это делается на сфере, а не на сфероиде, поэтому это не совсем точно, но есть билеты PostGIS для реализации азимута и точечной проекции для типа географии. То же самое для круга.
источник