Używam PostGIS 2.0.0 i chciałbym przechowywać powierzchnię GML w sposób, który pozwala na obliczenie przecięć między tą powierzchnią a różnymi punktami i liniami. W moim przypadku powierzchnia będzie miała jeden element PolygonPatch bez pierścieni wewnętrznych i pierścień zewnętrzny, którym może być LineStringSegment, Geodesic, Arc lub Circle. Odległości mogą być rzędu od dziesiątek do setek mil. Widzę, że PostGIS ma CIRCULARSTRING
i CURVEPOLYGON
, co wydaje się być dobrym sposobem przechowywania Łuku, z wyjątkiem tego, że nie są obsługiwane tylko przez geography
typ geometry
. Jaki byłby najlepszy sposób na przechowanie tego? (Jestem całkiem nowy w PostGIS i ogólnie GIS, więc jest całkiem możliwe, że brakuje mi czegoś oczywistego.)
9
Odpowiedzi:
ST_GeomFromGML
Możesz przechowywać swoje funkcje GML jako typ danych PostGIS Geometry, używając funkcji ST_GeomFromGML, która przekształci Twój GML na typ danych geometrii. FYI: Istnieją podobne funkcje dla KML, WKT i tak dalej.
po prostu zrób coś takiego:
Gdy znajdziesz go w polu geometrii, możesz robić wszystkie fajne skrzyżowania i rzeczy, które chcesz robić w PostGIS
Następnie możesz wypluć swój wynik z powrotem w formacie GML za pomocą ST_AsGML
EDYCJA 1 Myślę, że szukasz:
http://postgis.net/docs/ST_Distance_Sphere.html
http://postgis.net/docs/ST_Distance_Spheroid.html
EDYCJA 2
Używam „POSTGIS =” 1.5.2 ”(starsza wersja niż ty), a następująca instrukcja działa dobrze:
Musisz użyć kombinacji funkcji, aby uzyskać to, czego potrzebujesz.
distance_spheroid nie obsługuje CIRCULARSTRING, ponieważ pobiera typy danych geometrii.
Dodaj EDYT do swojego oryginalnego pytania z fragmentem przykładowego GML, z którym masz problemy, a ja wypiszę dla ciebie wyciągi.
źródło
W końcu zrezygnowałem z przechowywania „dokładnego” łuku lub okręgu. Podczas importowania Łuku GML (który jest zdefiniowany przez 3 punkty na łuku) tymczasowo tworzę geometrię
CIRCULARSTRING
, a następnie przekształcam ją w geografię, jak poniżej:Podczas importowania GML ArcByCenterPoint (który jest zdefiniowany przez punkt środkowy, promień oraz kąty początkowy i końcowy) przybliżam go bezpośrednio, rzutując punkty w odstępach 1 stopnia od kąta początkowego do kąta końcowego. Odbywa się to na kuli, nie na sferoidie, więc nie jest do końca dokładne, ale istnieją bilety PostGIS do implementacji azymutu i projekcji punktowej dla typu geograficznego. To samo dla koła.
źródło