如何使用开源工具将投影添加到Shapefile?


Answers:


16

使用ogr2ogrGDAL

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

关于ogr的好处是它还可以使用现有的PRJ文件作为输入:

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


2
当我尝试上述实用程序时,出现以下错误:“无法转换坐标,源图层没有坐标系。请使用-s_srs设置坐标系。”
克里斯·J 2012年

@chris我写了错误的用法,因此请尝试使用a_srs“分配”输出投影
SaultDon 2012年

不知道您可以为-a_srs提供.prj。谢谢!
2015年

7

.shp文件中的投影在shapefilename.prj中。它基本上是文本文件,其中包含您找到的信息。查看一些形状文件并弄清楚如何编写信息。如果您在同一投影中还有其他.shp文件,则只需将其复制并更改其名称即可。


我确实使用我在网上找到的信息手动创建了一个文件。但是它仍然不能正确显示。是否可以使用此数据来创建投影文件的实用程序?
克里斯·J 2012年

3
您还可以使用spatialreference.org找到并下载一个.PRJ文件,然后将其重命名为与.SHP文件相同的前缀
Mike T


2

从您发布的链接下载.prj文件,然后重命名它以匹配您的形状文件。


1
鉴于无需创建任何中间数据,这也可能是最简单的方法
SaultDon

0

查找附带的一个小脚本,该脚本将来自spatialreference.org的投影参考写入到一个.prj文件中。它将投影文件添加到目录中的所有指定文件中。例如,目录E:\中的所有shapefile。只需担心要嵌入的投影的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')

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.