2012-11-02 40 views
3

我想用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:无法打开shape文件”

任何人都知道问题是什么? 任何人都可以帮助我吗? 非常感谢

+0

: 还有就是你创建领域的错字:'layer.CreateField(fildDefn)'应该是'layer.CreateField(fieldDefn)' – LuWi

回答

1

您需要更换\t个字符;它们表示python字符串文字中的制表符。无论是双斜线,或使用原始的Python字符串,而不是:

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

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

(注意r在字符串的开始)。

2

你忘了通知大地测量系统。下面的方式工作。

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) 
如果你想知道为什么你的id字段将无法正常工作