【问题标题】:create a shape file创建形状文件
【发布时间】:2012-10-23 07:10:02
【问题描述】:

我想用 2 个点创建一个 shapefile(一条线)。

我有以下脚本:

import ogr, sys, os

line=ogr.Geometry(ogr.wkbLineString)
line.AddPoint(10,10)
line.AddPoint(20,20)

driver=ogr.GetDriverByName('ESRI Shapefile')
ds=driver.CreateDataSource('C:\test.shp')
layer=ds.CreateLayer('test', geom_type=ogr.wkbLineString)
fieldDefn=ogr.FieldDefn('id', ogr.OFTInteger)
layer.CreateField(fildDefn)
featureDefn=layer.GetLayerDefn()
feature=ogr.Feature(featureDefn)
feature.SetGeometry(line)
feature.SetField('id',1)
layer.CreateFeature(feature)

我有两个错误..

"错误1:创建文件失败。shp文件。 错误 4:无法打开 Shapefile"

有人知道问题出在哪里吗? 谁能帮我? 非常感谢

【问题讨论】:

  • 如果您想知道为什么您的 id 字段不起作用:您创建字段的位置有一个错字:layer.CreateField(fildDefn) 应该是 layer.CreateField(fieldDefn)

标签: python ogr


【解决方案1】:

您忘记通知大地测量系统。下面这种方式有效。

import ogr, sys, os
import osgeo.osr as osr

line=ogr.Geometry(ogr.wkbLineString)
line.AddPoint(10,10)
line.AddPoint(20,20)

driver=ogr.GetDriverByName('ESRI Shapefile')
ds=driver.CreateDataSource('test.shp')

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

layer=ds.CreateLayer('test', srs, ogr.wkbLineString)
fieldDefn_=ogr.FieldDefn('id', ogr.OFTInteger)
layer.CreateField(fieldDefn_)
featureDefn=layer.GetLayerDefn()
feature=ogr.Feature(featureDefn)
feature.SetGeometry(line)
feature.SetField('id',1)
layer.CreateFeature(feature)

【讨论】:

    【解决方案2】:

    您需要替换\t 字符;它们表示 python 字符串文字中的制表符。要么加倍斜线,要么使用原始 python 字符串:

    ds=driver.CreateDataSource('C:\\test.shp')
    

    ds=driver.CreateDataSource(r'C:\test.shp')
    

    (注意字符串开头的r)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多