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:
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).