Digamos que armé un Shapefile y todas las entidades tienen sus vértices desplazados en una cantidad constante. ¿Cuál es la forma más fácil de cambiar todas las características (de ahí la posición (x, y) de sus vértices) mediante un desplazamiento arbitrario? Tengo muchos archivos a los que aplicaría esta corrección, por lo que sería preferible una respuesta Bash / OGR :)
Finalmente, terminé usando Spatialite para esto, ya que tiene una buena función ShiftCoords
. Sin embargo, el hilo fue muy informativo! ¡Gracias a todos!
Respuestas:
Usando JEQL Esto se puede hacer con tres líneas:
fuente
Diseñé Fiona (un contenedor OGR) para simplificar este tipo de procesamiento.
Actualización : he puesto una versión diferente y más ajustada de este script en http://sgillies.net/blog/1128/geoprocessing-for-hipsters-translating-features .
fuente
Y aunque la publicación está etiquetada con python, ya que JEQL ya se ha mencionado, aquí hay un ejemplo con JavaScript (usando GeoScript ).
fuente
Usando GDAL> = 1.10.0 compilado con SQLite y SpatiaLite:
donde shiftX = 1 y shiftY = 10.
fuente
El módulo GRASS GIS v.edit :
Se supone una ubicación y un conjunto de mapas existentes en la proyección coincidente.
En un script de shell:
o en un script de Python:
fuente
Otra opción sería usar las opciones de reproyección simplemente en ogr2ogr, ciertamente un enfoque más hackear que los enfoques JEQL, Fiona o GeoScript, pero no obstante efectivos. Tenga en cuenta que las proyecciones desde y hacia realmente no necesitan ser la proyección real del archivo de forma original siempre que lo único que esté cambiando entre las proyecciones utilizadas en s_srs y t_srs sean la falsa este y el norte. En este ejemplo, solo estoy usando Google Mercator. Estoy seguro de que hay un sistema de coordenadas mucho más simple para usar como base, pero este estaba justo frente a mí para copiar / pegar.
O para guardar la escritura / pegado, guarde lo siguiente en
projcs.txt
(igual que arriba, pero quitado entre comillas simples):-s_srs EPSG:900913 -t_srs PROJCS["Google Mercator",GEOGCS["WGS 84",DATUM["World Geodetic System 1984",SPHEROID["WGS 84",6378137.0,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0.0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.017453292519943295],AXIS["Geodetic latitude",NORTH],AXIS["Geodetic longitude",EAST],AUTHORITY["EPSG","4326"]],PROJECTION["Mercator_1SP"],PARAMETER["semi_minor",6378137.0],PARAMETER["latitude_of_origin",0.0],PARAMETER["central_meridian",0.0],PARAMETER["scale_factor",1.0],PARAMETER["false_easting",1000.0],PARAMETER["false_northing",1000.0],UNIT["m",1.0],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","900913"]]
y luego ejecuta:
fuente
--optfile
, por ejemploogr2ogr --optfile projcs.txt shifted.shp input.shp
. Lo doblaré en la respuesta.Una opción R usando el paquete maptools y su función elide:
fuente
Usando el analizador shapefile en geofunciones, puede usar XSLT para realizar el proceso. Por supuesto, necesitaría volver a convertirlo en shapefile después :-).
fuente
Aquí hay una versión Groovy GeoScript:
fuente
Aquí está la versión de OGR
driver = ogr.GetDriverByName ("ESRI Shapefile")
movimiento def (dx, dy, dz):
fuente