最近学习了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