5 votos

Error al crear un índice espacial en MongoDB

Quiero utilizar MongoDB para algunos cálculos espaciales básicos (en algunos datos bastante grandes), pero me da un error al intentar crear un índice en el shapefile de los condados de Estados Unidos recuperado de los datos TIGER del Censo de Estados Unidos. Tuve que hacer algunas manipulaciones en el terminal para obtener estos datos en MongoDB en primer lugar, ya que Mongo no puede ingerir shapefiles directamente:

$ ogr2ogr -f GeoJSON counties.geojson tl_2015_us_county.shp -t_srs EPSG:4326 # covert shapefile to geojson
$ jq --compact-output ".features" counties.geojson > counties_reformatted.geojson # reformat the .geojson because mongoimport throws an error if you don't
$ mongoimport -d mydb -c counties < counties_reformatted.geojson --jsonArray --batchSize 1 --drop # import to mongodb

Luego creo el índice en el shell de mongo con

> db.counties.createIndex( { "geometry" : "2dsphere" } )

pero me da este error:

.
.
.
Edges 839 and 841 cross. Edge locations in degrees: [-99.8924200, 36.5932380]-[-99.8960610, 36.5932360] and [-99.8960600, 36.5932360]-[-99.8960630, 36.5932360]",
    "code" : 16755

Esto es a lo largo de la frontera de Oklahoma y Kansas.

He logrado que este proceso funcione con shapefiles de los estados de México, por lo que ha funcionado en el pasado. ¿De dónde viene el error? ¿De la conversión ogr2ogr? ¿O de algún problema con el archivo shape en primer lugar?

Los condados, tl_2015_us_county.shp tienen EPSG:4269 por defecto, por lo que sospecho que puede haber un problema en la conversión a EPSG:4326 , pero cambiando t_srs a EPSG:4269 en mi ogr2ogr sciprt no solucionó el problema. Necesito (creo) los condados en EPSG:4326 porque tengo una capa de puntos mucho, mucho más grande ya en este sistema.

Notas:

¿Tal vez Stack Overflow sería un mejor lugar para esto?

La lat/lon invertida no es el problema y este La solución no me funciona.

Actualización:

También he probado a utilizar dos shapefiles diferentes (con distintas resoluciones) del Censo de Estados Unidos aquí y obtengo un error muy similar. Al trazar los puntos que mongo dice que se solapan, no hay una coincidencia perfecta con los puntos del shapefile. Esto me lleva a pensar que algo está fallando en mi proceso de conversión.

Supongo que esto podría resolverse utilizando datos de muy baja resolución, pero no me siento muy cómodo con eso.

Además, las consultas espaciales sin el índice no son realmente una opción aquí. Tardan muchísimo sin el índice.

Información sobre la versión:

os: Ubuntu 14.04
mongodb: 3.2.7
ogr2ogr4: GDAL 1.10.1, released 2013/08/26
jq: 1.3

Shapefile (por si alguien quiere replicar esto):

wget ftp://ftp2.census.gov/geo/tiger/TIGER2015/COUNTY/tl_2015_us_county.zip --no-parent --relative --recursive --level=2 --accept=zip --mirror

1voto

DA. Puntos 500

No he analizado el problema con tus datos, pero mi opinión es que el error se debe a una limitación del formato shapefile. La consistencia topológica no es forzada/inherente al formato shapefile ( la explicación de esri aquí ). El sistema de indexación espacial de Mongo requiere consistencia topológica.

Al carecer de la aplicación de la coherencia en el formato de origen, hay múltiples formas de que el proceso salga mal, como la precisión incoherente de las coordenadas o los errores de redondeo en la conversión.

Mi respuesta es que tal vez necesites un SIG para lo que pretendes conseguir. Un SIG (QGIS por ejemplo) tiene herramientas para resolver problemas de topología. Por supuesto, si usted va todo el camino a un SIG que podría hacer el análisis allí también.

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