当前位置: 首页>>代码示例>>C#>>正文


C# Polygon.Union方法代码示例

本文整理汇总了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);
        }
开发者ID:gkrsu,项目名称:maparound.core,代码行数:27,代码来源:Buffer.cs

示例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);
        }
开发者ID:gkrsu,项目名称:maparound.core,代码行数:34,代码来源:Buffer.cs

示例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();
        }
开发者ID:gkrsu,项目名称:maparound.core,代码行数:20,代码来源:Buffer.cs

示例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);
        }
开发者ID:gkrsu,项目名称:maparound.core,代码行数:33,代码来源:Buffer.cs

示例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();
        }
开发者ID:gkrsu,项目名称:maparound.core,代码行数:59,代码来源:GeoBuffer.cs

示例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);
        }
开发者ID:gkrsu,项目名称:maparound.core,代码行数:40,代码来源:GeoBuffer.cs


注:本文中的Polygon.Union方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。