Katakanlah saya mengumpulkan Shapefile dan semua fitur memiliki simpulnya yang digeser dengan jumlah yang konstan. Apa cara termudah untuk menggeser semua fitur (karenanya posisi (x, y) dari simpulnya) oleh pergeseran sewenang-wenang? Saya memiliki banyak file yang akan saya gunakan koreksi ini, jadi jawaban Bash / OGR akan lebih disukai :)
Akhirnya, saya akhirnya menggunakan Spatialite untuk ini, karena memiliki fungsi yang bagus ShiftCoords
. Namun, utas itu sangat informatif! Terima kasih semuanya!
Jawaban:
Menggunakan JEQL Ini dapat dilakukan dengan tiga baris:
sumber
Saya telah merancang Fiona (pembungkus OGR) untuk membuat pemrosesan seperti ini sederhana.
Pembaruan : Saya telah meletakkan versi yang berbeda, lebih kencang dari skrip ini di http://sgillies.net/blog/1128/geoprocessing-for-hipsters-translating-features .
sumber
Dan meskipun postingannya ditandai dengan python, karena JEQL telah disebutkan, inilah contoh dengan JavaScript (menggunakan GeoScript ).
sumber
Menggunakan GDAL> = 1.10.0 dikompilasi dengan SQLite dan SpatiaLite:
di mana shiftX = 1 dan shiftY = 10.
sumber
Modul GRASS GIS v.edit :
Lokasi dan mapset yang ada dalam proyeksi pencocokan diasumsikan.
Dalam skrip shell:
atau dalam skrip Python:
sumber
Opsi lain adalah menggunakan opsi proyeksi ulang hanya di ogr2ogr, tentu saja pendekatan peretasan daripada pendekatan JEQL, Fiona, atau GeoScript tetapi efektif. Perhatikan bahwa proyeksi dari dan ke tidak benar-benar harus menjadi proyeksi aktual dari bentuk asli selama satu-satunya hal yang berubah antara proyeksi yang digunakan dalam s_srs dan t_srs adalah arah timur dan utara palsu. Dalam contoh ini saya hanya menggunakan Google Mercator. Saya yakin ada sistem koordinat yang jauh lebih sederhana untuk digunakan sebagai basis, tapi yang ini tepat di depan saya untuk menyalin / menempel.
Atau untuk menyimpan pengetikan / tempel, simpan yang berikut ke
projcs.txt
(sama seperti di atas, tetapi dihapus dengan menyertakan tanda kutip tunggal):-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"]]
lalu jalankan:
sumber
--optfile
, misogr2ogr --optfile projcs.txt shifted.shp input.shp
. Saya akan melipatnya menjadi jawaban.Opsi R menggunakan paket maptools dan fungsi elide-nya:
sumber
Menggunakan parser shapefile di fungsi-fungsi geografis, Anda bisa menggunakan XSLT untuk melakukan proses. Tentu saja Anda perlu mengonversi kembali ke shapefile sesudahnya :-).
sumber
Ini adalah versi GeoScript Groovy:
sumber
Ini adalah versi OGR
driver = ogr.GetDriverByName ("ESRI Shapefile")
def move (dx, dy, dz):
sumber