Пример #1
0
        /// <summary>
        /// 移除图层
        /// </summary>
        /// <param name="layer">图层</param>
        public void RemoveLayer(Layer layer)
        {
            int index = _Layers.IndexOf(layer);

            _Layers.Remove(layer);
            _DataSet.Tables.Remove(layer.Records);
            _TreeNode.Nodes.Remove(layer.Node);

            LayerRemoved?.Invoke(this, layer);
            MapPerformaceChanged?.Invoke(this);//重绘一级地图
        }
Пример #2
0
        /// <summary>
        /// 改变图层顺序
        /// </summary>
        /// <param name="layer">图层</param>
        /// <param name="index">新位置索引</param>
        public void ChangeLayerSequence(Layer layer, int index)
        {
            int mOldIndex = _Layers.IndexOf(layer);

            if (mOldIndex == index)
            {
                return;
            }
            else if (mOldIndex > index)
            {
                _Layers.Remove(layer);
                _Layers.Insert(index, layer);
            }
            else
            {
                _Layers.Insert(index, layer);
                _Layers.Remove(layer);
            }

            LayerSequenceChanged?.Invoke(this, layer);
            MapPerformaceChanged?.Invoke(this);//重绘一级地图
        }
Пример #3
0
        //投影信息改变了
        private void _PrjSystem_ProjectedSystemChanged(object sender)
        {
            foreach (Layer sLayer in _Layers)
            {
                //计算投影
                bool sRead = sLayer.ReadOnly;
                sLayer.ReadOnly = false;
                if (sLayer.GeoType == typeof(PointD))
                {
                    PointD sPoint;
                    foreach (DataRow mRow in sLayer.Records.Rows)
                    {
                        sPoint = mRow.Field <PointD>(1);
                        if (sPoint != null)
                        {
                            mRow[2] = _PrjSystem.ToProjCo(sPoint);
                        }
                    }
                }
                else if (sLayer.GeoType == typeof(MultiPolyLine))
                {
                    MultiPolyLine sMultiPolyLine;
                    foreach (DataRow mRow in sLayer.Records.Rows)
                    {
                        sMultiPolyLine = mRow.Field <MultiPolyLine>(1);
                        if (sMultiPolyLine != null)
                        {
                            mRow[2] = _PrjSystem.ToProjCo(sMultiPolyLine);
                        }
                    }
                }
                else if (sLayer.GeoType == typeof(MultiPolygon))
                {
                    MultiPolygon sMultiPolygon;
                    foreach (DataRow mRow in sLayer.Records.Rows)
                    {
                        sMultiPolygon = mRow.Field <MultiPolygon>(1);
                        if (sMultiPolygon != null)
                        {
                            mRow[2] = _PrjSystem.ToProjCo(sMultiPolygon);
                        }
                    }
                }

                Geometry sGeo;
                foreach (DataRow mRow in sLayer.Records.Rows)
                {
                    if (!Convert.IsDBNull(mRow[2]))
                    {
                        sGeo    = (Geometry)mRow[2];
                        mRow[3] = LayerTools.GetCenterPoint(sGeo);
                    }
                }

                sLayer.MBR    = LayerTools.GetLayerGeoMBR(sLayer);
                sLayer.PRJMBR = _PrjSystem.ToProjCo(sLayer.MBR);
                sLayer.Records.AcceptChanges();     //保存更改
                sLayer.GenerateIndex();             //计算地理索引
                MapPerformaceChanged?.Invoke(this); //重绘一级地图
                sLayer.ReadOnly = sRead;
            }
        }
Пример #4
0
 private void Layer_SymbolChanged(object sender)
 {
     MapPerformaceChanged?.Invoke(this);//重绘一级地图
     LayerSymbolChanged?.Invoke(sender);
 }
Пример #5
0
 private void Layer_VisiblityChanged(object sender, bool visible)
 {
     //LayerVisiblityChanged(this, (Layer)sender);//图层可见性改变,通知其它控件
     MapPerformaceChanged?.Invoke(this);//重绘一级地图
 }
Пример #6
0
        /// <summary>
        /// 添加图层
        /// </summary>
        /// <param name="layer">图层</param>
        public void AddLayer(Layer layer)
        {
            //计算投影
            if (layer.GeoType == typeof(PointD))
            {
                PointD sPoint;
                foreach (DataRow mRow in layer.Records.Rows)
                {
                    sPoint = mRow.Field <PointD>(1);
                    if (sPoint != null)
                    {
                        mRow[2] = _PrjSystem.ToProjCo(sPoint);
                    }
                }
            }
            else if (layer.GeoType == typeof(MultiPolyLine))
            {
                MultiPolyLine sMultiPolyLine;
                foreach (DataRow mRow in layer.Records.Rows)
                {
                    sMultiPolyLine = mRow.Field <MultiPolyLine>(1);
                    if (sMultiPolyLine != null)
                    {
                        mRow[2] = _PrjSystem.ToProjCo(sMultiPolyLine);
                    }
                }
            }
            else if (layer.GeoType == typeof(MultiPolygon))
            {
                MultiPolygon sMultiPolygon;
                foreach (DataRow mRow in layer.Records.Rows)
                {
                    sMultiPolygon = mRow.Field <MultiPolygon>(1);
                    if (sMultiPolygon != null)
                    {
                        mRow[2] = _PrjSystem.ToProjCo(sMultiPolygon);
                    }
                }
            }

            Geometry sGeo;

            foreach (DataRow mRow in layer.Records.Rows)
            {
                if (!Convert.IsDBNull(mRow[2]))
                {
                    sGeo    = (Geometry)mRow[2];
                    mRow[3] = LayerTools.GetCenterPoint(sGeo);
                }
            }
            if (layer.MBR == null)
            {
                layer.MBR = LayerTools.GetLayerGeoMBR(layer);
            }

            layer.PRJMBR = _PrjSystem.ToProjCo(layer.MBR);
            layer.Records.AcceptChanges(); //保存更改
            layer.GenerateIndex();         //计算地理索引

            //将地图数据锁住,不允许修改
            layer.ReadOnly = true;


            layer.VisiblityChanged += Layer_VisiblityChanged;
            layer.SymbolChanged    += Layer_SymbolChanged;
            layer.RecordsChanged   += Layer_RecordsChanged;

            _Layers.Insert(0, layer);
            if (_DataSet.Tables.Contains(layer.Name))
            {
                layer.Name += "_";
            }
            _DataSet.Tables.Add(layer.Records);
            _TreeNode.Nodes.Insert(0, layer.Node);

            LayerAdded?.Invoke(this, layer);    //通知外部已经添加了图层
            MapPerformaceChanged?.Invoke(this); //重绘一级地图
        }