cl.geologyidea.com
Más

¿Agregar vértices al polígono en PostGIS?

¿Agregar vértices al polígono en PostGIS?


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.


Por ejemplo, tengo un polígono rectangular (4 vértices). Quiero agregar un punto medio en cada línea del polígono, por lo que en total ahora tengo 8 vértices. Y a partir de ellos quiero construir un nuevo polígono que tendrá la misma huella exterior, pero tendrá 8 vértices:

Lo que hice y no funciona (quiero hacer esto en cada polígono de mis edificios.shp): (pseudo algoritmo, estoy trabajando con "WITH ... AS")

  1. Consigue todos los vértices originales (Los 4 negros)ST_DumpPointsen edificios dos veces (!)

    Prepare los bordes de los edificios de varios polígonos como cadenas de líneas para aplicar ST_Line_Interpolate_Point-

  2. Todas las líneas posibles entre los mismos vértices de polígono:ST_MakeLine (points1.geom, points2.geom) WHERE (points1.path <> points2.path) Y (points1.id = points2.id)

  3. Fronteras de edificios:ST_ExteriorRing (the_geom) ON (ST_Dump (build.geom)). Geom AS the_geom

  4. De las líneas @ 2, seleccione solo las líneas de borde:St_touches (build.geom, lines.geom) Y St_touches (border.geom, lines.geom) = falso Y lines.id = build.id AND lines.id = border.id--todos los puntos del mismo edificio, todas las líneas del mismo edificio tienen la misma identificación que pertenece al edificio

  5. Obtenga los puntos medios:ST_Line_Interpolate_Point (border_lines.geom, 0.5)(puntos verdes)

  6. UNIÓNpuntos @ 1 y puntos @ 5

Ahora el problema es que no tengo ningún orden en los puntos @ 6, por lo que es casi imposible de usarST_MakePolygony trucos conST_ConcaveHull&ST_ConvexHullTampoco funciona porque ignoran el punto medio y eventualmente vuelvo a donde comencé.


Utilice ST_Snap http://postgis.net/docs/ST_Snap.html como paso final. Como geometrías de entrada, necesita que su polígono original y vértices adicionales se agreguen como MultiPoint. El tercer término de la función es la tolerancia a la rotura.

SELECCIONE ST_Snap (ST_GeomFromText ('POLYGON ((7 7, 7 11, 11 11, 11 7, 7 7))'), ST_GeomFromtext ('MULTIPOINT ((11 9), (7 9), (9 11), (9 7)) '), 0,01);

El resultado es un polígono que tiene nuevos vértices agregados desde el MultiPoint:

POLÍGONO ((7 7, 7 9, 7 11, 9 11, 11 11, 11 9, 11 7, 9 7, 7 7))


Una solución alternativa simple podría ser ST_Segmentize (). Esta función agregará vértices a su polígono de modo que ningún segmento sea más largo que una longitud determinada. Si es importante utilizar los puntos medios exactos, entonces no es bueno, pero es genial si realmente solo busca agregar complejidad a su geometría.


Ver el vídeo: AVTO SKOLA BOLID TRETA VEZBA POLIGON B KATEGORIJA DRIVING SCHOOL


Comentarios:

  1. Farid

    Estoy seguro de que esto ya se ha discutido, por favor use la búsqueda en el foro.

  2. Lion

    En mi opinión, están equivocados. Propongo discutirlo. Escríbeme en PM, te habla.

  3. Cale

    Las imágenes sombrías son así :)



Escribe un mensaje