使用GDAL创建的Shapefile不保留投影

时间:2016-03-23 21:13:20

标签: python projection gdal shapefile ogr

我使用Python中的GDAL和shapely库生成shapefile。投影存在问题,当我在ArcMap中导入生成的shapefile时,没有与文件关联的投影。我该如何纠正,或者如何投影生成的图层?

这是我的代码:

output_shp = "circle.shp"
data_projection = 26919

[...]

srs = osr.SpatialReference()
srs.ImportFromEPSG(data_projection)

# output of srs: <osgeo.osr.SpatialReference; proxy of <Swig Object of type 'OSRSpatialReferenceShadow *' at 0x00000000099FF5A0> >

driver = ogr.GetDriverByName('Esri Shapefile')
ds = driver.CreateDataSource(output_shp)
layer = ds.CreateLayer(layer_name, srs, ogr.wkbPolygon)
layer.CreateField(ogr.FieldDefn('id',ogr.OFTInteger))
defn = layer.GetLayerDefn()  

for x in range(0,length):
    feat = ogr.Feature(defn)
    feat.SetField('id', x+1)

    geome = ogr.CreateGeometryFromWkt(geom_out[x].wkt)
    feat.SetGeometry(geome)   
    layer.CreateFeature(feat)

1 个答案:

答案 0 :(得分:0)

确定。我找到了解决方案thanks to MikeT answer in this post.

问题是我的GDAL_DATA环境变量未正确设置。因此,我添加到我的图层的SRS是空的,因为它无法在目录中找到它。

进行一些检查以确定输入是否失败(感谢MikeT):

from osgeo import osr
testSR = osr.SpatialReference()
res = testSR.ImportFromEPSG(4326)
if res != 0:
    raise RuntimeError(repr(res) + ': could not import from EPSG')
print testSR.ExportToPrettyWkt()