Supposons que je construise un fichier de formes et que toutes les entités aient leurs sommets décalés de manière constante. Quel est le moyen le plus simple de décaler toutes les entités (d'où la position (x, y) de leurs sommets) d'un décalage arbitraire? J'ai beaucoup de fichiers auxquels j'appliquerais cette correction, donc une réponse Bash / OGR serait préférable :)
Finalement, j'ai utilisé Spatialite pour cela, car il a la fonction intéressante ShiftCoords
. Cependant, le fil était très instructif! Merci a tous!
Réponses:
Utiliser JEQL Cela peut être fait avec trois lignes:
la source
J'ai conçu Fiona (un wrapper OGR) pour simplifier ce type de traitement.
Mise à jour : j'ai mis une version différente et plus précise de ce script à l' adresse http://sgillies.net/blog/1128/geoprocessing-for-hip-translating-features .
la source
Et bien que le message soit tagué avec python, JEQL ayant déjà été mentionné, voici un exemple avec JavaScript (en utilisant GeoScript ).
la source
Utilisation de GDAL> = 1.10.0 compilé avec SQLite et SpatiaLite:
où shiftX = 1 et shiftY = 10.
la source
Le module GRASS GIS v.edit :
Un emplacement et un jeu de cartes existants dans la projection correspondante sont supposés.
Dans un script shell:
ou dans un script Python:
la source
Une autre option consisterait à utiliser les options de reprojection simplement dans ogr2ogr, une approche certainement plus astucieuse que les approches JEQL, Fiona ou GeoScript, mais néanmoins efficace. Notez que les projections de et vers n'ont pas vraiment besoin d'être la projection réelle du fichier de formes original tant que la seule chose qui change entre les projections utilisées dans les s_srs et les t_srs est le faux est et nord. Dans cet exemple, je n'utilise que Google Mercator. Je suis sûr qu'il y a un système de coordonnées beaucoup plus simple à utiliser comme base, mais celui-ci était juste devant moi pour copier / coller.
Ou pour enregistrer en tapant / collant, enregistrez ce qui suit dans
projcs.txt
(comme ci-dessus, mais en supprimant les guillemets 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"]]
puis lancez:
la source
--optfile
, par exempleogr2ogr --optfile projcs.txt shifted.shp input.shp
. Je vais le incorporer dans la réponse.Une option R utilisant le paquet maptools et sa fonction elide:
la source
En utilisant l’analyseur de fichier de formes dans les fonctions géographiques, vous pouvez utiliser XSLT pour effectuer le processus. Bien sûr, vous auriez besoin de reconvertir le fichier de formes après :-).
la source
Voici une version de Groovy GeoScript:
la source
Voici la version OGR
driver = ogr.GetDriverByName ("Fichier de formes ESRI")
def move (dx, dy, dz):
la source