C#DotSpatial开发 a Little

最近学习了DotSpatial开源平台,发现可以满足自己的需求。

相比ArcEngion开发不用安装任何插件之类,比较方便,如果自己需求不是很大DotSpatial工作效率很高。

DotSpatial读写速度快,简单明了,在同样可以满足要求的情况下考虑使用DotSpatial就可以。

最近做了一个小小的程序。

程序主界面:

没有使用任何插件,包括dev

 

 

1.   图层加载

引用类:   DotSpatial.Controls

public   virtual   IMapLayer  AddLayer();

使用: Map. AddLayer ();

2.   图层放大

引用类:   DotSpatial.Controls

public   void  ZoomIn();

使用: appManager.Map.FunctionMode =  FunctionMode .ZoomOut ;

3.   图层缩小

引用类:   DotSpatial.Controls

public   void  ZoomOut();

使用: Map. ZoomOut ();

4.   全屏显示

引用类:   DotSpatial.Controls

public   void  ZoomToMaxExtent();

使用: Map. ZoomToMaxExtent ();

5.   前一视图

引用类:   DotSpatial.Controls

public   void  ZoomToPrevious();

使用: Map. ZoomToPrevious ();

6.   后一视图

引用类:   DotSpatial.Controls

public   void  ZoomToNext();

使用: Map. ZoomToNext ();

7.   平移

引用类:   DotSpatial.Controls

public   Function Mode  Function Mode {  get ;  set ; };

使用: Map.Function Mode =  FunctionMode .Pan;

8.   点查询

引用类:   DotSpatial.Controls

public   Function Mode  Function Mode { get ;  set ;};

使用: Map.Function Mode =  FunctionMode .Info;

9.   框选

引用类:   DotSpatial.Controls

DotSpatial.Topology

使用:   Map_ MouseDown

{

GeoMouseArgs  args =  new   GeoMouseArgs (e,  map );  //屏幕坐标到地图坐标转换 

 _startPoint = e.Location; //屏幕起始点坐标

 _geoStartPoint = args.GeographicLocation; //地图起始点坐标

 }

Map_MouseUp

{

GeoMouseArgs  args =  new   GeoMouseArgs (e,  map ); //屏幕坐标到地图坐标转换

IEnvelope  env =  new   Envelope (_geoStartPoint.X, args.GeographicLocation.X,

  _geoStartPoint.Y, args.GeographicLocation.Y); //在地图坐标系中定义二维矩形区域

Map .ViewExtents = env.ToExtent(); //将二维矩形区域作为地图可视区域

}

10.   距离测量

引用类:   DotSpatial.Controls

DotSpatial.Plugins.Measure

使用: MapFunctionMeasure   XXXXX  =  new   MapFunctionMeasure ( map );

XXXXX   . Activate ();

11.   坐标定位

引用类: using  DotSpatial.Controls

使用: ZoomToCoordinatesDialog   xy=  new   ZoomToCoordinatesDialog ( map );

xy.ShowDialog();

12.   鼠标移动显示地图坐标

Map_MouseMove

{

//将地图和坐标函数绑定

 GeoMouseArgs args = new GeoMouseArgs(e,  map );

   //求X、Y轴坐标

 string xpanel = String.Format("X: {0:0.00000}", args.GeographicLocation.X);

 string ypanel = String.Format("Y: {0:0.00000}", args.GeographicLocation.Y);

 this.CoordateLabel.Text = xpanel+" "+ypanel;

}

13.   草图功能

1)   画点

// 设置当前状态 为画点状态

 _state =  MapState .DrawPoint;

//将点图层设置为当前  选中图层

  _pointLayer.LockDispose();

  map .Layers.Remove(_pointLayer);

 _pointLayer.Projection = _mapBox.Projection;

  map .Layers.Add(_pointLayer);

  map .Layers.SelectedLayer = _pointLayer;

 _pointLayer.UnlockDispose();

  // 画点的具体实现

 _addShape.Layer = _pointLayer;

 _addShape.Activate();

2)   画线

      // 设置当前状态 为画线状态

 _state =  MapState .DrawLine;

 //将线图层设置为当前选中图层

 _lineLayer.LockDispose();

  map .Layers.Remove(_lineLayer);

 _lineLayer.Projection = _mapBox.Projection;

  map .Layers.Add(_lineLayer);

  map .Layers.SelectedLayer = _lineLayer;

 _lineLayer.UnlockDispose();

  // 画线的具体实现

 _addShape.Layer = _lineLayer;

 _addShape.Activate();

3)     画面

// 设置当前状态 为画面状态

 _state =  MapState .DrawPolygon;

 //将面图层设置为当前选中图层

 __polygonLayer.LockDispose();

  map .Layers.Remove(__polygonLayer);

 __polygonLayer.Projection = _mapBox.Projection;

  map .Layers.Add(__polygonLayer);

  map .Layers.SelectedLayer = __polygonLayer;

 __polygonLayer.UnlockDispose();

  // 画 面 的具体实现

 _addShape.Layer = __polygonLayer;

 _addShape.Activate();

4)   清除

  //清除点线面信息

      clearPointLayer();

 clearLineLayer();

 clearPolygonLayer();

   //清除点线面图层

 _pointLayer.LockDispose();

  map .Layers.Remove(_pointLayer);

 _pointLayer.UnlockDispose();

 _lineLayer.LockDispose();

  map .Layers.Remove(_lineLayer);

 _lineLayer.UnlockDispose();

 _polygonLayer.LockDispose();

  map .Layers.Remove(_polygonLayer);

 _polygonLayer.UnlockDispose();

14.   地图编辑

1)   编辑工具

引用类:   DotSpatial.Controls

public   Function Mode  Function Mode { get ;  set ;};

使用: Map.Function Mode =  FunctionMode . select ;

2)   创建特征

//根据选中图层选择画点、画线、还是画面

_addShapeFunction = new AddShapeFunction( map ) { Name = "AddShape" };

map .MapFunctions.Add(_addShapeFunction);

 _addShapeFunction.Layer = _activeLayer;

 SetSnapLayers(_addShapeFunction);

 _addShapeFunction.Activate();

private void SetSnapLayers(SnappableMapFunction func)

{

 func.DoSnapping = this._doSnapping;

 if (!this._doSnapping) return;

 foreach (var layer in _geoMap.Layers)

 {

 IFeatureLayer fl = layer as IFeatureLayer;

 if (fl != null && fl != _activeLayer && fl.DataSet.FeatureType != _activeLayer.DataSet.FeatureType)

 func.AddLayerToSnap(fl);

 }

}

3)   属性表

引用类: DotSpatial.Symbology;

  DotSpatial.Symbology .Form;

使用: //选择当前图层

_activeLayer =  map .Layers.SelectedLayer  as   IFeatureLayer ;

//显示当前图层属性

  FeatureLayerActions   att=  new   FeatureLayerActions ();

  att.ShowAttributes(_activeLayer);

4)   保存编辑

引用类:  DotSpatial.Symbology;

  DotSpatial.Symbology .Form;

使用: //选择当前图层

      _activeLayer =  map .Layers.SelectedLayer  as   IFeatureLayer ;

//将当前图层信息导出

    FeatureLayerActions   att=  new   FeatureLayerActions ();

 att.ExportData(_activeLayer);

 

源码链接:https://download.csdn.net/download/qq_38370387/11966228

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值