Unter der Annahme, dass Ihre Daten projiziert werden und der Abstand zwischen den Punkten und dem nächsten Polygon der gesuchte ist, können Sie den Abstand von jedem Punkt zu den zwei Polygonen berechnen und die Summe berechnen.
1) Berechnen Sie den Abstand. Beschränken Sie die Suche auf eine angemessene Entfernung, vielleicht zweimal die erwartete größte Entfernung. Stellen Sie sicher, dass die Geometrien indiziert sind !!
SELECT pt.gid point_gid, plg.gid polygon_gid, ST_Distance(pt.geom, plg.geom) distance
FROM pointlayer pt, polygonlayer plg
WHERE ST_Distance(pt.geom, plg.geom) < 50
ORDER BY pt.gid, ST_Distance(pt.geom, plg.geom);
2) Für jeden Punkt, erhalten die beiden am nächsten Polygone mit der partition function
SELECT
point_gid, polygon_gid, distance
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY point_gid ORDER BY distance asc) AS rank,
t.*
FROM
[distanceTable] t) top_n
WHERE
top_n.rank <= 2;
3) Agregate das Ergebnis und zu verfolgen, welche Polygone verwendet wurden
select point_gid,
sum(distance) streetwidth,
string_agg(polygon_gid || ' - ' || distance,';') polyid_dist_info
from [top_2_dist dst]
group by dst.point_gid;
Alle zusammen :
SELECT
point_gid,
sum(distance) streetwidth,
string_agg(polygon_gid || ' - ' || distance,';') polyid_dist_info
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY point_gid ORDER BY distance asc) AS rank,
t.*
FROM
(SELECT pt.gid point_gid,
plg.gid polygon_gid,
ST_Distance(pt.geom, plg.geom) distance
FROM pointlayer pt, polygonlayer plg
WHERE ST_Distance(pt.geom, plg.geom) < 50
) t
) top_n
WHERE
top_n.rank <= 2
GROUP BY point_gid;
Mit Ihrem Punkt finden Sie den [Abstand vom Punkt zu den Polygonen] (https://gis.stackexchange.com/questions/86079/distance-between-polygon-and-point) – JGH
Vielen Dank für Ihren Vorschlag. Ich möchte die Straßenbreite tatsächlich berechnen (der senkrechte Abstand zwischen zwei Gebäudepolygonen). Ihr Vorschlag funktioniert möglicherweise in diesem Beispielszenario, das heißt, ich kann ST_Distance() verwenden und beide Entfernungen hinzufügen, um die Straßenbreite zu erhalten, aber in großen Dataset wird es problematisch sein. Ist es nicht? –
Haben Sie einen Punkt vor jedem Polygon? Haben alle Polygone eine Seite parallel zur Straße? Wenn die Antwort für beide Fragen Ja ist, wird der Vorschlag funktionieren.Beachten Sie, dass Sie, wie für alle Jobs, die sich auf Straßen beziehen, bereit sein sollten, einige Ausnahmen zu behandeln – JGH