Пример #1
0
        /// <summary>
        /// Returns the Serializable GML SF0 Curve Object for the Given LineString
        /// </summary>
        /// <param name="geomertyType"></param>
        /// <returns></returns>
        private static GeospatialServices.Ogc.Wms.GmlSf.Curve GetGmlSfCurve(SqlGeometry geometry)
        {
            GeospatialServices.Ogc.Wms.GmlSf.Curve gmlCurve = new GeospatialServices.Ogc.Wms.GmlSf.Curve();
            gmlCurve.srsName = geometry.STSrid.ToString();
            LineStringSegment lineStringSegment = new LineStringSegment();

            gmlCurve.segments.Add(lineStringSegment);
            lineStringSegment.Interpolation = CurveInterpolationType.linear;
            StringBuilder sb    = new StringBuilder();
            bool          first = true;

            for (int i = 1; i <= geometry.STNumPoints(); i++)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    sb.Append(" ");
                }

                sb.Append(geometry.STPointN(i).STX.ToString());
                sb.Append(" ");
                sb.Append(geometry.STPointN(i).STY.ToString());
            }
            lineStringSegment.PosList.Value = sb.ToString();
            return(gmlCurve);
        }
Пример #2
0
        /// <summary>
        /// Returns the Serializable GML SF0 Multi Curve Object for the Given MultiCurve
        /// </summary>
        /// <param name="geomertyType"></param>
        /// <returns></returns>
        private static GeospatialServices.Ogc.Wms.GmlSf.MultiCurve GetGmlSfMultiCurve(SqlGeometry geometry)
        {
            GeospatialServices.Ogc.Wms.GmlSf.MultiCurve gmlMultiCurve = new GeospatialServices.Ogc.Wms.GmlSf.MultiCurve();
            GeospatialServices.Ogc.Wms.GmlSf.Curve      gmlCurve      = null;

            for (int i = 1; i <= geometry.STNumGeometries(); i++)
            {
                SqlGeometry smLineString = geometry.STGeometryN(i);
                gmlCurve = GetGmlSfCurve(smLineString);
                gmlMultiCurve.CurveMemberList.Add(new CurveProperty(gmlCurve));
            }
            return(gmlMultiCurve);
        }
Пример #3
0
        public static AbstractGML GetFromSqlGeometry(SqlGeometry geometry)
        {
            AbstractGML gmlGeometry = null;
            string      geomType    = (string)geometry.STGeometryType();

            switch (geomType)
            {
            case "Point":
            {
                GeospatialServices.Ogc.Wms.GmlSf.Point gmlPoint = GetGmlSfPoint(geometry);
                gmlGeometry = gmlPoint;
            }
            break;

            case "LineString":
            {
                GeospatialServices.Ogc.Wms.GmlSf.Curve gmlCurve = GetGmlSfCurve(geometry);
                gmlGeometry = gmlCurve;
            }
            break;

            case "Polygon":
            {
                GeospatialServices.Ogc.Wms.GmlSf.Surface gmlSurface = GetGmlSfSurface(geometry);
                gmlGeometry = gmlSurface;
            }
            break;

            case "MultiPoint":
            {
                GeospatialServices.Ogc.Wms.GmlSf.MultiPoint gmlMultiPoint = GetGmlSfMultiPoint(geometry);
                gmlGeometry = gmlMultiPoint;
            }
            break;

            case "MultiLineString":
            {
                GeospatialServices.Ogc.Wms.GmlSf.MultiCurve gmlMultiCurve = GetGmlSfMultiCurve(geometry);
                gmlGeometry = gmlMultiCurve;
            }
            break;

            case "MultiPolygon":
            {
                GeospatialServices.Ogc.Wms.GmlSf.MultiSurface gmlMultiSurface = GetGmlSfMultiSurface(geometry);
                gmlGeometry = gmlMultiSurface;
            }
            break;

            case "GeometryCollection":
            {
                GeospatialServices.Ogc.Wms.GmlSf.MultiGeometry gmlMultiGeometry = new GeospatialServices.Ogc.Wms.GmlSf.MultiGeometry();
                GeospatialServices.Ogc.Wms.GmlSf.MultiSurface  gmlMultiSurface  = null;
                GeospatialServices.Ogc.Wms.GmlSf.MultiPoint    gmlMultiPoint    = null;
                GeospatialServices.Ogc.Wms.GmlSf.MultiCurve    gmlMultiCurve    = null;
                GeospatialServices.Ogc.Wms.GmlSf.Surface       gmlSurface       = null;
                GeospatialServices.Ogc.Wms.GmlSf.Point         gmlPoint         = null;
                GeospatialServices.Ogc.Wms.GmlSf.Curve         gmlCurve         = null;
                GeospatialServices.Ogc.Wms.GmlSf.AbstractGeometricAggregate gmlAbstractGeometricAggregate = null;

                for (int i = 1; i <= geometry.STNumGeometries(); i++)
                {
                    if (geometry.STGeometryN(i).STGeometryType() == "Point")
                    {
                        if (gmlMultiPoint == null)
                        {
                            gmlMultiPoint = new GeospatialServices.Ogc.Wms.GmlSf.MultiPoint();
                            gmlMultiGeometry.MultiGeometryMemberList.Add(new MultiGeometryProperty(gmlMultiPoint));
                        }
                        gmlPoint = GetGmlSfPoint(geometry.STGeometryN(i));
                        gmlMultiPoint.PointMemberList.Add(new PointProperty(gmlPoint));
                    }
                    if (geometry.STGeometryN(i).STGeometryType() == "LineString")
                    {
                        if (gmlMultiCurve == null)
                        {
                            gmlMultiCurve = new GeospatialServices.Ogc.Wms.GmlSf.MultiCurve();
                            gmlMultiGeometry.MultiGeometryMemberList.Add(new MultiGeometryProperty(gmlMultiCurve));
                        }
                        gmlCurve = GetGmlSfCurve(geometry.STGeometryN(i));
                        gmlMultiCurve.CurveMemberList.Add(new CurveProperty(gmlCurve));
                    }
                    else if (geometry.STGeometryN(i).STGeometryType() == "Polygon")
                    {
                        if (gmlMultiSurface == null)
                        {
                            gmlMultiSurface = new GeospatialServices.Ogc.Wms.GmlSf.MultiSurface();
                            gmlMultiGeometry.MultiGeometryMemberList.Add(new MultiGeometryProperty(gmlMultiSurface));
                        }
                        gmlSurface = GetGmlSfSurface(geometry.STGeometryN(i));
                        gmlMultiSurface.SurfaceMemberList.Add(new SurfaceProperty(gmlSurface));
                    }
                    else         // MultiPoint, MultiLineString, Multipolygon, GeometricCollection
                    {
                        gmlAbstractGeometricAggregate = (GeospatialServices.Ogc.Wms.GmlSf.AbstractGeometricAggregate)GetFromSqlGeometry(geometry.STGeometryN(i));
                        gmlMultiGeometry.MultiGeometryMemberList.Add(new MultiGeometryProperty(gmlAbstractGeometricAggregate));
                    }
                }
                gmlGeometry = gmlMultiGeometry;
            }
            break;
            }
            return(gmlGeometry);
        }