Как добавить проекцию в Shapefile, используя инструменты с открытым исходным кодом?


10

Мне дали несколько шейп-файлов без проекции. Поэтому мне нужно добавить проекцию, чтобы отобразить ее на карте Google. Я нашел нужную мне информацию о проекции по адресу http://spatialreference.org/ref/epsg/2066 .

Вопрос:
Как я могу добавить проекцию, используя метод с открытым исходным кодом (не иметь доступа к программному обеспечению ESRI)?

Спасибо
Крис

Ответы:


16

Используйте ogr2ogr из GDAL :

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

Что хорошо в ogr, так это в том, что он может использовать существующий файл PRJ в качестве входных данных:

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


2
При попытке использовать утилиту, указанную выше, появляется следующее сообщение об ошибке: «Не удается преобразовать координаты, исходный слой не имеет системы координат. Используйте -s_srs для ее установки».
ChrisJ

@ Крис Я написал неправильное использование, поэтому попробуйте a_srs «назначить» выходной
проект

Не знал, что вы могли бы поставить .prj для -a_srs. Спасибо!
aendrew

7

Проекция в файл .shp находится в shapefilename.prj. Это в основном текстовый файл с информацией, которую вы нашли. Посмотрите на некоторые из ваших файлов формы и выясните, как записывается информация. Или менее скомпилированный, если у вас есть другой файл .shp в той же проекции, просто скопируйте его и измените имя соответственно.


Я вручную создал файл с информацией, которую нашел в Интернете. Но это все еще не отображается правильно. Есть ли утилита, которую я могу использовать для создания файла проекции с этими данными?
ChrisJ

3
Вы также можете использовать пространственный адрес.org, где вы можете найти и загрузить файл .PRJ, а затем переименовать его с тем же префиксом, что и у файла .SHP
Mike T


2

Загрузите файл .prj по указанной вами ссылке, а затем переименуйте его в соответствии с файлом формы.


1
это также, вероятно, самый простой метод, поскольку нет необходимости создавать какие-либо промежуточные данные
SaultDon

0

Найдите прикрепленный небольшой скрипт, который записывает ссылку на проекцию изatialreference.org в файл .prj. Он добавляет файл проекции ко всем указанным файлам в каталоге. Например, все шейп-файлы в каталоге E: \. Просто беспокоитесь о коде EPSG проекции, которую вы хотите встроить, расширении файлов, в которые вы хотите добавить файл проекции, и о каталоге, где они находятся. Он будет рекурсивно проходить по всем подкаталогам, поэтому используйте его с осторожностью.

    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

Попробуйте использовать Geokettle http://www.spatialytics.org/, он читает шейп-файлы и имеет возможность добавить SRS в свои преобразования. В противном случае используйте ogr2ogr GUI (только для Windows), чтобы увидеть Srid

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.