Angenommen, ich habe ein Shapefile zusammengestellt und bei allen Features sind die Scheitelpunkte um einen konstanten Betrag verschoben. Was ist der einfachste Weg, um alle Merkmale (daher die (x, y) -Position ihrer Scheitelpunkte) durch eine willkürliche Verschiebung zu verschieben? Ich habe viele Dateien, auf die ich diese Korrektur anwenden würde, daher wäre eine Bash / OGR-Antwort vorzuziehen :)
Schließlich habe ich Spatialite dafür verwendet, da es die nette Funktion hat ShiftCoords
. Der Thread war jedoch sehr informativ! Vielen Dank an alle!
Antworten:
Verwenden von JEQL Dies kann in drei Zeilen erfolgen:
quelle
Ich habe Fiona (einen OGR-Wrapper) entwickelt, um diese Art der Verarbeitung zu vereinfachen.
Update : Ich habe eine andere, engere Version dieses Skripts unter http://sgillies.net/blog/1128/geoprocessing-for-hipsters-translating-features veröffentlicht .
quelle
Und obwohl der Beitrag mit Python getaggt ist, ist hier ein Beispiel mit JavaScript (unter Verwendung von GeoScript ) , da JEQL bereits erwähnt wurde .
quelle
Mit GDAL> = 1.10.0 kompiliert mit SQLite und SpatiaLite:
Dabei ist shiftX = 1 und shiftY = 10.
quelle
Das Modul GRASS GIS v.edit :
Ein vorhandener Ort und eine vorhandene Karte in der übereinstimmenden Projektion werden angenommen.
In einem Shell-Skript:
oder in einem Python-Skript:
quelle
Eine andere Möglichkeit wäre, die Reprojektionsoptionen einfach in ogr2ogr zu verwenden, was sicherlich hackiger ist als die JEQL-, Fiona- oder GeoScript-Ansätze, aber trotzdem effektiv. Beachten Sie, dass die Projektionen von und bis nicht unbedingt die eigentliche Projektion des ursprünglichen Shapefiles sein müssen, solange sich zwischen den in s_srs und t_srs verwendeten Projektionen nur die falsche Ost- und Nordrichtung ändert. In diesem Beispiel verwende ich nur Google Mercator. Ich bin mir sicher, dass es ein viel einfacheres Koordinatensystem gibt, das ich als Basis verwenden kann, aber dieses war genau vor mir, um es zu kopieren / einzufügen.
Oder speichern Sie Folgendes, um das Eingeben / Einfügen zu speichern
projcs.txt
(wie oben, jedoch ohne einfache Anführungszeichen):-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"]]
und dann laufen:
quelle
--optfile
, zogr2ogr --optfile projcs.txt shifted.shp input.shp
. Ich werde es in die Antwort falten.Eine R-Option unter Verwendung des Pakets maptools und seiner elide-Funktion:
quelle
Mit dem Shapefile-Parser in Geofunktionen können Sie den Prozess mithilfe von XSLT ausführen. Natürlich müsstest du danach wieder in Shapefile konvertieren :-).
quelle
Hier ist eine Groovy GeoScript-Version:
quelle
Hier ist die OGR-Version
driver = ogr.GetDriverByName ("ESRI-Shapefile")
def move (dx, dy, dz):
quelle