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))); } } }
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); }