我得到了一些没有投影的shapefile。因此,我需要添加投影才能在Google地图上显示。我在http://spatialreference.org/ref/epsg/2066找到了所需的投影信息。
问题:
如何使用开源方法添加投影(无法访问ESRI的软件)?
谢谢
克里斯
我得到了一些没有投影的shapefile。因此,我需要添加投影才能在Google地图上显示。我在http://spatialreference.org/ref/epsg/2066找到了所需的投影信息。
问题:
如何使用开源方法添加投影(无法访问ESRI的软件)?
谢谢
克里斯
Answers:
ogr2ogr -a_srs EPSG:2066 output.shp input.shp
关于ogr的好处是它还可以使用现有的PRJ文件作为输入:
ogr2ogr -a_srs input.prj output.shp input.shp
.shp文件中的投影在shapefilename.prj中。它基本上是文本文件,其中包含您找到的信息。查看一些形状文件并弄清楚如何编写信息。如果您在同一投影中还有其他.shp文件,则只需将其复制并更改其名称即可。
使用与shapefile(即foo.prj)相同的名称创建一个.prj文件,在文本编辑器中打开该文件,并添加http://spatialreference.org/ref/epsg/2066/的内容。prj /
查找附带的一个小脚本,该脚本将来自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')
尝试使用Geokettle http://www.spatialytics.org/,它会读取shapefile,并可以选择在其转换中添加SRS。否则,请使用ogr2ogr gui(仅限Windows)查看srid