Пример #1
0
        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();
            }
        }
Пример #2
0
 //输出图层所有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);
     }
 }