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