Processing math: 100%

1 votos

¿Encontrar el vértice en comón con la mayoría de los polígonos en PostGIS?

Tengo una tabla con geometría de polígonos, en este caso representando condados. Estoy tratando de averiguar cómo escribir una consulta que devuelva los vértices ordenados por el número de polígonos que comparten ese vértice. Por ejemplo, piense en las Cuatro Esquinas de los Estados Unidos, donde Arizona, Utah, Colorado y Nuevo México comparten una esquina común.

Una idea que tuve, aplicar un buffer de 5' a cada vértice y devolver los polígonos que el buffer interseca. La lógica parece que podría funcionar, pero sospecho que hay una manera mejor.

Estoy usando PostgreSQL 9.5 Beta 1 con PostGIS 2.2.0 en Windows.

1voto

Primigenius Puntos 11

Puedes hacerlo con una sola sentencia SQL en PostGIS. En el primer paso se descomponen los polígonos en puntos. Y en el segundo paso se cuenta el número de ocurrencias de puntos. Es una consulta bastante rápida.

SELECT ST_GeomFromText(pt_geom) geometry, pt_geom, count(*) AS cnt FROM
 (SELECT kod,ST_AsText(ST_PointN(geom, generate_series(1, ST_NPoints(geom) -1))) AS pt_geom
  FROM
   (SELECT kod, (ST_Dump(ST_Boundary(geom))).geom
    FROM country
    ) AS linestrings
  ) AS points
GROUP BY pt_geom order by count(*) DESC

1voto

Lars Mæhlum Puntos 4569
WITH points as
(
 SELECT DISTINCT on (p,id) (ST_DumpPoints(geom)).geom p from the_table
)
SELECT count(*) number_of, p FROM points
GROUP BY p
ORDER BY number_of DESC
limit 100;

Algunas notas: La parte distinta está ahí para eliminar los duplicados y el punto repetido en el principio y el final de cada polígono (no probado, pero creo que debería funcionar)

Agrupar por en una geometría agrupará en el cuadro delimitador, no en la geometría. Pero eso está bien con los puntos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X