Odpowiedzi:
W dokumentach dotyczących osmozy widzę opcję polecenia :
--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201
dla PostGIS możesz użyć ST_MakeEnvelope (lewy, dolny, prawy, górny, srid), aby zbudować obwiednię, a następnie &&
operator obwiedni, aby znaleźć miejsce przecięcia obwiedni:
SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(10.9351, 49.3866, 11.201, 49.5138, 4326);
SRID 4326 jest dla WGS84 Lat / Long i jest wymagany tylko dla PostGIS 1.5; można go pominąć w późniejszych wersjach.
Myślę, że będzie to mniej więcej tak: Obwiednia w PostGIS jest tworzona przez
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid>)
Zapytanie użyje ST_Intersection z podzapytaniem.
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.
HTH, Micha
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.
SELECT ST_AsText(ST_Intersection(
ST_Buffer('POINT(0 0)', 2),
ST_Buffer('POINT(3 0)', 2)
));
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;
Mam nadzieję, że Ci to pomoże...
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ć:
ST_GeomFromText('POLYGON((ulx uly, urx ury, lrx lry, llx llr, ulx uly))', <srid>)
Lub przeciwnie do ruchu wskazówek zegara:
ST_GeomFromText('POLYGON((ulx uly, llx llr, lrx lry, urx ury, ulx uly))', <srid>)