本文整理汇总了C#中Polygon.Union方法的典型用法代码示例。如果您正苦于以下问题:C# Polygon.Union方法的具体用法?C# Polygon.Union怎么用?C# Polygon.Union使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Polygon
的用法示例。
在下文中一共展示了Polygon.Union方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: getMultiPointBuffer
private static IGeometry getMultiPointBuffer(MultiPoint multiPoint, double distance, int pointsPerCircle, bool allowParallels)
{
Polygon temp = new Polygon();
List<Polygon> partialBuffers = new List<Polygon>();
ICollection<IGeometry> gc;
int c = 0;
foreach (ICoordinate p in multiPoint.Points)
{
gc = temp.Union(getCoordinateBuffer(p, distance, pointsPerCircle));
if (gc.Count > 0)
temp = (Polygon)((GeometryCollection)gc)[0];
c++;
if (c == 3)
{
partialBuffers.Add(temp);
temp = new Polygon();
c = 0;
}
}
if (temp.CoordinateCount > 0)
partialBuffers.Add(temp);
return mergePartialBuffers(partialBuffers, allowParallels);
}
示例2: getPolylineBuffer
private static Polygon getPolylineBuffer(Polyline polyline, double distance, int pointsPerCircle, bool allowParallels)
{
polyline = (Polyline)polyline.Clone();
polyline.Weed(distance - distance * Math.Cos(Math.PI / pointsPerCircle));
Polygon temp = new Polygon();
List<Polygon> partialBuffers = new List<Polygon>();
ICollection<IGeometry> gc;
int c = 0;
foreach (LinePath path in polyline.Paths)
{
for (int i = 0; i < path.Vertices.Count - 1; i++)
{
Segment s = new Segment(path.Vertices[i], path.Vertices[i + 1]);
gc = temp.Union(getSegmentPreBuffer(s, Math.Abs(distance), pointsPerCircle, i == 0));
if (gc.Count > 0)
temp = (Polygon)((GeometryCollection)gc)[0];
c++;
if (c == 3)
{
partialBuffers.Add(temp);
temp = new Polygon();
c = 0;
}
}
}
if (temp.CoordinateCount > 0)
partialBuffers.Add(temp);
return mergePartialBuffers(partialBuffers, allowParallels);
}
示例3: getPolygonBuffer
private static Polygon getPolygonBuffer(Polygon polygon, double distance, int pointsPerCircle, bool allowParallels)
{
polygon = (Polygon)polygon.Clone();
polygon.Weed(distance - distance * Math.Cos(Math.PI / pointsPerCircle));
polygon.Simplify();
Polygon boundaryBuffer = getBoundsBuffer(polygon, distance, pointsPerCircle, allowParallels);
ICollection<IGeometry> result;
if (distance > 0)
result = polygon.Union(boundaryBuffer);
else
result = polygon.Difference(boundaryBuffer);
foreach (IGeometry g in result)
if (g is Polygon)
return (Polygon)g;
return new Polygon();
}
示例4: getBoundsBuffer
private static Polygon getBoundsBuffer(Polygon polygon, double distance, int pointsPerCircle, bool allowParallels)
{
Polygon temp = new Polygon();
List<Polygon> partialBuffers = new List<Polygon>();
ICollection<IGeometry> gc;
int c = 0;
foreach (Contour contour in polygon.Contours)
{
for (int i = 0; i < contour.Vertices.Count; i++)
{
int j = i == contour.Vertices.Count - 1 ? 0 : i + 1;
Segment s = new Segment(contour.Vertices[i], contour.Vertices[j]);
gc = temp.Union(getSegmentPreBuffer(s, Math.Abs(distance), pointsPerCircle, false));
if (gc.Count > 0)
temp = (Polygon)((GeometryCollection)gc)[0];
c++;
if (c == 3)
{
partialBuffers.Add(temp);
temp = new Polygon();
c = 0;
}
}
}
if (temp.CoordinateCount > 0)
partialBuffers.Add(temp);
return mergePartialBuffers(partialBuffers, allowParallels);
}
示例5: getPolylineBuffer
private static GeoPolygon getPolylineBuffer(GeoPolyline geoPolyline, double angleDistance, int pointsPerCircle, bool allowParallels)
{
geoPolyline = (GeoPolyline)geoPolyline.Clone();
double minAngle = Math.Sin(Math.Abs(angleDistance)) * Math.Sin(Math.PI / pointsPerCircle);
geoPolyline.ReduceSegments(minAngle);
geoPolyline.Densify(minAngle);
GnomonicProjection projection;
IGeometry geometry;
projectGeography(geoPolyline, out projection, out geometry);
Polyline planePolyline = (Polyline)geometry;
GeographyCollection geographyCollection = new GeographyCollection();
Polygon temp = new Polygon();
List<Polygon> partialBuffers = new List<Polygon>();
ICollection<IGeometry> unionResult = null;
int c = 0;
foreach (GeoPath path in geoPolyline.Paths)
{
for (int i = 0; i < path.Vertices.Count - 1; i++)
{
GeoPoint p = path.Vertices[i];
GeoPolygon tempPolygon = getPointBuffer(p, angleDistance, pointsPerCircle);
geographyCollection.Clear();
geographyCollection.Add(tempPolygon);
GeometryCollection gc = GeometrySpreader.GetGeometries(geographyCollection, projection);
if (gc[0] is Polygon)
unionResult = temp.Union((Polygon)gc[0]);
if (unionResult.Count > 0)
temp = (Polygon)((GeometryCollection)unionResult)[0];
c++;
if (c == 3)
{
partialBuffers.Add(temp);
temp = new Polygon();
c = 0;
}
}
}
if (temp.CoordinateCount > 0)
partialBuffers.Add(temp);
Polygon planeBuffer = mergePartialBuffers(partialBuffers, allowParallels);
GeometryCollection geometryCollection = new GeometryCollection();
geometryCollection.Add(planeBuffer);
geographyCollection = GeometrySpreader.GetGeographies(geometryCollection, projection);
foreach (IGeography g in geographyCollection)
if (g is GeoPolygon)
return (GeoPolygon)g;
return new GeoPolygon();
}
示例6: getBoundsBuffer
private static Polygon getBoundsBuffer(GeoPolygon polygon, GnomonicProjection projection, double distance, int pointsPerCircle, bool allowParallels)
{
Polygon temp = new Polygon();
List<Polygon> partialBuffers = new List<Polygon>();
GeographyCollection geographyCollection = new GeographyCollection();
ICollection<IGeometry> unionResult = null;
int c = 0;
foreach (GeoContour contour in polygon.Contours)
{
for (int i = 0; i < contour.Vertices.Count; i++)
{
GeoPoint p = contour.Vertices[i];
GeoPolygon tempPolygon = getPointBuffer(p, Math.Abs(distance), pointsPerCircle);
geographyCollection.Clear();
geographyCollection.Add(tempPolygon);
GeometryCollection gc = GeometrySpreader.GetGeometries(geographyCollection, projection);
if(gc[0] is Polygon)
unionResult = temp.Union((Polygon)gc[0]);
if (unionResult.Count > 0)
temp = (Polygon)((GeometryCollection)unionResult)[0];
c++;
if (c == 3)
{
partialBuffers.Add(temp);
temp = new Polygon();
c = 0;
}
}
}
if (temp.CoordinateCount > 0)
partialBuffers.Add(temp);
return mergePartialBuffers(partialBuffers, allowParallels);
}