コード例 #1
0
ファイル: LayerWms.cs プロジェクト: sridhar19091986/sharpmapx
        protected virtual void wmsService_OnGetFeatureInfoCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            GisShapeCollection features = new GisShapeCollection();

            try
            {
                if (e.Result == "") return;

                Extent extent;
                features = GmlReader.GetShapes(e.Result, out extent);
            }
            finally
            {
                RaiseGetFeatureInfoCompleted(features);
            }
        }
コード例 #2
0
ファイル: LayerWms.cs プロジェクト: sridhar19091986/sharpmapx
 protected void RaiseGetFeatureInfoCompleted(GisShapeCollection features)
 {
     if (OnGetFeatureInfoCompleted != null)
         OnGetFeatureInfoCompleted(this, new FeaturesEventArgs(features));
 }
コード例 #3
0
 /// <summary>
 /// Creates a new instance of the <see cref="SelectionsEventArgs"/>
 /// </summary>
 /// <param name="features">List of entities.</param>
 public FeaturesEventArgs(GisShapeCollection features)
 {
     _features = features;
 }
コード例 #4
0
        /// <summary>
        /// Returns a list of shapes contained in the passed GML string
        /// </summary>
        /// <param name="gml">GML string</param>
        /// <param name="layer">Layer where to load features</param>
        /// <param name="extent">extent of the shapes</param>
        /// <returns>List of shapes</returns>
        public static GisShapeCollection GetShapes(string gml, LayerVector layer, out Extent extent)
        {
            var res = new GisShapeCollection();
            res.Name = layer.Name;

            var slayer = new List<string>();

            foreach (LayerField t in layer.Fields)
            {
                slayer.Add(t.Name);
            }

            var provider = new SharpMap.GmlUtils.GmlProvider(gml, slayer);

            if (provider.Shapes == null)
            {
                extent = new Extent(provider.Extent.MinX,provider.Extent.MinY,provider.Extent.MaxX,provider.Extent.MaxY);
                return res;
            }

            for (int i = 0; i < provider.Shapes.Count; i++)
            {
                var shpOrig = provider.Shapes[i];
                GisShapeBase shpDest = layer.CreateShape();

                if (shpDest is GisShapePoint)
                {
                    (shpDest as GisShapePoint).Point.X = (shpOrig.Geometry as Point).X;
                    (shpDest as GisShapePoint).Point.Y = (shpOrig.Geometry as Point).Y;
                }
                else if (shpDest is GisShapeArc)
                {
                    for (int j=0; j<(shpOrig.Geometry as LineString).Coordinates.Length; j++)
                    {
                        var p = new GisPoint();
                        p.X = (shpOrig.Geometry as LineString).Coordinates[j].X;
                        p.Y = (shpOrig.Geometry as LineString).Coordinates[j].Y;
                        (shpDest as GisShapeArc).Points.Add(p);
                    }
                }
                else if (shpDest is GisShapeMultiPoint)
                {
                    for (int j = 0; j < (shpOrig.Geometry as MultiPoint).Geometries.Length; j++)
                    {
                        var p = new GisPoint();
                        p.X = ((shpOrig.Geometry as MultiPoint).Geometries[j] as IPoint).X;
                        p.Y = ((shpOrig.Geometry as MultiPoint).Geometries[j] as IPoint).Y;
                        (shpDest as GisShapeMultiPoint).Points.Add(p);
                    }
                }
                else if (shpDest is GisShapePolygon)
                {
                    for (int j = 0; j < (shpOrig.Geometry as Polygon).ExteriorRing.Coordinates.Length; j++)
                    {
                        var p = new GisPoint();
                        p.X = (shpOrig.Geometry as Polygon).ExteriorRing.Coordinates[j].X;
                        p.Y = (shpOrig.Geometry as Polygon).ExteriorRing.Coordinates[j].Y;
                        (shpDest as GisShapePolygon).Points.Add(p);
                    }
                }

                shpDest.UID = shpOrig.UID;
                shpDest.IsSelected = shpOrig.IsSelected;

                IEnumerable<string> keys = shpOrig.Keys;
                foreach(string key in keys)
                {
                    shpDest[key] = shpOrig[key];
                }

                if (shpDest != null)
                    res.Add(shpDest);
            }

            if (provider.Extent != null)
                extent = new Extent(provider.Extent.MinX, provider.Extent.MinY, provider.Extent.MaxX, provider.Extent.MaxY);
            else
                extent = new Extent();

            return res;
        }
コード例 #5
0
        /// <summary>
        /// Returns a list of features contained in the passed GML string
        /// </summary>
        /// <param name="gml">GML string</param>
        /// <param name="extent">extent of the shapes</param>
        /// <returns>List of features</returns>
        /// <remarks>Because the layer is not passed, all fields are treated as strings</remarks>
        public static GisShapeCollection GetShapes(string gml, out Extent extent)
        {
            var res = new GisShapeCollection();
            res.Name = "";

            var provider = new SharpMap.GmlUtils.GmlProvider(gml);

            if (provider.Shapes == null)
            {
                extent = new Extent(provider.Extent.MinX, provider.Extent.MinY, provider.Extent.MaxX, provider.Extent.MaxY);
                return res;
            }

            for (int i = 0; i < provider.Shapes.Count; i++)
            {
                var shpOrig = provider.Shapes[i];
                GisShapeBase shpDest = null;

                if (shpOrig.Geometry is IPoint)
                {
                    shpDest = CreateShape(GisShapeType.GisShapeTypePoint);
                    (shpDest as GisShapePoint).Point.X = (shpOrig.Geometry as Point).X;
                    (shpDest as GisShapePoint).Point.Y = (shpOrig.Geometry as Point).Y;
                }
                else if (shpOrig.Geometry is ILineString)
                {
                    shpDest = CreateShape(GisShapeType.GisShapeTypeArc);
                    for (int j = 0; j < (shpOrig.Geometry as LineString).Coordinates.Length; j++)
                    {
                        var p = new GisPoint();
                        p.X = (shpOrig.Geometry as LineString).Coordinates[j].X;
                        p.Y = (shpOrig.Geometry as LineString).Coordinates[j].Y;
                        (shpDest as GisShapeArc).Points.Add(p);
                    }
                }
                else if (shpOrig.Geometry is IMultiPoint)
                {
                    shpDest = CreateShape(GisShapeType.GisShapeTypeMultiPoint);
                    for (int j = 0; j < (shpOrig.Geometry as MultiPoint).Geometries.Length; j++)
                    {
                        var p = new GisPoint();
                        p.X = ((shpOrig.Geometry as MultiPoint).Geometries[j] as IPoint).X;
                        p.Y = ((shpOrig.Geometry as MultiPoint).Geometries[j] as IPoint).Y;
                        (shpDest as GisShapeMultiPoint).Points.Add(p);
                    }
                }
                else if (shpOrig.Geometry is IPolygon)
                {
                    shpDest = CreateShape(GisShapeType.GisShapeTypePolygon);
                    for (int j = 0; j < (shpOrig.Geometry as Polygon).ExteriorRing.Coordinates.Length; j++)
                    {
                        var p = new GisPoint();
                        p.X = (shpOrig.Geometry as Polygon).ExteriorRing.Coordinates[j].X;
                        p.Y = (shpOrig.Geometry as Polygon).ExteriorRing.Coordinates[j].Y;
                        (shpDest as GisShapePolygon).Points.Add(p);
                    }
                }

                shpDest.UID = shpOrig.UID;
                shpDest.IsSelected = shpOrig.IsSelected;

                var keys = shpOrig.Keys;
                shpDest.PopulateTypes(keys);

                foreach (string key in keys)
                {
                    shpDest[key] = shpOrig[key];
                }

                if (shpDest != null)
                    res.Add(shpDest);
            }

            if (provider.Extent != null)
                extent = new Extent(provider.Extent.MinX, provider.Extent.MinY, provider.Extent.MaxX, provider.Extent.MaxY);
            else
                extent = new Extent();

            return res;
        }
コード例 #6
0
        void GetFeaturesCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            GisShapeCollection features = new GisShapeCollection();

            try
            {
                XDocument doc;
                var settings = new XmlReaderSettings();
                settings.DtdProcessing = DtdProcessing.Ignore;

                using (XmlReader reader = XmlReader.Create(new StringReader(e.Result), settings))
                {
                    doc = XDocument.Load(reader);
                }

                var docRoot = doc.Element("rss");
                if (docRoot == null) return;

                var xchannel = docRoot.Element("channel");
                if (xchannel == null) return;

                Title = xchannel.Element("title") != null ? xchannel.Element("title").Value : "";
                Link = xchannel.Element("link") != null ? xchannel.Element("link").Value : "";
                Description = xchannel.Element("description") != null ? xchannel.Element("description").Value : "";
                Author = xchannel.Element("author") != null ? xchannel.Element("author").Value : "";
                Updated = xchannel.Element("updated") != null ? Parser.StringAsDateTime(xchannel.Element("updated").Value) : DateTime.MinValue;

                var ximage = xchannel.Element("image");
                if (ximage != null)
                {
                    ImageUrl = ximage.Element("url") != null ? ximage.Element("url").Value : "";
                    ImageLink = ximage.Element("link") != null ? ximage.Element("link").Value : "";
                    ImageTitle = ximage.Element("title") != null ? ximage.Element("title").Value : "";
                    ImageHeight = ximage.Element("height") != null ? Parser.StringAsInteger(ximage.Element("height").Value, 0) : 0;
                    ImageWidth = ximage.Element("width") != null ? Parser.StringAsInteger(ximage.Element("width").Value, 0) : 0;
                }

                var xitems = xchannel.Descendants("item");
                if (xitems == null) return;

                foreach (XElement xitem in xitems)
                {
                    GisShapePoint p = new GisShapePoint(null);
                    var keys = new Collection<string>();
                    keys.Add("magnitudo");
                    keys.Add("date");
                    keys.Add("link");
                    keys.Add("depth");
                    keys.Add("title");
                    keys.Add("description");
                    p.PopulateTypes(keys);

                    string title = xitem.Element("title") != null ? xitem.Element("title").Value : "";
                    p["title"] = title;

                    string link = xitem.Element("link") != null ? xitem.Element("link").Value : "";
                    p["link"] = link;

                    string description = xitem.Element("description") != null ? xitem.Element("description").Value : "";
                    p["description"] = description;

                    /*Esempio description: <a href='http://cnt.rm.ingv.it/data_id/7232002670/event.html'><img width='225' height='225' border='0' src='http://cnt.rm.ingv.it/data_id/7232002670/map_loc_t.jpg' alt='epicentro evento' align='left'  /></a><p style='color: #333333;font: 14;line-height: 28'>&nbsp;ID:&nbsp;7232002670<br />&nbsp;Data:&nbsp;10/02/2014 07.07.40<br />&nbsp;Magnitudo:&nbsp;2.0<br />&nbsp;Distretto:&nbsp;France<br />&nbsp;Lat:&nbsp;45.336 - &nbsp;Lon:&nbsp;6.543<br />&nbsp;Profondit&agrave;:&nbsp;10.0 km</p> */

                    if ((description.Contains("Lon:&nbsp;")) && (description.Contains("Lat:&nbsp;")))
                    {
                        int indexId0 = description.IndexOf(@"http://cnt.rm.ingv.it/data_id/");
                        int indexId1 = description.IndexOf(@"/event", indexId0);
                        String sid = description.Substring(indexId0 + 30, indexId1 - indexId0 - 30);
                        Int64 id;
                        Int64.TryParse(sid, out id);
                        p.UID = id;

                        int indexLon0 = description.IndexOf("Lon:&nbsp;");
                        int indexLon1 = description.IndexOf("<br", indexLon0);
                        String sLon = description.Substring(indexLon0 + 10, indexLon1-indexLon0 - 10);

                        int indexLat0 = description.IndexOf("Lat:&nbsp;");
                        int indexLat1 = description.IndexOf(" -", indexLat0);
                        String sLat = description.Substring(indexLat0 + 10, indexLat1-indexLat0-10);

                        p.Point.Y = Parser.StringAsDouble(sLat, -1);
                        p.Point.X = Parser.StringAsDouble(sLon, -1);

                        int indexMagnitudo0 = description.IndexOf("Magnitudo:&nbsp;");
                        int indexMagnitudo1 = description.IndexOf("<br", indexMagnitudo0);
                        String magnitudo = description.Substring(indexMagnitudo0 + 16, indexMagnitudo1-indexMagnitudo0-16);
                        p["magnitudo"] = magnitudo;

                        int indexData0 = description.IndexOf("Data:&nbsp;");
                        int indexData1 = description.IndexOf("<br", indexData0);
                        String date = description.Substring(indexData0 + 11, indexData1 -indexData0 -11);
                        p["date"] = date;
                    }

                    features.Add(p);
                }
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                BusyState = false;
                if (OnGetFeaturesCompleted != null)
                    OnGetFeaturesCompleted(sender, new FeaturesEventArgs(features));
            }
        }
コード例 #7
0
 protected LayerVector()
 {
     Fields = new LayerFields();
     Items = new GisShapeCollection();
 }