deadpickle wrote:
Not much of a response going on here. In order to change the shapefile
projection from geographic to projected do I need to reopen the file,
get each feature, and transform the points individually? If so what
calls do I need to invoke?
On Mar 1, 12:54 pm, Jamie Lahowetz <deadpic...@gmail.com> wrote:
I'm new to GDAL and am usingthe python bindings. I want to transform a newly
created shapefile from WGS84 to a Lambert Conical Conformal so that I can
calculate the length of the contained polylines. The script exits with no
errors but when I look at the shapefile in arcCatalog I see that the
projection is still WGS84. Any ideas? Also, is there a way to calculate the
length directly from GDAL? Thanks.
Jamie,
My suggestion in the following script would be to create the file with
the "target" srs instead of WGS84, and to transform the geometry
before even assigning it to the feature that will be written.
A few notes:
* There is no way with OGR of changing the coordinate system of
an existing layer. The only point at which it can be set is
layer creation time.
* The CreateFeature() method on the layer creates the feature in
the datastore (ie. shapefile) but there is no meaningful
connection maintained between the ogr.Feature object and the
feature in the file after this. Alterations to the feature
or it's geometry will have no effect on the file without doing
another layer.SetFeature() call.
import os
try:
from osgeo import ogr
from osgeo import osr
except:
import ogr
import osr
#~ start driver
driver = ogr.GetDriverByName('ESRI Shapefile')
#~ set workspace
ws = 'C:\\Users\\deadpickle\\
Desktop\\case study\\verify\\'
os.chdir(ws)
#~ check if it exists
if os.path.exists('test.shp'):
driver.DeleteDataSource('test.shp')
#~ create a new shp
ds = driver.CreateDataSource('test.shp')
#~ create spatref for new shp
source = osr.SpatialReference()
source.SetFromUserInput('WGS84')
#~ create a new data layer
layer = ds.CreateLayer('test',geom_type=ogr.wkbLineString,srs=source)
#~ add an id field
fieldDefn = ogr.FieldDefn('id', ogr.OFTInteger)
layer.CreateField(fieldDefn)
#~ create a geometry
line = ogr.Geometry(ogr.wkbLineString)
#~ get the def of the layer, scheme
featureDefn = layer.GetLayerDefn()
# create a new feature
feature = ogr.Feature(featureDefn)
#~ Read 2006track file
file = open("2006track.csv","r")
file.readline()
lnlist = file.readlines()
for lines in lnlist:
value = lines.split(",")
if float(value[1]) == 2:
print value
line.AddPoint(float(value[3]),float(value[2]))
#~ set the field 'ID'
feature.SetField('id', float(value[1]))
#~ set the geometry for this shp
feature.SetGeometry(line)
# add the feature to the output layer
layer.CreateFeature(feature)
#~ feature = layer.GetFeature(0)
geom = feature.GetGeometryRef()
#~ change projection to lcc
target = osr.SpatialReference()
target.ImportFromProj4('+proj=lcc +lat_1= 33.000000 +lat_2=45.000000
+lat_0=39.000000 +lon_0=-96.000000 +x_0=0.0 +y_0=0.0')
coordtrans = osr.CoordinateTransformation(source, target)
geom.Transform(coordtrans)
# destroy the geometry and feature and close the data source
ds.Destroy()
line.Destroy()
feature.Destroy()
file.close()
_______________________________________________
gdal-dev mailing list
gdal-...@lists.osgeo.orghttp://lists.osgeo.org/mailman/listinfo/gdal-dev
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev
--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, warmer...@pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush | Geospatial Programmer for Rent
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev