Estoy tratando de simplificar una colección de aproximadamente 100,000 polígonos que contienen cerca de 4 millones de vértices. Los datos se almacenan en un shapefile de 2GB, por lo que no hay una representación explícita de la topología entre los polígonos, pero consisten casi exclusivamente en arcos/vértices compartidos, y las coordenadas de los vértices compartidos se alinean extremadamente bien, tanto que no puedo ver ninguna diferencia sin importar cuánto haga zoom en QGIS
, al menos en las muchas áreas donde he mirado.
He intentado usar ogr2ogr
con la opción -simplify
para hacer la simplificación, y aunque esto preserva la topología de cada polígono, no es consciente de los arcos compartidos entre polígonos, por lo que el resultado es que un arco compartido entre dos polígonos se simplifica de diferentes maneras para cada polígono, lo que resulta en superposiciones y brechas entre los polígonos resultado.
¿Existe algún formato de datos compatible con OGR que represente explícitamente la topología compartida entre polígonos, para poder convertir estos datos a ese formato, de manera que al simplificarlos, el conjunto resultante de polígonos tenga la misma topología (y por lo tanto no tenga brechas ni superposiciones)?
La razón por la que estoy haciendo esto es que en última instancia quiero representar los polígonos (simplificados) en un archivo topoJSON para su visualización web en leaflet.js. He intentado hacer la conversión y simplificación usando el comando topojson
de JavaScript, que hace casi exactamente lo que quiero, excepto que no parece poder manejar un archivo de entrada tan grande. He intentado aumentar el límite de memoria con la bandera --max_old_space_size
según se describe en https://github.com/mbostock/topojson/issues/71, sin éxito. Incluso probé esto en una gran instancia AWS EC2 con 30GB de memoria y se ejecutó durante un día sin ningún resultado. Si divido los datos en regiones geográficas más pequeñas y proceso cada región por separado con topojson
, los resultados se ven maravillosos, pero luego surgen problemas a lo largo de las fronteras entre las regiones. Por lo tanto, estoy buscando soluciones que puedan (preferiblemente rápidamente) manejar el conjunto de datos original enorme.
He visto referencias al comando GRASS v.generalize
en publicaciones relacionadas y lo estoy considerando como una opción, pero nunca he usado GRASS
y estoy bastante familiarizado con las herramientas gdal
/ ogr
y me pregunto si hay alguna forma de lograr esto con esas herramientas, en lugar de tener que subir por la empinada curva de aprendizaje de GRASS.