Creating Geometry Objects From Features
You may want to use an existing feature as part of a spatial query. To retrieve the feature’s geometry and convert it into an appropriate format for a query, perform the following steps:
- Create a query that will select the feature.
- Query the feature class containing the feature using AcMapLayer.SelectFeatures() or MgFeatureService.SelectFeatures().
- Obtain the feature from the query using the MgFeatureReader.ReadNext() method.
- Get the geometry data from the feature using the MgFeatureReader.GetGeometry() method. This data is in AGF binary format.
- Convert the AGF data to an MgGeometry object using the MgAgfReaderWriter.Read() method.
For example, the following sequence creates an MgGeometry object representing the boundaries of zone 1 in the layer named “zones”. It creates an MgGeometry object and the WKT representation of that object.
MgLayerCollection layers = currentMap.GetLayers();
MgLayerBase layer = layers.GetItem("zones");
string fsId = layer.GetFeatureSourceId();
string className = layer.GetFeatureClassName();
MgFeatureQueryOptions query =new MgFeatureQueryOptions();query.SetFilter("ZONE_ID = 1");MgResourceIdentifier resId =new MgResourceIdentifier(fsId);MgFeatureReader featureReader =fs.SelectFeatures(resId,className, query);if (featureReader.ReadNext()){string geometryName = layer.GetFeatureGeometryName();MgByteReader geometryData =featureReader.GetGeometry(geometryName);MgAgfReaderWriter agfReaderWriter = new MgAgfReaderWriter();MgGeometry geometry = agfReaderWriter.Read(geometryData);MgWktReaderWriter wktReaderWriter = new MgWktReaderWriter();string wkt = wktReaderWriter.Write(geometry);}
The following assumes that another feature class has a geometry property SHPGEOM. It uses the WKT string in a query to find features in the other feature class that intersect the zone:
MgFeatureQueryOptions queryOpts = new MgFeatureQueryOptions();
queryOpts.SetFilter("SHPGEOM intersects GEOMFROMTEXT(" +
wkt + ")");