Пример #1
0
        private void ComputeLocation(Coordinate p, Geometry geom)
        {
            GeometryType geomType = geom.GeometryType;

            if (geomType == GeometryType.LineString)
            {
                UpdateLocationInfo(Locate(p, (LineString)geom));
            }
            else if (geomType == GeometryType.LinearRing)
            {
                UpdateLocationInfo(Locate(p, (LineString)geom));
            }
            else if (geomType == GeometryType.Polygon)
            {
                UpdateLocationInfo(Locate(p, (Polygon)geom));
            }
            else if (geomType == GeometryType.MultiLineString)
            {
                MultiLineString ml     = (MultiLineString)geom;
                int             nCount = ml.NumGeometries;
                for (int i = 0; i < nCount; i++)
                {
                    LineString l = ml[i];
                    UpdateLocationInfo(Locate(p, l));
                }
            }
            else if (geomType == GeometryType.MultiPolygon)
            {
                MultiPolygon mpoly  = (MultiPolygon)geom;
                int          nCount = mpoly.NumGeometries;
                for (int i = 0; i < nCount; i++)
                {
                    Polygon poly = mpoly[i];
                    UpdateLocationInfo(Locate(p, poly));
                }
            }
            else if (geomType == GeometryType.GeometryCollection)
            {
                IGeometryEnumerator geomi = new GeometryIterator((GeometryCollection)geom);

                while (geomi.MoveNext())
                {
                    Geometry g2 = geomi.Current;
                    if (g2 != geom)
                    {
                        ComputeLocation(p, g2);
                    }
                }
            }
        }
        private static bool ContainsPoint(Coordinate p, Geometry geom)
        {
            GeometryType geomType = geom.GeometryType;

            if (geomType == GeometryType.Polygon)
            {
                return(ContainsPointInPolygon(p, (Polygon)geom));
            }
            else if (geomType == GeometryType.MultiPolygon)
            {
                MultiPolygon mpoly  = (MultiPolygon)geom;
                int          nCount = mpoly.NumGeometries;
                for (int i = 0; i < nCount; i++)
                {
                    Polygon poly = mpoly[i];
                    if (poly != geom)
                    {
                        if (ContainsPoint(p, poly))
                        {
                            return(true);
                        }
                    }
                }
            }
            else
            {
                if (geom.IsCollection)
                {
                    IGeometryEnumerator geomi = new GeometryIterator((GeometryCollection)geom);

                    while (geomi.MoveNext())
                    {
                        Geometry g2 = geomi.Current;
                        if (g2 != geom)
                        {
                            if (ContainsPoint(p, g2))
                            {
                                return(true);
                            }
                        }
                    }
                }
            }

            return(false);
        }