private void BtchangeEsymbol_Click(object sender, EventArgs e) { int symbolsize = Convert.ToInt32(tbsymbolsize.Text); int cls = Convert.ToInt32(tbclass.Text); Color symbolcolor = btsymbolfillcolor.BackColor; List <int> sizes = layer.getSymbolSize(cbattributeEsymbol.SelectedIndex, symbolsize, cls); //新建一个esymbollayer,在点密度中的点将以一个点图层的形式显示出来 GISLayer esymbollayer = new GISLayer("Esymbol", SHAPETYPE.point, layer.Extent); esymbollayer.Selectable = false; //设置为不可选择 esymbollayer.ThematicType = THEMATICTYPE.EqualSymbol; //设置为等比变换型专题地图 //为esymbollayer中每一个对象设置一个thematic for (int i = 0; i < layer.Features.Count; i++) { esymbollayer.Thematics.Add(i, new GISThematic(Color.Black, sizes[i], symbolcolor)); Console.WriteLine(sizes[i]); } //创建symbols点对象,作为esymbollayer的features //默认将符号放于polygon的重心位置 List <GISFeature> symbols = new List <GISFeature>(); for (int i = 0; i < layer.Features.Count; i++) { GISPolygon polygon = (GISPolygon)layer.Features[i].spatialpart; GISVertex vertex = new GISVertex(polygon.centroid); symbols.Add(new GISFeature(new GISPoint(vertex), null)); } esymbollayer.Features = symbols; //先移除之前已有的点密度图层 for (int i = Document.layers.Count - 1; i > 0; i--) { if (Document.layers[i].Name == "Esymbol") { Document.layers.RemoveAt(i); } } Document.layers.Add(esymbollayer);//将esymbollayer添加到document中 在更新地图绘制时会自动绘制layers里面的所有图层 //更新地图绘制 if (sender.Equals(previewes)) { PreviewWindow.UpdateMap(); } else if (sender.Equals(btchangeEsymbol)) { Mapwindow.UpdateMap(); } }
//输出图层所有GISFeatrue static void WriteFeatures(GISLayer layer, BinaryWriter bw) { for (int featureindex = 0; featureindex < layer.FeatureCount(); featureindex++) { GISFeature feature = layer.GetFeature(featureindex); if (layer.ShapeType == SHAPETYPE.point) { ((GISPoint)feature.spatialpart).centroid.WriteVertex(bw); } else if (layer.ShapeType == SHAPETYPE.line) { GISLine line = (GISLine)(feature.spatialpart); WriteMultipleVertexes(line.Vertexes, bw); } else if (layer.ShapeType == SHAPETYPE.polygon) { GISPolygon polygon = (GISPolygon)(feature.spatialpart); WriteMultipleVertexes(polygon.Vertexes, bw); } WriteAttributes(feature.attributepart, bw); } }