天洑软件 发表于 2019-11-5 15:52:57

结合MapGIS进行污染物扩散分析

地理信息系统(GIS)是用于存储和处理与地理空间分布相关信息的集合。由于GIS具有独特的混和数据结构和地理分析功能,在各行业的应用也越来越广泛。GIS平台包括商业化和开源两种,常用的开源GIS平台如ArcGis、SuperMap等功能强大,效率很不错,但毕竟是商业化的。MapWinGis在开源GIS项目中的效率是相当不错的,本文主要对其进行介绍。MapWInGis的开发语言是VC,基于微软的COM思想编写,为开发人员提供了一个名为MapWInGis的ActiveX控件。开发人员可以利用这个控件在自己的系统中添加GIS的各种功能,包括:地图的显示,图层上点、线以及图像的绘制,测量长度面积,存取数据的一系列的工作。功能十分丰富,可以满足绝大部分的用户需求。 http://www.njtf.cn/ueditor/net/upload/2017-04-10/1b43c090-e4c6-4b2f-b8fe-3c90877e2942.png
下面对基于MapWinGis开发的一般步骤进行介绍。一、 确定map coordinate system和projection无论将要编写何种类型的GIS应用,关于map coordinate system以及projection的选择都是第一位的。MapWinGis提供了以下的一些选项。
http://www.njtf.cn/ueditor/net/upload/2017-04-10/636a130b-3dea-44ee-8f9a-35aee18aa9a9.png
手动设置时MapWinGis提供了多种导入形式,包括EPSG、proj4等,对于不同格式的projection的具体信息可以至www.spatialreference.org查询;选择从数据中获取时,MapWInGis提供了GrabProjectionFromData方法,此方法默认为true,若没有为应用指定projection,那么在导入第一个带有prj信息的数据时会自动将其设定为此应用的projection,此时导入不同的projection的数据时,MapWinGis会发出警告;也可以选择完全不使用projection,此时数据不存在地理位置信息,将只能按照像素坐标进行操作。
http://www.njtf.cn/ueditor/net/upload/2017-04-10/85695bc6-6027-4a16-8656-a977b5198a96.png
确定projection后还可以根据实际需求选择不同的tiles以获取自己需要的信息,如下:
http://www.njtf.cn/ueditor/net/upload/2017-04-10/c3a5ea6b-3f9d-4619-8ba3-6dbaeb2a4861.png
二、 确定需要操作的数据类型MapWinGis支持大量的数据类型,具体的信息参见下方的表格:
http://www.njtf.cn/ueditor/net/upload/2017-04-10/4c156ace-89b6-4779-a1a2-fe5dc973189a.png
对不同的数据类型MapWinGis提供了不同的类进行管理,可以选择各自的接口进行处理。另外,为了应对大量数据的导入可能导致的混乱,MapWinGis提供了FileManager类,可以打开MapWinGis支持的所有格式的数据,可以大量减少代码量。下图是一个生成了GridColorScheme的Grid在地图上的显示:
http://www.njtf.cn/ueditor/net/upload/2017-04-10/f7aeef19-3912-42ac-ace4-18d71e903e03.png
增加了网格之后效果如下:
http://www.njtf.cn/ueditor/net/upload/2017-04-10/3712c72b-844f-4b75-aecb-e7bdc5ae8b7b.png三、确定交互的操作和具体的功能管理数据和用户交互的类是AxMap,其中有大量的事件和消息,用于对不同的操作进行响应,下图详细展示了AxMap提供的具体功能。http://www.njtf.cn/ueditor/net/upload/2017-04-10/c673db3b-f829-438c-8aaa-bcd8ecc0fb0d.png
测量距离:
http://www.njtf.cn/ueditor/net/upload/2017-04-10/b400ef34-09b9-40dd-bf14-097abec53108.png
矩形区域内的平均值,最大值以及最小值:
http://www.njtf.cn/ueditor/net/upload/2017-04-10/a704fccb-26cc-4f43-9410-d9f809b1a5c4.png
非规则区域内的平均值,最大值以及最小值:
http://www.njtf.cn/ueditor/net/upload/2017-04-10/97541d12-c0d2-4f10-8c48-dd6199698dbc.png
某点的具体信息以及调整:
http://www.njtf.cn/ueditor/net/upload/2017-04-10/a9f349bc-f83a-4556-9ee2-3b3052472d56.png
等等。四、 涉及到的方法下面对以上的功能实现需要涉及到的方法进行介绍:1.Grid的具体信息存储在GridHeader类,所以想要修改存储在grid中的数据需要使用GridHeader而不是Grid。
http://www.njtf.cn/ueditor/net/upload/2017-04-10/794abee1-8e0f-4651-9abc-f77da45af8b2.png2.手动创建的Grid不带有地理位置信息,需要手动进行设置,并且导入projection只能以string进行操作,如proj4、ESPG,所以根据不同的projection需要的信息至www.spatialreference.org进行查询。3.手动创建的Grid仅仅存储了信息,在导入至图层时,若不指定Render style会看不到实际的效果,Grid Rendering有两种方式。
http://www.njtf.cn/ueditor/net/upload/2017-04-10/51f5f709-fdda-45b8-ada3-6f856020b1f8.png2.手动创建的Grid不带有地理位置信息,需要手动进行设置,并且导入projection只能以string进行操作,如proj4、ESPG,所以根据不同的projection需要的信息至www.spatialreference.org进行查询。3.手动创建的Grid仅仅存储了信息,在导入至图层时,若不指定Render style会看不到实际的效果,Grid Rendering有两种方式。
所以需要对GridColorScheme的类进行了解。4.有时需要对Grid中的数据进行查询,修改和统计,这里涉及到AxMap的事件和消息,像素坐标系、世界坐标系、投影坐标系的相互转换,鼠标工具的选择等一系列操作。需要对GeoProjection、AxMap和Util类进行了解。需要注意的是Util类是一个通用类,里面有很多使用的功能,当你在特定的类里找不到你需要的接口时,不妨到这里来试试,可能会有收获。五、 总结以上对MapWinGis的开发过程进行了简单的介绍,并以Grid为例说明了GIS应用开发的过程中类本身复杂的数据结构和类之间复杂的交互性。这些因素都要求GIS的开发者不能管中窥豹,要对全局有足够的了解才能使得开发顺利的进行。


页: [1]
查看完整版本: 结合MapGIS进行污染物扩散分析