private void AddShapeLayer(List <IGeoInfo> shapeList, Layer layer)
        {
            foreach (ShapeGeoInfo shape in shapeList)
            {
                if (shape.Polygons.Values.Count == 0)
                {
                    continue;
                }

                PolygonBuilder builder = new PolygonBuilder(SpatialReferences.Wgs84);
                shape.Polygons.Values.ToList().ForEach(p => builder.AddParts(p.Parts));
                Polygon polygon = builder.ToGeometry();

                Dictionary <string, object> attr = new Dictionary <string, object>(shape.AttrList);
                attr[KEY_CODE] = shape.KeyCode;
                layer.GraphicsLayer.Graphics.Add(new Graphic(polygon, attr, MapShapeLayer.GetSymbol(GeoMarkerType.Fill, GeoStatus.Normal)));
                _shapeList.Add(polygon.Extent);

                layer.GraphicsLayer.Graphics.Add(new Graphic(polygon.Extent.GetCenter(), attr, MapShapeLayer.GetSymbol(GeoMarkerType.Point, GeoStatus.Normal)));
            }
        }
 void HilightItem(Graphic graphic, Layer layer)
 {
     if (layer.Info is MapPointLayer)
     {
         graphic.Symbol = MapPointLayer.GetSymbol(GeoStatus.Hilight);
     }
     else if (layer.Info is MapShapeLayer)
     {
         var code = graphic.Attributes[KEY_CODE];
         var list = layer.GraphicsLayer.Graphics.Where(x => x.Attributes[KEY_CODE].ToString() == code.ToString());
         list.ToList().ForEach(g =>
         {
             if (g.Geometry is MapPoint)
             {
                 g.Symbol = MapShapeLayer.GetSymbol(GeoMarkerType.Point, GeoStatus.Hilight);
             }
             else
             {
                 g.Symbol = MapShapeLayer.GetSymbol(GeoMarkerType.Fill, GeoStatus.Hilight);
             }
         });
     }
     else if (layer.Info is MapLineLayer)
     {
         graphic.Symbol = MapLineLayer.GetSymbol(GeoMarkerType.Line, GeoStatus.Hilight);
     }
     else if (layer.Info is MapEventLayer)
     {
         if (layer.Info.ConvertTo <MapEventLayer>().MarkerType == EventMarkerType.Proportional)
         {
             (graphic.Symbol as SimpleMarkerSymbol).Color = DefaultSettings.GetColor(GeoStatus.Hilight);
         }
         else
         {
             graphic.Symbol = layer.Info.ConvertTo <MapEventLayer>().GetSymbol(GeoStatus.Hilight);
         }
     }
 }
 void SetAllNormal(Layer layer)
 {
     if (layer.Info is MapPointLayer)
     {
         layer.GraphicsLayer.Graphics.ToList().ForEach(g => g.Symbol = MapPointLayer.GetSymbol(GeoStatus.Normal));
     }
     else if (layer.Info is MapShapeLayer)
     {
         layer.GraphicsLayer.Graphics.ToList().ForEach(g =>
         {
             if (g.Geometry is MapPoint)
             {
                 g.Symbol = MapShapeLayer.GetSymbol(GeoMarkerType.Point, GeoStatus.Normal);
             }
             else
             {
                 g.Symbol = MapShapeLayer.GetSymbol(GeoMarkerType.Fill, GeoStatus.Normal);
             }
         });
     }
     else if (layer.Info is MapLineLayer)
     {
         layer.GraphicsLayer.Graphics.ToList().ForEach(g => g.Symbol = MapLineLayer.GetSymbol(GeoMarkerType.Line, GeoStatus.Normal));
     }
     else if (layer.Info is MapEventLayer)
     {
         if ((layer.Info.ConvertTo <MapEventLayer>()).MarkerType == EventMarkerType.Proportional)
         {
             layer.GraphicsLayer.Graphics.ToList().ForEach(g => (g.Symbol as SimpleMarkerSymbol).Color = DefaultSettings.GetColor(GeoStatus.Normal));
         }
         else
         {
             layer.GraphicsLayer.Graphics.ToList().ForEach(g => g.Symbol = (layer.Info.ConvertTo <MapEventLayer>().GetSymbol(GeoStatus.Normal)));
         }
     }
 }
Exemple #4
0
        static private List <IGeoInfo> GetShapeList(HMCon hmConn, List <DataRow> rowList, MapShapeLayer layer, string linkCodeList)
        {
            List <IGeoInfo> shapeList = CreateList <ShapeGeoInfo>(layer, rowList);

            string sql       = $"select * from Geo_Link where LinkTableName='{layer.LinkTable}' and Feature='{layer.LayerName}' and LinkCode in ({linkCodeList})";
            var    linkTable = hmConn.SQLExecutor.ExecuteDataAdapter(sql, hmConn.TRConnection);

            string shapeIdList = "";

            linkTable.Select().ToList().ForEach(row => shapeIdList += $",{row["LinkId"]}");
            if (string.IsNullOrEmpty(shapeIdList))
            {
                return(shapeList);
            }

            shapeIdList = shapeIdList.Remove(0, 1);
            sql         = $"select * from Geo_Shape where ShapeId in ({shapeIdList})";
            var geoTable = hmConn.SQLExecutor.ExecuteDataAdapter(sql, hmConn.TRConnection);

            foreach (var row in rowList)
            {
                ShapeGeoInfo shape = shapeList.Find(x => x.KeyCode == $"{row[layer.LinkColumn]}").ConvertTo <ShapeGeoInfo>();

                var linkRow = linkTable.Select($"LinkCode='{row[layer.LinkColumn]}'");
                if (linkRow.Length > 0)
                {
                    shape.ShapeId = (int)linkRow[0]["LinkId"];
                    var groups = geoTable.Select($"ShapeId={shape.ShapeId}").GroupBy(x => x["PolygonId"]);
                    foreach (var group in groups)
                    {
                        List <MapPoint> pointList = new List <MapPoint>();
                        group.ToList().ForEach(geo => pointList.Add(new MapPoint(double.Parse(geo["Longitude"].ToString()), double.Parse(geo["Latitude"].ToString()))));
                        Polygon polygon = new Polygon(pointList, SpatialReferences.Wgs84);
                        shape.Polygons.Add(int.Parse($"{group.Key}"), polygon);
                    }
                }
            }

            return(shapeList);
        }