1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
/// <summary>
/// Vérifie avec exactitude mais de façon assez lente si deux polygones se chevauchent
/// </summary>
/// <param name="polygon1"></param>
/// <param name="line"></param>
/// <returns></returns>
private static bool checkCompleteIntersectBetweenArcGISPolygonAndArcGISPolyline(ESRI.ArcGIS.Client.Geometry.Polygon polygon1, ESRI.ArcGIS.Client.Geometry.Polyline line)
{
var g1 = StreamGeometry.Parse(getPathFromArcGISPolygon(polygon1));
var g2 = LineGeometry.Parse(getPathFromArcGISPolyLine(line));
Geometry og2 = g2.GetWidenedPathGeometry(new Pen(Brushes.Black, 1.0));
CombinedGeometry cg = new CombinedGeometry(GeometryCombineMode.Intersect, g1, og2);
PathGeometry pg = cg.GetFlattenedPathGeometry();
return pg.Figures.Count > 0;
}
/// <summary>
/// Vérifie avec exactitude mais de façon assez lente si deux polygones se chevauchent
/// </summary>
/// <param name="polygon1"></param>
/// <param name="polygon2"></param>
/// <returns></returns>
private static bool checkCompleteIntersectWithinArcGISPolygon(ESRI.ArcGIS.Client.Geometry.Polygon polygon1, ESRI.ArcGIS.Client.Geometry.Polygon polygon2)
{
var g1 = StreamGeometry.Parse(getPathFromArcGISPolygon(polygon1));
var g2 = StreamGeometry.Parse(getPathFromArcGISPolygon(polygon2));
CombinedGeometry cg = new CombinedGeometry(GeometryCombineMode.Intersect, g1, g2);
PathGeometry pg = cg.GetFlattenedPathGeometry();
return pg.Figures.Count > 0;
}
/// <summary>
///
/// </summary>
/// <param name="polyLine"></param>
/// <returns></returns>
private static string getPathFromArcGISPolyLine(ESRI.ArcGIS.Client.Geometry.Polyline polyLine)
{
var provider = new CultureInfo("en");
var path = "";
foreach (var pathArcGis in polyLine.Paths)
{
var first = true;
foreach (var pointArcGis in pathArcGis)
{
if (first)
{
path += string.Format("M {0},{1}", pointArcGis.X.ToString(provider), pointArcGis.Y.ToString(provider));
first = false;
continue;
}
path += string.Format(" L {0},{1}", pointArcGis.X.ToString(provider), pointArcGis.Y.ToString(provider));
}
}
return path;
}
/// <summary>
///
/// </summary>
/// <param name="polygon1"></param>
/// <returns></returns>
private static string getPathFromArcGISPolygon(ESRI.ArcGIS.Client.Geometry.Polygon polygon1)
{
var provider = new CultureInfo("en");
var path = "";
foreach (var ring in polygon1.Rings)
{
var first = true;
foreach (var pointArcGis in ring)
{
if (first)
{
path += string.Format("M {0},{1}", pointArcGis.X.ToString(provider), pointArcGis.Y.ToString(provider));
first = false;
continue;
}
path += string.Format(" L {0},{1}", pointArcGis.X.ToString(provider), pointArcGis.Y.ToString(provider));
}
path += "z";
}
return path;
} |
Partager