Digamos que eu montei um Shapefile e todos os recursos tenham seus vértices alterados em uma quantidade constante. Qual é a maneira mais fácil de mudar todas as características (daí a posição (x, y) de seus vértices) por uma mudança arbitrária? Eu tenho muitos arquivos aos quais eu aplicaria essa correção, portanto, uma resposta Bash / OGR seria preferida :)
Por fim, acabei usando o Spatialite para isso, pois tem a boa função ShiftCoords
. No entanto, o tópico foi muito informativo! Obrigado a todos!
Respostas:
Usando JEQL Isso pode ser feito com três linhas:
fonte
Eu projetei o Fiona (um wrapper OGR) para simplificar esse tipo de processamento.
Atualização : coloquei uma versão diferente e mais rígida desse script em http://sgillies.net/blog/1128/geoprocessing-for-hipsters-translating-features .
fonte
E apesar de a postagem ter sido marcada com python, já que o JEQL já foi mencionado, aqui está um exemplo com JavaScript (usando GeoScript ).
fonte
Usando GDAL> = 1.10.0 compilado com SQLite e SpatiaLite:
onde shiftX = 1 e shiftY = 10.
fonte
O módulo GRASS GIS v.edit :
Um local e um conjunto de mapas existentes na projeção correspondente são assumidos.
Em um script de shell:
ou em um script Python:
fonte
Outra opção seria usar as opções de reprojeção simplesmente no ogr2ogr, certamente uma abordagem mais obscena do que as abordagens JEQL, Fiona ou GeoScript, mas eficazes, no entanto. Observe que as projeções from e to realmente não precisam ser a projeção real do shapefile original, desde que a única coisa que esteja mudando entre as projeções usadas nos s_srs e t_srs sejam o leste e o norte falsos. Neste exemplo, estou apenas usando o Google Mercator. Estou certo de que existe um sistema de coordenadas muito mais simples para usar como base, mas este estava bem na minha frente para copiar / colar.
Ou, para salvar a digitação / colagem, salve o seguinte em
projcs.txt
(o mesmo que acima, mas removido aspas 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"]]
e então execute:
fonte
--optfile
, por exemploogr2ogr --optfile projcs.txt shifted.shp input.shp
. Vou dobrá-lo na resposta.Uma opção R usando pacotes maptools e sua função elide:
fonte
Usando o analisador shapefile em geofunções, você pode usar o XSLT para executar o processo. Claro que você precisaria converter novamente em shapefile depois :-).
fonte
Aqui está uma versão do Groovy GeoScript:
fonte
Aqui está a versão OGR
driver = ogr.GetDriverByName ("ESRI Shapefile")
def movimento (dx, dy, dz):
fonte