Geometry.cs
上传用户:huazai0421
上传日期:2008-05-30
资源大小:405k
文件大小:1k
源码类别:

SilverLight

开发平台:

C#

  1. 
  2. namespace ESRI.ArcGIS.Samples.Extensions
  3. {
  4. /// <summary>
  5. /// Geometry extension methods
  6. /// </summary>
  7. public static class Geometry
  8. {
  9. public static bool Contains(this ESRI.ArcGIS.Client.Geometry.Polygon polygon, ESRI.ArcGIS.Client.Geometry.MapPoint mapPoint)
  10. {
  11. return mapPoint.IsWithin(polygon);
  12. }
  13. /// <summary>
  14. /// Utility function to determine whether a map point is inside of a given polygon
  15. /// </summary>
  16. /// <param name="polygon"></param>
  17. /// <param name="mapPoint"></param>
  18. /// <returns></returns>
  19. public static bool IsWithin(this ESRI.ArcGIS.Client.Geometry.MapPoint mapPoint, ESRI.ArcGIS.Client.Geometry.Polygon polygon)
  20. {
  21. foreach (ESRI.ArcGIS.Client.Geometry.PointCollection points in polygon.Rings)
  22. {
  23. int j = points.Count - 1;
  24. bool inPoly = false;
  25. for (int i = 0; i < points.Count; i++)
  26. {
  27. if (points[i].X < mapPoint.X && points[j].X >= mapPoint.X ||
  28. points[j].X < mapPoint.X && points[i].X >= mapPoint.X)
  29. {
  30. if (points[i].Y + (mapPoint.X - points[i].X) / (points[j].X - points[i].X) * (points[j].Y - points[i].Y) < mapPoint.Y)
  31. {
  32. inPoly = !inPoly;
  33. }
  34. }
  35. j = i;
  36. }
  37. if (inPoly)
  38. return true;
  39. }
  40. return false;
  41. }
  42. }
  43. }