Jawaban:
Untuk dokumen osmosis, saya melihat opsi perintah :
--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201
untuk PostGIS Anda dapat menggunakan ST_MakeEnvelope (kiri, bawah, kanan, atas, srid) untuk membangun kotak pembatas, kemudian &&
operator kotak pembatas untuk menemukan di mana kotak pembatas berpotongan:
SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(10.9351, 49.3866, 11.201, 49.5138, 4326);
SRID 4326 untuk WGS84 Lat / Panjang, dan hanya diperlukan untuk PostGIS 1.5; itu dapat dihilangkan untuk versi yang lebih baru.
Saya pikir ini akan menjadi seperti ini: Kotak pembatas di PostGIS dibuat oleh
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid>)
Kueri akan menggunakan ST_Intersection dengan subquery.
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;
Saya kurang lebih mengambil ini dari halaman bantuan PostGIS
Permintaan kedua, pada tabel cara, dirancang mirip dengan di atas (tetapi dengan ST_Dimension () = 1) harus mendapatkan cara.
HTH, Micha
ada topik di sini yang mirip dengan pertanyaan Anda di sini ...
ST_Intersection - (T) Mengembalikan geometri yang mewakili porsi bersama geomA dan geomB. Implementasi geografi melakukan transformasi ke geometri untuk melakukan persimpangan dan kemudian mengubah kembali ke WGS84.
1.Anda juga dapat memperoleh beberapa informasi di sini tentang Fungsi Membangun Geometri.
SELECT ST_AsText(ST_Intersection(
ST_Buffer('POINT(0 0)', 2),
ST_Buffer('POINT(3 0)', 2)
));
2.Informasi lain di sini tentang Intersect Intersection: 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;
Saya harap ini membantu Anda ...
Ini adalah komentar pada kode @ Micha.
Pasangan koordinat untuk POLYGON
harus mengikuti urutan searah jarum jam (atau berlawanan arah jarum jam): kiri atas, kanan atas, kanan bawah, kiri bawah, kiri atas lagi.
Jadi, searah jarum jam, panggilan fungsi harus:
ST_GeomFromText('POLYGON((ulx uly, urx ury, lrx lry, llx llr, ulx uly))', <srid>)
Atau berlawanan arah jarum jam:
ST_GeomFromText('POLYGON((ulx uly, llx llr, lrx lry, urx ury, ulx uly))', <srid>)