Відповіді:
Для документів з осмосу я бачу варіант команди :
--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201
для PostGIS ви можете використовувати ST_MakeEnvelope (ліворуч, знизу, праворуч, верх, сітка) для побудови обмежувальної коробки, а потім &&
оператора обмежувального поля, щоб знайти, де перетинаються обмежувальні коробки:
SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(10.9351, 49.3866, 11.201, 49.5138, 4326);
SRID 4326 призначений для WGS84 Lat / Long і потрібен лише для PostGIS 1.5; її можна опустити для пізніших версій.
Я думаю, це буде приблизно так: Обмежувальне поле в PostGIS створено
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid>)
Запит використовуватиме ST_Intersection з підзапитом.
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;
Я більш-менш взяв це з сторінок довідки PostGIS
Другий запит у таблиці способів, розроблений аналогічно вище (але з ST_Dimension () = 1) повинен отримати шляхи.
HTH, Micha
тут є тема, яка схожа на ваше запитання тут ...
ST_Intersection - (T) Повертає геометрію, яка представляє спільну частину geomA та geomB. Реалізація географії робить перетворення на геометрію, щоб зробити перетин, а потім перетворити назад в WGS84.
1.Ви також можете отримати тут інформацію про геометричні функції побудови.
SELECT ST_AsText(ST_Intersection(
ST_Buffer('POINT(0 0)', 2),
ST_Buffer('POINT(3 0)', 2)
));
2.Друга інформація тут про перехрестя перехрестя: 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;
я сподіваюся, що це допоможе тобі ...
Це коментар до коду @ Micha.
Координатні пари для цього POLYGON
повинні відповідати порядку (або проти годинникової стрілки) порядку: верхній лівий, правий верхній, нижній правий, нижній лівий, знову верхній лівий.
Отже, за годинниковою стрілкою, функція виклику повинна бути:
ST_GeomFromText('POLYGON((ulx uly, urx ury, lrx lry, llx llr, ulx uly))', <srid>)
Або проти годинникової стрілки:
ST_GeomFromText('POLYGON((ulx uly, llx llr, lrx lry, urx ury, ulx uly))', <srid>)