Chcę utworzyć zapytanie, aby wybrać wszystkie sposoby i ich węzły, które istnieją w obwiedni za pomocą postGIS. Obwiednia powinna zawierać wszystkie szczegóły, jakie pobierze polecenie osmozy „--bounding-box”.
Dzięki. funkcja ST_MakeEnvelope potrzebuje jeszcze jednego parametru, srid. Nie wiem co tam umieścić ... jakiś pomysł?
uriel
1
Wygląda na to, że używasz PostGIS 1.5, który wymaga tego parametru. Myślę, że SRID jest ignorowany, więc każda wartość może dać takie same wyniki. Jeśli masz dane w formacie lat / long, zwykle używaj SRID 4326.
Mike T
1
Obecnie większość narzędzi pozwala ci wybrać SRID dla danych OSM podczas ładowania. Domyślny SRM OSM to 3857 (merkator sferyczny). Domyślny SRID dla większości danych lat / lon to SRID 4326 (Lat / Lon AKA WGS84). Jeśli na przykład załadujesz dane za pomocą SRID 3857, będziesz musiał wykonać konwersję z LAT / LON WGS84 na 3857: ST_Transform (ST_MakeEnvelope (LON1, LAT1, LON2, LAT2, 4326), 3857) Niektóre narzędzia (np. Imposm3) obecnie obsługuje tylko SRID 3857
Justin Swanhart
Pamiętaj, że operator && nie przekształca identyfikatorów SRID za Ciebie. Upewnij się, że koperta, którą wykonujesz, ma ten sam SRID co geometria testowa, w przeciwnym razie przekształć ją samodzielnie. trac.osgeo.org/postgis/ticket/2320
Nelson
1
Operator && jest obliczeniowo wolniejszy niż ST_Intersects
caiohamamura,
8
Myślę, że będzie to mniej więcej tak: Obwiednia w PostGIS jest tworzona przez
SELECT bbox_nodes.id, bbox_nodes.tag, nodes_geom
FROM (SELECT nodes.id, nodes.tag,
ST_Intersection(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))',<srid>)).geom AS nodes_geom
FROM nodes
WHERE ST_Intersects(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))',<srid>)) AS bbox_nodes
WHERE ST_Dimension(bbox_nodes.nodes_geom)=0;
Mniej więcej wziąłem to ze stron pomocy PostGIS
Drugie zapytanie, w tabeli sposobów, zaprojektowane podobnie do powyższego (ale z ST_Dimension () = 1), powinno uzyskać odpowiedzi.
Cześć, dzięki! co za srid? jaki powinienem wstawić w <srid>? i „.geom” (wiersz 4) wydaje się być nieprawidłowy, powinien tam być?
uriel
Przepraszam, przegapiłem twój komentarz z zeszłego tygodnia. Srid to kod systemu odniesienia za pomocą współrzędnych. tj. 2039 dla Izraela. Dodatek .geom wyodrębnia część Geometry z „GeometryCollection. Być może masz rację, że nie jest ona wymagana tutaj.
Micha
5
jest tutaj temat podobny do twojego pytania tutaj ...
ST_Intersection - (T) Zwraca geometrię reprezentującą wspólną część geomA i geomB. Implementacja geograficzna przekształca geometrię w celu wykonania skrzyżowania, a następnie przekształca z powrotem do WGS84.
1. Możesz także uzyskać tutaj informacje o funkcjach budowy geometrii.
2.Another informacji tutaj o przecina przecięcia: PostGIS - ST_Intersects, ST_Intersection ...
SELECT b.the_geom As bgeom, p.the_geom As pgeom,
ST_Intersection(b.the_geom, p.the_geom)As intersect_bp
FROM buildings b INNER JOIN parcels p ON ST_Intersection(b,p)
WHERE ST_Overlaps(b.the_geom, p.the_geom)
LIMIT 1;
Pary współrzędnych POLYGONpowinny być zgodne z ruchem wskazówek zegara (lub przeciwnie do ruchu wskazówek zegara): lewy górny, prawy górny, prawy dolny, lewy górny, lewy górny.
Tak więc, zgodnie z ruchem wskazówek zegara, wywołanie funkcji powinno być:
Myślę, że będzie to mniej więcej tak: Obwiednia w PostGIS jest tworzona przez
Zapytanie użyje ST_Intersection z podzapytaniem.
Mniej więcej wziąłem to ze stron pomocy PostGIS
Drugie zapytanie, w tabeli sposobów, zaprojektowane podobnie do powyższego (ale z ST_Dimension () = 1), powinno uzyskać odpowiedzi.
HTH, Micha
źródło
jest tutaj temat podobny do twojego pytania tutaj ...
1. Możesz także uzyskać tutaj informacje o funkcjach budowy geometrii.
2.Another informacji tutaj o przecina przecięcia: PostGIS - ST_Intersects, ST_Intersection ...
Mam nadzieję, że Ci to pomoże...
źródło
To jest komentarz do kodu @ Micha.
Pary współrzędnych
POLYGON
powinny być zgodne z ruchem wskazówek zegara (lub przeciwnie do ruchu wskazówek zegara): lewy górny, prawy górny, prawy dolny, lewy górny, lewy górny.Tak więc, zgodnie z ruchem wskazówek zegara, wywołanie funkcji powinno być:
Lub przeciwnie do ruchu wskazówek zegara:
źródło