0

the python code below produces the expected line shapefile viewable in QGIS

import os
from osgeo import ogr
drv=ogr.GetDriverByName('ESRI Shapefile')
if os.path.exists('test.shp'):
 os.remove('test.shp')
ds=drv.CreateDataSource('test.shp')
lyr=ds.CreateLayer('test',None,ogr.wkbUnknown)
flddef=ogr.FieldDefn('Name',ogr.OFTString)
flddef.SetWidth(32)
lyr.CreateField(flddef)
feat=ogr.Feature(lyr.GetLayerDefn())
feat.SetField('Name','george')
line=ogr.Geometry(ogr.wkbLineString)
line.AddPoint(1116651.439379124, 637392.6969887456)
line.AddPoint(1188804.0108498496, 652655.7409537067)
line.AddPoint(1226730.3625203592, 634155.0816022386)
line.AddPoint(1281307.30760719, 636467.6640211721)
feat.SetGeometry(line)
lyr.CreateFeature(feat)
feat.Destroy()
ds.Destroy()

however, when attempting to use the sqlite driver, the database and layer is created with no errors. QGIS can connect to the database and load the layer - though nothing is displayed.

drv=ogr.GetDriverByName('SQLite')
if os.path.exists('test.sqlite'):
 os.remove('test.sqlite')
ds=drv.CreateDataSource('test.sqlite',options=['SPATIALITE=yes'])
lyr=ds.CreateLayer('test',None,options=['FORMAT=SPATIALITE'])
flddef=ogr.FieldDefn('Name',ogr.OFTString)
flddef.SetWidth(32)
lyr.CreateField(flddef)
feat=ogr.Feature(lyr.GetLayerDefn())
feat.SetField('Name','george')
line=ogr.Geometry(ogr.wkbLineString)
line.AddPoint(1116651.439379124, 637392.6969887456)
line.AddPoint(1188804.0108498496, 652655.7409537067)
line.AddPoint(1226730.3625203592, 634155.0816022386)
line.AddPoint(1281307.30760719, 636467.6640211721)
feat.SetGeometry(line)
lyr.CreateFeature(feat)
feat.Destroy()
ds.Destroy()

on win7, python 2.7.5 (python (x,y) distribution) BTW - creating a point feature rather than a line works for both cases. also tried removing the spatialite option from the datasource and layer creation - no change. am i missing some obvious step?

asked May 18, 2014 at 14:20

1 Answer 1

0

apparently, this was a geom_type issue, which should be obvious i suppose.

in earlier tests, i would try lyr=ds.CreateLayer('test',geom_type=ogr.wkbLineString,options=['FORMAT=SPATIALITE'])

which would fail with a geometry constraint error.

finally determined that a different geometry type was needed: lyr=ds.CreateLayer('test',geom_type=ogr.wkbLineString25D,options=['FORMAT=SPATIALITE'])

now works great. the line displays fine in QGIS and ArcGIS.

answered May 22, 2014 at 18:52

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.