Ответы:
Для документации по осмосу я вижу опцию команды :
--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201
для PostGIS вы можете использовать ST_MakeEnvelope (left, bottom, right, top, srid), чтобы построить ограничивающий прямоугольник, затем &&
оператор ограничивающего прямоугольника, чтобы найти, где ограничивающие прямоугольники пересекаются:
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, Миха
здесь есть тема, которая похожа на ваш вопрос здесь ...
ST_Intersection - (T) Возвращает геометрию, которая представляет общую часть geomA и geomB. Реализация географии выполняет преобразование в геометрию, чтобы выполнить пересечение, а затем преобразовывается обратно в WGS84.
1.you также можете получить некоторую информацию здесь о геометрии построения функций.
SELECT ST_AsText(ST_Intersection(
ST_Buffer('POINT(0 0)', 2),
ST_Buffer('POINT(3 0)', 2)
));
2.Another информации здесь о пересекающем Пересечении: 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;
я надеюсь, что это поможет вам ...
Это комментарий к коду @ Миха.
Пары координат для 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>)