Tengo la siguiente capa usando SRID 27700 en postgis:
Es cada región administrativa en el Reino Unido y (como puede ver en la agrupación de colores) cada una de ellas tiene un campo de texto que especifica el condado en el que se encuentran.
Lo que me gustaría hacer es hacer polígonos de condado más grandes a partir de los más pequeños en un condado determinado, por lo que EG en la imagen sobre todos los polígonos de color verde azulado formaría un polígono grande del anillo exterior único que contiene todas las polis en ese color, como sabio todo púrpura, marrón, rosa, gris, etc., todos deben formar un polígono.
Ya he intentado lo siguiente:
insert into parishesmerged (geometry)
select astext(multi(ST_Union(the_geom))) as the_geom from parishes
group by county_name
Pero sigue generando geometrías rotas que luego tengo grandes problemas para procesar más.
Estoy tratando de hacer un mapa a nivel de condado más simple con las principales áreas de salida.
Cualquier solución no tiene que estar en Postgis tampoco, tengo la pila OS4Geo completa instalada, la última versión de QGis y más utilidades de las que puedo sacudir.
Las únicas cosas que no tengo son los grandes como ArcGis (aunque es posible que tenga un Old Mapinfo por ahí)
Para el registro, el conjunto de datos que estoy tratando de crear es acompañar un libro SIG que estoy escribiendo dirigido a programadores .NET que desean escribir aplicaciones SIG usando .NET
Después de probar las sugerencias a continuación, la que mejor funcionó fue la solución 'Paul Ramseys'.
Ahora tengo un buen archivo simplificado de condados y distritos que es lo suficientemente simple para mi libro, pero lo suficientemente complejo como para permitirme demostrar un interesante SQL geoespacial.
Aunque la solución de Paul finalmente fue la que funcionó para mí, también recurrí a otras respuestas para cosas como simplificar el mapa de polígonos y reducir aún más la complejidad.
Sin embargo, en lo que sí observé al hacer esto, aunque ST_Collect es más rápido que ST_Union, correr por correr también fue el principal responsable de las geometrías rotas. Supongo que el aumento de velocidad se obtiene a expensas de una menor precisión en la función central.
astext(multi())
parte? Solo estoy saliendo de lo que veo en otros ejemplos de disolución de PostGIS.Respuestas:
ST_Union funcionaría, pero su línea de trabajo seguramente no está limpia. Entonces, los límites de tus pequeñas cositas no se agradan perfectamente. Puede encajarlos suavemente en una cuadrícula para intentar aumentar las probabilidades de que los vértices se alineen, pero apuesto a que todavía tendrá algunos casos que no funcionan. O estarán más allá de la tolerancia o, lo más probable, habrá lugares donde los vértices no estén emparejados, por lo que hay una línea en un lado y un vértice en el otro.
Si tiene PostGIS 2.0, construir una estructura de topología con tolerancia podría llevarlo a la respuesta que está buscando, si tiene suerte.
fuente
Incorrect parameter count in the call to native function 'ST_Union'
y no sé si es una limitación de MySQL.Usted dice que necesita "... formar un polígono grande a partir del anillo exterior único que contiene todas las polis ...". El ST_ExteriorRing hace esto,
Puede usar ST_Union (), como se sugiere, o probar con ST_Collection ().
NOTAS: para evitar pequeños bucles o "geometrías rotas", puede usar st_convexhull y / o ST_Simplify para cada geom,
y verifica tus geometrías,
fuente
La función ST_Collect es una función "agregada" en la terminología de PostgreSQL
"
SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN
" devolverá una GEOMETRYCOLLECTION por separado para cada valor distinto de ATTRCOLUMhttp://postgis.net/docs/ST_Collect.html
Nota: ST_Collect es mucho más rápido que ST_Union
fuente
Supongo por su pregunta que está utilizando el producto Boundary-Line de Ordnance Survey. Si ese es el caso, entonces ya incluye un conjunto de datos a nivel del Condado, por lo que no hay necesidad de intentar generarlo usted mismo desde las áreas parroquiales de nivel inferior.
Si no está utilizando Boundary-Line, le recomiendo que lo haga, ya que es gratuito bajo la licencia OS OpenData y tiene un nivel de Condado como un archivo de forma que puede cargar directamente en PostGIS.
fuente