/ Desarrolladores / Corrección de límites

Corrección de límites

Los límites del campo rara vez llegan perfectos. Launch Pad pasa cada límite por un pipeline automático de corrección de geometría que detecta las formas inválidas y las repara antes de planificar, de modo que los Proyectos de Líneas siempre se generan a partir de geometría limpia y válida.

La mayoría de los problemas en los límites son invisibles

La geometría inválida es sorprendentemente común en los datos reales de límites, y en su mayoría no se puede ver en un mapa: una autointersección puede esconderse en un solo vértice. La mayoría de los clientes nunca se enteran de que sus límites tienen estos problemas porque Launch Pad los corrige automáticamente. Si estás integrando con la API y te preguntas por qué un límite que consultas difiere ligeramente del que enviaste, esta página explica qué pasó y por qué.

De dónde proviene la geometría inválida

Edición manual

Dibujar un polígono en el mapa y luego agregar, eliminar o arrastrar vértices puede introducir autointersecciones y superposiciones sin ninguna señal visible.

Servicios de terceros

Los límites modificados por plataformas conectadas (por ejemplo, John Deere Operations Center) pueden regresar topológicamente malformados.

Archivos con contenido mixto

Los archivos subidos a veces traen puntos sueltos, líneas o colecciones de geometrías en lugar de polígonos limpios.

Más que un "make valid" básico

La mayoría de las plataformas GIS reparan la geometría dañada con una única operación de "make valid" (forzar la validez de la geometría). Eso resuelve el error de topología, pero es una herramienta poco selectiva, sin criterio sobre cómo debería verse después un límite del campo utilizable. Launch Pad, en cambio, aplica una secuencia de correcciones dirigidas y conserva una reparación general de "make valid" como respaldo para los casos que las correcciones dirigidas no logran resolver.

Filtrado

Los puntos, las líneas y otras geometrías sin área se eliminan para que solo los polígonos sigan adelante.

División

Los límites exteriores con autointersecciones se dividen en polígonos válidos separados en lugar de descartar parte del campo.

Fusión

Los huecos que se superponen o se intersecan se fusionan en un solo hueco, como exige la especificación.

Aplicación de buffer

A los anillos se les aplica un buffer con una pequeña tolerancia para que los huecos nunca compartan un borde con el límite exterior.

Reconstrucción

Los huecos se restan de los límites exteriores para reconstruir un MultiPolygon limpio, recortando cualquier hueco que se salga de su contorno.

Eliminación de fragmentos diminutos

Los fragmentos diminutos por debajo de un área mínima se descartan, a menos que sean la única parte del campo.

Normalización

La orientación de los anillos sigue la regla de la mano derecha de GeoJSON y las coordenadas se aplanan a 2D, eliminando cualquier valor de elevación.

Reparación de respaldo

Una reparación general de "make valid" se encarga de las autointersecciones y otros errores que sobreviven a los pasos dirigidos.

Qué significa "válido"

La salida del pipeline es siempre un MultiPolygon válido, conforme a las reglas de validez de polígonos y MultiPolygon de la OGC Simple Features Specification:

  • Cada polígono tiene exactamente un anillo exterior, y ese anillo es un polígono válido: una línea cerrada con al menos 3 puntos distintos y sin autointersecciones.
  • Los anillos interiores, si los hay, son polígonos válidos que están completamente dentro de su anillo exterior.
  • Los anillos interiores no se intersecan entre sí; los que lo hacen se fusionan en uno solo.

Anillo exterior (contorno)

El límite exterior de un polígono. Hay exactamente uno por polígono.

Anillo interior (hueco)

Un límite interno recortado del polígono, como una zona inundable o un montón de piedras. Un polígono puede tener muchos huecos.

MultiPolygon

Una colección de polígonos. Un campo con dos parcelas separadas es un MultiPolygon con dos polígonos.

Fusión

Una operación de unión de geometrías: combinar formas superpuestas en una sola forma.

Cómo funciona el pipeline

  1. 1
    Normalizar la entrada. Solo se conserva la geometría poligonal. Los puntos, las líneas y otros miembros sin área de las colecciones de geometrías se descartan, y se extraen los anillos exteriores.
  2. 2
    Validar cada anillo. Se valida cada polígono exterior, uno por uno, y luego cada anillo interior.
  3. 3
    Reparar las autointersecciones. Los anillos exteriores con autointersecciones se dividen en polígonos separados. Los anillos interiores que se intersecan se fusionan. Si una fusión no resuelve una intersección dentro del contorno principal, el polígono recurre a una reparación general de "make valid".
  4. 4
    Aplicar un buffer a los anillos. A cada anillo se le aplica un buffer con una pequeña tolerancia para que los anillos interiores nunca terminen compartiendo un borde con un anillo exterior.
  5. 5
    Reconstruir el resultado. Los anillos interiores se restan de los anillos exteriores para formar el MultiPolygon válido final. Los huecos que sobresalen de un contorno se recortan al contorno que los contiene, y un hueco que queda por completo fuera de todos los contornos se conserva como un polígono propio en lugar de descartarse.

Si la entrada no se puede rescatar, por ejemplo cuando no queda nada después de eliminar las partes inválidas, Launch Pad reporta la falla en lugar de inventar una forma, y cada paso de corrección queda registrado para que el resultado se pueda auditar.

Nota: El procesamiento ocurre en un sistema de coordenadas proyectado para que las distancias estén en metros, y el resultado se convierte de vuelta a WGS84. Por eso las tolerancias del buffer se expresan en metros y no en grados.

Ejemplos de antes y después

Cinco casos representativos de geometría de entrada malformada (azul) y el resultado corregido (amarillo). Expande el WKT para ver las coordenadas exactas.

Caso 1: Tipos de geometría mixtos

La entrada es una GeometryCollection en lugar de un MultiPolygon, y contiene una LineString y un Point junto al polígono real. La línea y el punto se eliminan, y el anillo exterior se extrae del polígono.

Entrada
Geometría de entrada que contiene un polígono más una línea y un punto sueltos
WKT de entrada
GEOMETRYCOLLECTION (LINESTRING (131 125, 305 326),
  POINT (260 130),
  POLYGON ((130 330, 223 330, 223 245, 130 245, 130 330)))
Resultado
Geometría del resultado: un solo polígono limpio con la línea y el punto eliminados
WKT del resultado
MULTIPOLYGON (((130 330, 223 330, 223 245, 130 245, 130 330)))

Caso 2: Límite con autointersección

El anillo exterior se cruza a sí mismo y forma una figura de moño. No es un polígono válido, y muchos planificadores lo rechazarían o descartarían uno de los lóbulos sin avisar. El proceso de corrección divide el anillo en el punto de cruce en dos polígonos válidos, preservando toda el área dibujada.

Entrada
Polígono de entrada cuyo contorno se cruza a sí mismo, formando una figura de moño con el punto de intersección resaltado
WKT de entrada
POLYGON ((120 110, 120 360, 340 130, 310 360, 120 110))
Resultado
Geometría del resultado: la figura de moño dividida en dos polígonos válidos que se tocan en un solo punto
WKT del resultado
MULTIPOLYGON (((120 110, 120 360, 225.87639311043566 249.3110435663627, 120 110)),
  ((225.87639311043566 249.3110435663627, 310 360, 340 130, 225.87639311043566 249.3110435663627)))

Caso 3: Huecos superpuestos

Dos anillos interiores se intersecan entre sí, algo que la especificación prohíbe. Los huecos se fusionan en uno, y el polígono se recrea con el único hueco combinado.

Entrada
Geometría de entrada con dos huecos superpuestos dentro del límite del campo
WKT de entrada
-- outer boundary
POLYGON ((130 460, 550 460, 550 30, 130 30, 130 460))
-- inner boundary
MULTIPOLYGON (((230 110, 410 290, 470 100, 230 110)),
  ((370 380, 400 140, 200 200, 370 380)))
Resultado
Geometría del resultado: los huecos superpuestos fusionados en un solo hueco dentro del límite
WKT del resultado
MULTIPOLYGON (((130 460, 550 460, 550 30, 130 30, 130 460),
  (292.3076923076923 172.30769230769232, 200 200, 370 380, 384.44444444444446 264.44444444444446, 410 290, 470 100, 230 110, 292.3076923076923 172.30769230769232)))

Caso 4: Anillos exteriores superpuestos

Varios anillos exteriores se superponen y se autointersecan, y entre todos encierran un espacio vacío. A los anillos se les aplica un buffer y se fusionan en un solo contorno, y el espacio encerrado se preserva como un hueco propiamente dicho.

Entrada
Geometría de entrada con varios rectángulos superpuestos dispuestos formando un circuito cerrado
WKT de entrada
MULTIPOLYGON (((107 153, 134.3 153, 134.3 121.6, 107 121.6, 107 153),
  (120 147, 120 176.2, 130.5 176.2, 130.5 147, 120 147)),
  ((125 174, 163 174, 163 168, 125 168, 125 174)),
  ((157.5 178.6, 191 178.6, 191 156, 157.5 156, 157.5 178.6),
    (170 166, 185 166, 185 135, 170 135, 170 166)),
  ((180 140, 180 136, 120 136, 120 140, 180 140)))
Resultado
Geometría del resultado: los rectángulos fusionados en un solo contorno que encierra un único hueco
WKT del resultado
MULTIPOLYGON (((170 136, 134.3 136, 134.3 121.6, 107 121.6, 107 153, 120 153, 120 176.2, 130.5 176.2, 130.5 174, 157.5 174, 157.5 178.6, 191 178.6, 191 156, 185 156, 185 135, 170 135, 170 136),
  (130.5 168, 130.5 153, 134.3 153, 134.3 140, 170 140, 170 156, 157.5 156, 157.5 168, 130.5 168)))

Caso 5: Huecos fuera del contorno

El campo tiene dos anillos exteriores separados, y los huecos no los respetan: un hueco atraviesa el espacio entre los dos contornos y otros sobresalen de los bordes. Cada contorno se reconstruye por separado y cada hueco se recorta al contorno que lo contiene, con un pequeño buffer para que ningún hueco comparta un borde con su contorno.

Entrada
Geometría de entrada con dos contornos separados y huecos que los cruzan o quedan fuera de ellos
WKT de entrada
-- outer boundary
MULTIPOLYGON (((104 199, 165 199, 165 125, 104 125, 104 199)),
  ((170 150, 195 150, 195 132, 170 132, 170 150)))
-- inner boundary
MULTIPOLYGON (((158.44444444444446 144.33333333333334, 174 144.33333333333334, 174 139, 158.44444444444446 139, 158.44444444444446 144.33333333333334)),
  ((101 169, 159 169, 159 165, 101 165, 101 169)),
  ((136 122, 109.44444444444444 122, 109.44444444444444 151.55555555555554, 136 151.55555555555554, 136 122)))
Resultado
Geometría del resultado: dos polígonos limpios con cada hueco recortado para quedar dentro de su propio contorno
WKT del resultado
MULTIPOLYGON (((170 150, 195 150, 195 132, 170 132, 170 150),
  (170.0010000000475 144.33333333333334, 174 144.33333333333334, 174 139, 170.0010000000475 139, 170.0010000000475 144.33333333333334)),
  ((104 199, 165 199, 165 125, 104 125, 104 199),
    (109.44444444444444 125.0010000000475, 109.44444444444444 151.55555555555554, 136 151.55555555555554, 136 125.0010000000475, 109.44444444444444 125.0010000000475),
    (164.9989999999525 139, 158.44444444444446 139, 158.44444444444446 144.33333333333334, 164.9989999999525 144.33333333333334, 164.9989999999525 139),
    (104.0010000000475 169, 159 169, 159 165, 104.0010000000475 165, 104.0010000000475 169)))

Páginas relacionadas