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

ChrisJ
fonte

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

SaultDon
fonte
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.

Tomek
fonte
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.

RK
fonte
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')
Roberto Zeeland
fonte
-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

Stevetech
fonte