Допустим, я собрал Shapefile, и у всех элементов вершины смещены на постоянную величину. Какой самый простой способ сдвинуть все элементы (отсюда (x, y) положение их вершин) произвольным сдвигом? У меня есть много файлов, к которым я бы применил это исправление, поэтому предпочтение отдается Bash / OGR :)
Наконец, я использовал Spatialite для этого, так как у него есть хорошая функция ShiftCoords
. Тем не менее, тема была очень информативной! Спасибо всем!
Ответы:
Использование JEQL Это можно сделать тремя строками:
источник
Я разработал Fiona (оболочку OGR), чтобы сделать этот вид обработки простым.
Обновление : я поместил другую, более узкую версию этого скрипта по адресу http://sgillies.net/blog/1128/geoprocessing-for-hipsters-translating-features .
источник
И хотя пост помечен python, поскольку JEQL уже упоминался, вот пример с JavaScript (с использованием GeoScript ).
источник
Используя GDAL> = 1.10.0, скомпилированный с SQLite и SpatiaLite:
где shiftX = 1 и shiftY = 10.
источник
Модуль GRASS GIS v.edit :
Предполагается существующее местоположение и набор карт в соответствующей проекции.
В сценарии оболочки:
или в скрипте Python:
источник
Другим вариантом будет использование опций репроецирования просто в ogr2ogr, безусловно, более хакерский подход, чем подходы JEQL, Fiona или GeoScript, но эффективный, тем не менее. Обратите внимание, что проекции from и to не обязательно должны быть фактической проекцией исходного шейп-файла, если между проекциями, используемыми в s_srs и t_srs, изменяется только ложное восточное и северное направления. В этом примере я просто использую Google Mercator. Я уверен, что есть намного более простая система координат, чтобы использовать в качестве основы, но эта была прямо передо мной, чтобы скопировать / вставить.
Или, чтобы сохранить ввод / вставку, сохраните следующее в
projcs.txt
(то же самое, что и выше, но удалили одиночные кавычки):-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"]]
и затем запустите:
источник
--optfile
, напримерogr2ogr --optfile projcs.txt shifted.shp input.shp
. Я сложу это в ответ.Опция R с использованием пакета maptools и его функции elide:
источник
Используя анализатор шейп-файлов в геофункциях, вы можете использовать XSLT для выполнения процесса. Конечно, после этого вам нужно будет преобразовать обратно в шейп-файл :-).
источник
Вот версия Groovy GeoScript:
источник
Вот версия OGR
driver = ogr.GetDriverByName ("Шейп-файл ESRI")
Def Move (DX, DY, DZ):
источник