Powiedzmy, że utworzyłem plik kształtu i wszystkie elementy mają przesunięte wierzchołki o stałą wartość. Jaki jest najprostszy sposób na przesunięcie wszystkich cech (stąd pozycja (x, y) ich wierzchołków) o dowolne przesunięcie? Mam wiele plików, do których chciałbym zastosować tę poprawkę, więc preferowana byłaby odpowiedź Bash / OGR :)
W końcu użyłem do tego Spatialite, ponieważ ma on fajną funkcję ShiftCoords
. Wątek był jednak bardzo pouczający! Dziękuje wszystkim!
Odpowiedzi:
Korzystanie z JEQL Można to zrobić za pomocą trzech linii:
źródło
Zaprojektowałem Fionę (owijkę OGR), aby ten rodzaj przetwarzania był prosty.
Aktualizacja : Umieściłem inną, ściślejszą wersję tego skryptu na stronie http://sgillies.net/blog/1128/geoprocessing-for-hipsters-translating-features .
źródło
I chociaż post jest otagowany pytonem, ponieważ JEQL został już wspomniany, oto przykład z JavaScript (przy użyciu GeoScript ).
źródło
Używając GDAL> = 1.10.0 skompilowanych z SQLite i SpatiaLite:
gdzie shiftX = 1 i shiftY = 10.
źródło
Moduł GRASS GIS v.edit :
Zakładana jest istniejąca lokalizacja i zestaw map w pasującej projekcji.
W skrypcie powłoki:
lub w skrypcie Python:
źródło
Inną opcją byłoby użycie opcji reprojection po prostu w ogrod2ogr, z pewnością bardziej skomplikowane podejście niż w przypadku JEQL, Fiona lub GeoScript, ale skuteczne mimo wszystko. Zauważ, że rzuty do i do tak naprawdę nie muszą być rzeczywistym rzutem oryginalnego pliku kształtu, o ile jedyną rzeczą, która zmienia się między rzutami używanymi w s_srs i t_srs, jest fałszywe wschodzenie i północ. W tym przykładzie używam tylko Google Mercator. Jestem pewien, że istnieje znacznie prostszy układ współrzędnych, który można wykorzystać jako bazę, ale ten był przede mną do skopiowania / wklejenia.
Lub, aby zapisać pisanie / wklejanie, zapisz następujące elementy
projcs.txt
(tak samo jak powyżej, ale usunąłem pojedyncze cudzysłowy):-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"]]
a następnie uruchom:
źródło
--optfile
npogr2ogr --optfile projcs.txt shifted.shp input.shp
. Złożę to do odpowiedzi.Opcja R wykorzystująca pakiety maptools i jej funkcję elide:
źródło
Używając parsera plików shapefile w geofunkcjach, możesz użyć XSLT do wykonania tego procesu. Oczywiście musisz później przekonwertować plik shapefile :-).
źródło
Oto wersja Groovy GeoScript:
źródło
Oto wersja OGR
driver = ogr.GetDriverByName („Plik kształtu ESRI”)
def move (dx, dy, dz):
źródło