Hello-
I'm trying to create a point shapefile of all the first points in the polygons
(from a poly shapefile) as shown below. I also want to assign some attributes
to the different point features. I am having some issues doing this. I get an
error on the "feaPt.SetField("LAND_USE", sLandUse)" line that says
"AccessViolationException was unhandled Attempted to read or write protected
memory. This is often an indication that other memory is corrupt".
If I take the attribute stuff out it runs fine and creates the shapefile. I've
done attribute adding before and this way has always worked for me, any ideas
what I'm doing wrong???
public void BuildShapefile(string sPolyShapeFile)
{
Ogr.RegisterAll();
// Get driver for the shapefiles
Driver drvShpFile = Ogr.GetDriverByName("ESRI Shapefile");
// Create a Spatial Reference
OSGeo.OSR.SpatialReference srGeo = new OSGeo.OSR.SpatialReference("");
srGeo.SetGeogCS("Geographic Coordinate System",
OSGeo.OSR.Osr.SRS_DN_WGS84, OSGeo.OSR.Osr.SRS_DN_WGS84,
OSGeo.OSR.Osr.SRS_WGS84_SEMIMAJOR, OSGeo.OSR.Osr.SRS_WGS84_INVFLATTENING,
"Greenwich", 0.0, "degree", 0.0174532925199433);
// Create a datasource for the polygon file and for the new point file
DataSource dsPolyShpFile = Ogr.Open(sPolyShapeFile, 0);
DataSource dsPtShpFile =
drvShpFile.CreateDataSource("D:\\Vector\\Output", new string[] { });
// Create layers for the polygon file and the point file
Layer lyrPoly = dsPolyShpFile.GetLayerByIndex(0);
Layer lyrPt = dsPtShpFile.CreateLayer("Junk", srGeo,
wkbGeometryType.wkbPoint, new string[] { });
// Create Field Definition, Feature Definition and Features to enable
us writing attributes to the new shapefile
FeatureDefn feadefPt = lyrPt.GetLayerDefn();
Feature feaPt = new Feature(feadefPt);
Feature feaPoly;
FieldDefn flddefLandUse = new FieldDefn("LAND_USE",
FieldType.OFTString);
flddefLandUse.SetWidth(100);
//// Create an attribute field
lyrPt.CreateField(flddefLandUse, 0);
flddefLandUse.Dispose();
// Create the Geometry for the new point file
Geometry geoPoint = new Geometry(wkbGeometryType.wkbPoint);
Geometry geoPoly = new Geometry(wkbGeometryType.wkbPolygon);
Geometry geoPolyRing = new Geometry(wkbGeometryType.wkbLinearRing);
int iFeaCount = lyrPoly.GetFeatureCount(1);
// Loop through the poly file to get the points
for (int iFea = 0; iFea < iFeaCount; iFea++)
{
feaPoly = lyrPoly.GetFeature(iFea);
string sLandUse = feaPoly.GetFieldAsString("PGLANDUSE");
geoPoly = feaPoly.GetGeometryRef();
geoPolyRing = geoPoly.GetGeometryRef(0);
// Add a point
geoPoint.AddPoint(geoPolyRing.GetX(0), geoPolyRing.GetY(0), 0.0);
feaPt.SetGeometry(geoPoint);
// Set the attribute
feaPt.SetField("LAND_USE", sLandUse);
lyrPt.CreateFeature(feaPt);
geoPoint.Empty();
if (iFea == (iFeaCount - 1))
feaPoly.Dispose();
}
geoPolyRing.Dispose();
geoPoly.Dispose();
geoPoint.Dispose();
feaPt.Dispose();
feadefPt.Dispose();
lyrPoly.Dispose();
lyrPt.Dispose();
dsPolyShpFile.Dispose();
dsPtShpFile.Dispose();
srGeo.Dispose();
drvShpFile.Dispose();
}
Thanks,
Amanda M. Henneke
When One tugs at a single thing in Nature, he finds it attached to the rest of
the world. -John Muir
Please consider the environment before printing this e-mail.
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev