1 votos

Unión de un conjunto de intersecciones

Estoy trabajando con dos conjuntos de datos: un conjunto de distritos electorales y un conjunto de grupos de bloques censales. Los grupos de bloques censales incluyen agua; los recintos, no. Me gustaría recortar los grupos de bloques censales para obtener sólo la superficie de los grupos de bloques censales (para un cálculo posterior).

Para ello, busco todos los distritos electorales que se cruzan con el grupo de bloques censales y calculo sus intersecciones. A continuación, uno todas las intersecciones de los distritos electorales. El resultado final sería, idealmente, la superficie del grupo de bloques censales. Sin embargo, este no es el caso. Más bien, las intersecciones devuelven una GeometryCollection de LineStrings, MultiLineStrings y Polygons variados. Los intentos de unir esta colección son infructuosos (el objetivo final sería unir todo en un polígono). He aquí un ejemplo aproximado: example map

El área translúcida roja/rosa sería el grupo de bloques censales, el púrpura claro de la derecha sería el área de agua del grupo de bloques censales, y las áreas azul, naranja y roja serían los precintos (sólo tierra). El objetivo es obtener las áreas de la figura translúcida que se cruzan con los polígonos azul, naranja y rojo, y luego unir esas áreas para obtener la superficie del grupo de bloques censales.

Actualmente estoy usando GeoTools, una librería Java construida sobre la implementación JTS el estándar OpenGIS, pero puedo usar/traducir una consulta PostGIS. También estaría abierto a cualquier sugerencia sobre mejores formas de hacer esto (estoy seguro de que hay algunos).

Los shapefiles reales pueden obtenerse en el Base de datos de Harvard Dataverse (mapa del distrito electoral de MD), y el página web del censo (mapa de grupos de bloques censales de todo el estado de MD).

0voto

Mikael Gignac Puntos 21

He resuelto mi problema. He tenido que apartarme de GeoTools y escribir una consulta PostGIS, porque GeoTools no parece tener las características necesarias para hacerlo con éxito.

Esta es la consulta:

SELECT intersection_query.census_block_group_gid, ST_Multi(ST_Union(intersection_query.geom)) AS geom
FROM (
 SELECT md_census_block_groups.gid AS census_block_group_gid, md_precincts.gid AS precinct_gid, ST_Intersection(md_census_block_groups.geom, md_precincts.geom) AS geom
 FROM md_census_block_groups, md_precincts
 WHERE ST_Intersects(md_census_block_groups.geom, md_precincts.geom)
) AS intersection_query
GROUP BY intersection_query.census_block_group_gid;

md_census_block_groups son los grupos de bloques censales, md_precincts son los recintos.

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