注意,所有层都需要坐标polyline2.SpatialReference = new SpatialReference(102113);
对两个图元求交:
(1) private void insertGeometryService()
{
MyMap.MinimumResolution = double.Epsilon;
geometryService = new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
//geometryService.SimplifyCompleted += new EventHandler<GraphicsEventArgs>(geometryService_SimplifyCompleted);
geometryService.Failed += new EventHandler<TaskFailedEventArgs>(geometryService_Failed);
query.IntersectLayer("18");//取得截取的面区域,用来做截取
}
(2)
public void drawInnerYLX()
{
try
{
if ((query.IntersectGraphicsLayer != null) && (graphicList != null))//graphicList 是很的的线,比如等值线
{//query.IntersectGraphicsLayer即刚取到的截取的面区域
query.IntersectGraphicsLayer.Geometry.SpatialReference = new SpatialReference(102113);
geometryService.IntersectCompleted += new EventHandler<GraphicsEventArgs>(geometryService_IntersectCompleted);
geometryService.IntersectAsync(graphicList, query.IntersectGraphicsLayer.Geometry);
}
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
}
(3) void geometryService_IntersectCompleted(object sender, GraphicsEventArgs e)
{
GraphicsLayer intersectGraphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
intersectGraphicsLayer.ClearGraphics();
foreach (Graphic g in e.Results)
{
g.Symbol = LayoutRoot.Resources["DefaultLineSymbol"] as Symbol;
intersectGraphicsLayer.Graphics.Add(g);
}
}
求关系类型:
(1)添加需要加入分析的图层。。。
geometryService =
new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
geometryService.RelationCompleted += new EventHandler<RelationEventArgs>(geometryService_RelationCompleted);
geometryService.SimplifyCompleted += new EventHandler<GraphicsEventArgs>(geometryService_SimplifyCompleted);
geometryService.Failed += new EventHandler<TaskFailedEventArgs>(geometryService_Failed);
GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer; geometryService.SimplifyAsync(graphicsLayer.graphics);
(2)增加二级图层:
void geometryService_SimplifyCompleted(object sender, GraphicsEventArgs e)
{
GraphicsLayer pointLayer = MyMap.Layers["MyGraphicsLayer2"] as GraphicsLayer;
geometryService.RelationAsync(
pointLayer.Graphics,
e.Results,
GeometryRelation.esriGeometryRelationWithin, null);//这里还有个参数是关于图层关系的,这里是求包括在范围内
}
(3)求得关系:
void geometryService_RelationCompleted(object sender, RelationEventArgs e)
{
List<GeometryRelationPair> results = e.Results;
GraphicsLayer pointLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
foreach (GeometryRelationPair pair in results)
{
if (pointLayer.Graphics[pair.Graphic1Index].Attributes["Relation"] == null)
{
pointLayer.Graphics[pair.Graphic1Index].Attributes["Relation"] =
string.Format("Within Polygon {0}", pair.Graphic2Index);
}
else
{
pointLayer.Graphics[pair.Graphic1Index].Attributes["Relation"] +=
"," + pair.Graphic2Index.ToString();
}
//if (polygonLayer.Graphics[pair.Graphic2Index].Attributes["Relation"] == null)
//{
// polygonLayer.Graphics[pair.Graphic2Index].Attributes["Relation"] =
// string.Format("Contains Point {0}", pair.Graphic1Index);
//}
//else
//{
// polygonLayer.Graphics[pair.Graphic2Index].Attributes["Relation"] +=
// "," + pair.Graphic1Index.ToString();
//}
}
}