Como adicionar uma projeção a um Shapefile usando ferramentas de código aberto?


10

Foram-me dados alguns shapefiles SEM uma projeção. Então, eu preciso adicionar a projeção para exibi-la no mapa do google. Encontrei as informações de projeção necessárias em http://spatialreference.org/ref/epsg/2066 .

Pergunta:
Como posso adicionar a projeção usando um método de código aberto (não tem acesso ao software da ESRI)?

Obrigado
Chris

Respostas:


16

Use ogr2ogr da GDAL :

ogr2ogr -a_srs EPSG:2066 output.shp input.shp

O interessante do ogr é que ele também pode usar um arquivo PRJ existente como entrada:

ogr2ogr -a_srs input.prj output.shp input.shp


2
Estou recebendo o seguinte erro quando tento o utilitário acima: "Não é possível transformar coordenadas, a camada de origem não possui um sistema de coordenadas. Use -s_srs para definir uma."
ChrisJ

@ Chris eu escrevi o uso errado, então tente a_srs para "atribuir" uma projeção de saída
SaultDon

Não sabia que você poderia fornecer um .prj para -a_srs. Obrigado!
aendrew

7

A projeção no arquivo .shp está em shapefilename.prj. É basicamente um arquivo de texto, com informações que você encontrou. Veja alguns dos seus arquivos de formas e descubra como as informações são gravadas. Ou menos, se você tiver outro arquivo .shp na mesma projeção, basta copiá-lo e alterar o nome de acordo.


Criei manualmente um arquivo com as informações que encontrei online. Mas ainda não está sendo exibido corretamente. Existe um utilitário que eu possa usar para criar o arquivo de projeção com esses dados?
ChrisJ

3
Você também pode usar spatialreference.org onde você pode encontrar e baixar um arquivo .PRJ, em seguida, renomeá-lo para o mesmo prefixo como o arquivo .SHP
Mike T


2

Faça o download do arquivo .prj no link que você postou e renomeie-o para corresponder ao seu arquivo de forma.


1
este é também, provavelmente, o método mais fácil, uma vez que não há necessidade de criar qualquer intermediário de dados
SaultDon

0

Encontre em anexo um pequeno script que grava a referência de projeção de spatialreference.org em um arquivo .prj. Ele adiciona um arquivo de projeção a todos os arquivos especificados em um diretório. Por exemplo, todos os shapefiles no diretório E: \. Apenas se preocupe com o código EPSG da projeção que você deseja incorporar, a extensão dos arquivos aos quais você deseja adicionar um arquivo de projeção e o diretório em que eles estão. Ele percorrerá recursivamente todos os subdiretórios, portanto, use com cuidado.

    import os

    def getWKT_PRJ (epsg_code):
     import urllib.request, urllib.parse, urllib.error

    # Access projection information
     wkt = urllib.request.urlopen("http://spatialreference.org/ref/epsg/{0}/prettywkt/".format(epsg_code))
     decoded = (wkt.read().decode('utf-8')) 

    # Remove spaces between charachters
     remove_spaces = decoded.replace(" ","")        
    # Place all the text on one line
     output = remove_spaces.replace("\n","")
     return output

    def referencer(folder_path, extension):
        for path, subdirs, files in os.walk(folder_path):
            for name in files:
                file_extension = os.path.splitext(name)[-1]
                if(extension in file_extension):
                    file_path = os.path.join(path,name)
                    file_name = os.path.splitext(file_path)[0]
                    prj = file_name + ".prj"
                    projection = open(prj,"w")
                    projection.write(epsg)
                    projection.close()

    epsg = getWKT_PRJ("25831")              
    referencer('E:\Testfolder', '.shp')

-1

Tente usar o Geokettle http://www.spatialytics.org/, ele lê shapefiles e tem uma opção para adicionar um SRS em suas transformações. Caso contrário, use ogr2ogr gui (somente Windows) para ver o srid

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.