
Возникла проблема с курсовой работай. На карте ArcMap есть АЗС, необходимо создать приложение на ArcObjects C#, которое выполняет пространственный и атрибутивный запросы. А именно при пространственном запросе строит буфер, при этом выделяя АЗС, которые попали в этот самый буфер, и после выполняет атрибутивный запрос по ним. Нашел код на http://help.arcgis.com/, пространственный запрос:
Код: Выделить всё
public ESRI.ArcGIS.Geodatabase.IFeatureCursor GetAllFeaturesFromPointSearchInGeoFeatureLayer(System.Double searchTolerance, ESRI.ArcGIS.Geometry.IPoint point, ESRI.ArcGIS.Carto.IGeoFeatureLayer geoFeatureLayer, ESRI.ArcGIS.Carto.IActiveView activeView)
{
if (searchTolerance < 0 || point == null || geoFeatureLayer == null || activeView == null)
{
return null;
}
ESRI.ArcGIS.Carto.IMap map = activeView.FocusMap;
// Expand the points envelope to give better search results
ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope;
envelope.Expand(searchTolerance, searchTolerance, false);
ESRI.ArcGIS.Geodatabase.IFeatureClass featureClass = geoFeatureLayer.FeatureClass;
System.String shapeFieldName = featureClass.ShapeFieldName;
// Create a new spatial filter and use the new envelope as the geometry
ESRI.ArcGIS.Geodatabase.ISpatialFilter spatialFilter = new ESRI.ArcGIS.Geodatabase.SpatialFilterClass();
spatialFilter.Geometry = envelope;
spatialFilter.SpatialRel = ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects;
spatialFilter.set_OutputSpatialReference(shapeFieldName, map.SpatialReference);
spatialFilter.GeometryField = shapeFieldName;
// Do the search
ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = featureClass.Search(spatialFilter, false);
return featureCursor;
}
#1
Код: Выделить всё
public ESRI.ArcGIS.Geodatabase.ICursor PerformAttributeQuery(ESRI.ArcGIS.Geodatabase.ITable table, System.String whereClause)
{
ESRI.ArcGIS.Geodatabase.IQueryFilter queryFilter = new ESRI.ArcGIS.Geodatabase.QueryFilterClass();
queryFilter.WhereClause = whereClause; // create the where clause statement
// query the table passed into the function and use a cursor to hold the results
ESRI.ArcGIS.Geodatabase.ICursor cursor = table.Search(queryFilter, false);
return cursor;
}
Код: Выделить всё
FeatureLayer featurelayer = (FeatureLayer)layer;
Filter filter = new Filter();
Filter.WhereExpression = "CITY_NAME = 'Phoenix'";
Envelope envelope = new Envelope( - 119, 32, - 113, 35);
filter.Geometry = envelope;
FeatureLayer targetlayer = (FeatureLayer)layercollection.FindByName("States");
string targetwhere = "";
SelectionBuffer selectionbuffer = new SelectionBuffer(targetlayer, targetwhere);
selectionbuffer.Distance = 200;
selectionbuffer.Units = BufferUnits.Miles;
SimpleRenderer targetrenderer = new SimpleRenderer();
SimpleFillSymbol sfs = new SimpleFillSymbol();
sfs.Color = System.Drawing.Color.Yellow;
targetrenderer.Symbol = sfs;
FeatureLayer selectionlayer = featurelayer.CreateBufferSelectionLayer(filter,
selectionbuffer, targetrenderer, "mybufferselection");
mapview.Layers.Add(selectionlayer);
mapview.Draw();

Заранее благодарен за помощь!