Creating Geometry Objects From Features

AutoCAD Map 3D Geospatial Platform API

 
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 + ")");