当前位置:   article > 正文

MapWindows5学习以及编译记录_mapwindows架构+无限放大

mapwindows架构+无限放大

MapWindows官网:https://www.mapwindow.org/

MapWindows介绍

MapWindows官网:https://www.mapwindow.org/
MapWindow GIS(http://mapwindow4.codeplex.com/)桌面应用程序是一个免费开源基于标准的地理信息软件,使用它可以浏览和编辑多种GIS数据格式。这个软件包括很多地理处理的插件如:缓冲分析、合并处理等,也可以使用脚本编辑器编写VB.NET和C#的脚本。最新版本的MapWindow5应用程序完全基于.NET4.5平台和C#。现在又开发出了MapWindow.Web可以让用户更容易开发基于ASP.Net的web应用。这样MapWindow逐渐形成一个完整的体系,从开发嵌入式系统的MapWinGIS.OCX到应用程序框架的MapWindow应用程序再到发布web程序的MapWindow.web。MapWindow4和6都是基于纯c#开发的,都已经停止更新了。

MapWinGIS.ocx

MapWinGIS.ocx是一个基于开源和基于C++的地理信息系统编程ActiveX控件和应用程序接口(API),可以在Visual Basic、C语言、Delphi或其他支持ActiveX(如MS Office)的语言中添加到Windows窗体中,为应用程序提供一个地图输入。源码可在GitHub上看:https://github.com/MapWindow/MapWinGIS

MapWindows 4

CodePlex Archive链接:https://archive.codeplex.com/?p=mapwindow4
这个链接里面有MapWindows4.8和4.9的介绍以及可以下载MapWindows4的源码。
MapWindow 4是由MapWindow GIS项目组开发的一款免费开源桌面GIS软件。
MapWindow 4.8的最新版本可以在以下位置下载:http://mapwindow4.codeplex.com/releases。此版本包括一个修改/更新的图形用户界面和大量的错误修复。我们对此非常满意,希望你也能满意。有关此软件的更多信息和文档,请访问:http://www.mapwindow.org/apps/wiki/doku.php?id=mapwindow4

此CodePlex站点将是MapWindow v4.9的主页。MapWindow4.8的最终版本自2011年11月4日起提供。对该版本的支持,大约每3个月发布一次服务包。对于v4.9,在过去的几年里,许多功能已经从VB.NET/C#库到C++ ActiveX控件(MavaWIGIS)。这极大地改善了MapWindow的用户体验和性能。
最后一点注意:MapWindow4.9将不能完全100%向后兼容旧版本。计划进行一些优化,这些优化将破坏现有代码。当然,我们将创建迁移工具,但是现有的应用程序和插件很可能需要部分重写。

MapWindows 5

CodePlex Archive链接:https://archive.codeplex.com/?p=mapwindow5
这个链接里面有MapWindows5 的介绍以及可以下载的源码。
MW5是一个桌面GIS,它可以使用插件架构进行扩展.它使用MapWinGIS绘图控件,并于2015年从零开始使用MEF和依赖注入等新技术创建,使其体积小、健壮和快速。Mapwindow5底层是调用的c++编写的ActiveX组件MapwinGIS。使用VS2013 +C#+.Net4框架构建。
MapWindows 5 主要功能有:

  1. 直接打开,编辑,保存Image,Grid,Shapfile,TIN,DBF格式的文件。
  2. 在地图中对图形进行浏览,标注,设置颜色等信息。
  3. 在地图中进行空间数据查询。
  4. 通过web的开源接口获取和显示地图数据。
  5. 动态的在图层上标绘空间数据。
  6. 存取地图中的相关数据。
  7. 对不同的格式进行转换,例如从TIN到GIRD等。

MapWindows 6

MapWindows 6(http://mapwindow6.codeplex.com/)是在MapWindows 4的基础上进行改进,整个框架采用C#完成,代码完整清晰,其优点是:

  1. 完全采用.net平台(不需要COM注册或DLL加载);
  2. 可以通过使用Mono运行在Mac或Linux平台上;
  3. 大量扩展了符号集,点、线、面的符号化更丰富,而且可以基于属性内容进行专题化,同时支持矢量化的字体符号;
  4. 面向对象的代码:直接对各要素进行重叠分析、相交分析等。支持OGC的几何对象模型,基于System.Data.DataTable的数据集;
  5. 可兼容的插件模式:插件的接口就像普通对象的事件对象一样;
  6. 组件模式:所有的组件通过MapWindow.dll提供,能够拖放控件就可以定制GIS程序。

MapWinGIS 6项目已经进行了搁置,暂时并没有提供更新和优化。

MapWindows5源码下载与编译

源码

首先下载源码,可以到https://archive.codeplex.com/?p=mapwindow5这个CodePlex Archive网址,点击download archive按钮直接下载。
在这里插入图片描述

或者到GitHub上:https://github.com/MapWindow/MapWindow5/releases
在这里插入图片描述
从GitHub这个界面上的介绍可以看到,最新版本是MapWindows5 v5.6.3. 通过VS2017进行编译的。在Github上也可以直接下载已经编译好的程序,先安装运行,尝试下MapWindows 5 的使用,看有哪些功能。

我在GitHub上下载的源代码编译一直有问题,所以推荐从第一个链接,也就是CodePlex Archive上下载。
如下页面:
在这里插入图片描述
但是,也要将GitHub上的源代码下载下来,后面还是会用到!

编译

源码下载查看

下载压缩包解压后,打开MapWindows 5 文件夹,就会看到如下文件列表。点击进入soureCode文件夹。
在这里插入图片描述
编译源码放置在src文件夹下。
在这里插入图片描述点进src文件夹,就可以看到所有的源码。开发环境为VS2017。
在这里插入图片描述
点击MW5.sln打开项目,如下图:

在这里插入图片描述

这时直接编译会报错,因为缺少很多引用项,主要的一部分就是MapWindows使用的界面设计是通过Syncfusion进行的,所以还要下载Syncfusion组件安装。以及还需要MapWinGIS库的安装,之后再来进行编译。所以关闭项目。

环境配置

首先可以进入网址:http://www.mapwindow.org/documentation/mapwindow5/compile.html
这是MapWindows 5开发项目组放出来让其他人看怎么实现MapWindows 5编译的。
在这里插入图片描述

Syncfusion

由于需要Syncfusion来实现界面开发配置,所以要编译代码必须要下载Syncfusion。

Syncfusion Essential Studio for Windows窗体是一个全面的集合,包括100多个必要的Windows窗体控件,如网格、图表、图表、计划程序和更快地构建强大的业务应用程序的工具。可以同步Windows窗体控件,内置主题,UI,本地化和与Visual Studio的无缝集成。

好处在于Syncfusion可以提供Syncfusion社区许可证,通过LinkedIn或XING登录可获得完整产品系列的免费许可证。免费给年总收入少于100万美元且开发人员少于5人的公司和个人使用。

免费许可证申请网站如下:
https://www.syncfusion.com/downloads/communitylicense?utm_source=MapWindow_Codeplex&utm_medium=user_mapwindow&utm_campaign=Codeplex_click
在这里插入图片描述
我是通过注册XING账号来申请许可证的。
通过申请许可证和之后下载Syncfusion软件,并安装,emm这是一个漫长的过程。

MapWinGIS

在前面介绍了,MapWinGIS.ocx是一个基于开源和基于C++的地理信息系统编程ActiveX控件和应用程序接口(API),可以在Visual Basic、C语言、Delphi或其他支持ActiveX(如MS Office)的语言中添加到Windows窗体中,为应用程序提供一个地图输入。MapWindows 5是通过调用MapWinGIS的dll动态库来进行开发的,所以要进行MapWinGIS的安装。

下载地址:https://github.com/MapWindow/MapWinGIS/releases
我下载了:MapWinGIS-only-v5.2.4-x64-VS2017.exe,通过点击运行,安装后形成一个MapWinGIS文件夹。
在这里插入图片描述
点击regMapWinGIS,进行动态库注册。

至此,完成的MapWindows 5的编译环境配置。

源码修改和编译

还原NuGget包

环境配置完成后,再到源代码文件夹去点击MW5.sln,打开项目。
在这里插入图片描述
虽然已经完成了配置,但是项目中的引用还是会是有黄色感叹号,代码运行不起来,首次拉取代码并打开后,发现引用的dll几乎全部都标有黄色感叹号,包括System这些.net标准库,如下图:
在这里插入图片描述
点击项目引用dll,路径也是空。
在这里插入图片描述

遇到这种情况不要慌,打开窗户冷静一下,想一想为什么标准库都没有正确找到,VS怎么这么辣鸡…具体原因是因为工程包含了一些NuGet包,这些第三方库未正确加载导致的。

解决操作如下:
①到解决方案管理器右击解决方案——管理解决方案的NuGet程序包。
在这里插入图片描述

②对缺少的NuGet程序包进行还原。
在这里插入图片描述
③还原完成(解决方案资源管理器中点击刷新),工程恢复正常,标准库的dll都已正确找到。
在这里插入图片描述

重新引用MapWinGIS库

虽然大部分dll的引用变成了正常,但是,还是会存在一些问题。
在这里插入图片描述
例如MW5.Api中的引用MapWinGIS存在问题,这时候,之前安装的MapWinGIS.ocx库就派上了用场,将带有黄色感叹号的引用移除,右击添加,来到之前安装的MapWinGIS的目录下,找到AxInterop.MapWinGIS.dll、MapWinGIS.ocx添加引用。
在这里插入图片描述
在这里插入图片描述
引用之后,这两个感叹号消失。

再一一点开项目中各个子项目的引用,进行查看,会看到MW5.Attributes、MW5.Data、MW5.Projections、MW5.Tiles中,以及在Plugins文件夹中的MW5.DebugWindow、MW5.Identifier、MW5.Printing、MW5.ShapeEditor、MW5.Toolbox出现一个Syncfusion.core引用的感叹号。
在这里插入图片描述
以及在Injection的MW5.DI.LightInject项目Lightinject 的感叹号。
在这里插入图片描述
以及在MW5.PostBuild项目中基本所有引用有黄色感叹号。
在这里插入图片描述

这些可以点击MW5中的Prog.cs文件,选择x64环境,按F5运行,通过错误列表看到:

在这里插入图片描述
这个时候,可以看到29错误,39警告:
在这里插入图片描述

在这里插入图片描述

修改源代码,进行错误改正

在这里插入图片描述
可以看到一部分错误提示是:
错误 CS0656 缺少编译器要求的成员“Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create” MW5.Api …\src\MW5.Api\Concrete\Feature.cs 147 活动的
对于此错误,在项目MW5.Api中添加引用Microsoft.CSharp解决。
在这里插入图片描述

错误 CS1503 参数 1: 无法从“System.IntPtr”转换为“int” MW5.Api …src\MW5.Api\Concrete\CompositeLine.cs 129 活动的
点击错误提示,跳转到代码,可以看到具体错误地方。
在这里插入图片描述
这些代码怎么更改呢?方法如下,这个时候GitHub上下载的源代码可以派上用场了。
找到错误代码的对应子项目,对应代码文件,GitHub上这部分代码是进行修改过的,全部一一对应将更改后的代码复制过来,更改如下:
在这里插入图片描述
将所有的代码错误更改完,虽然还有很多警告,但是暂时已经无所谓了,忙活了这么久,终于可以将源代码无报错运行起来了,所以先跑起来代码再说吧吗,准备享受这无bug的舒爽时刻。
在这里插入图片描述

什么?按下F5又双叒叕的出问题了?

碰到COM组件失败的问题,如下图所示:
在这里插入图片描述异常内容为:

System.TypeInitializationException
HResult=0x80131534
Message=“MW5.Api.Static.MapConfig”的类型初始值设定项引发异常。
Source=MW5.Api
StackTrace:
at MW5.Api.Static.MapConfig.set_ZoomToFirstLayer(Boolean value) in ***\MapWindow5-5.3.0\src\MW5.Api\Static\MapConfig.cs:line 86
at MW5.Helpers.MapInitializer.InitMapConfig() in ***\MapWindow5-5.3.0\src\MW5\Helpers\MapInitializer.cs:line 105
at MW5.Program.LoadConfig(IApplicationContainer container) in ***\MapWindow5-5.3.0\src\MW5\Program.cs:line 51
at MW5.Program.Main() in ***\MapWindow5-5.3.0\src\MW5\Program.cs:line 86
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
内部异常 1:
COMException: 检索 COM 类工厂中 CLSID 为 {80CDFEE0-576F-4141-906E-877638A2AEF3} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
  • 1
  • 2

在调试主程序之前需要注册MapWinGIS.ocxCOM组件。但是,直接运行“MapWinGIS”目录中的“regMapWinGIS.cmd”命令行文件,调试程序总是不成功,后经网上调研查询Windows的COM组件注册方法,突然想到MW5项目为x64架构,而“regMapWinGIS.cmd”命令行默认运行时调用的是32为的COM组件注册程序。因此,解决该问题的关键是需要使用64位的regsvr32命令来进行COM组件的注册

 1. 首先“以管理员身份运行”CMD命令窗;
 2. 使用cd命令跳转到64位regsvr32.exe文件存储目录“C:\Windows\SysWOW64”;
 3. 执行命令“regsvr32 /s *\MapWinGIS\MapWinGIS.ocx”,注册**MapWinGIS.ocx**COM组件;
 4. 再此运行MW5项目,可看到能够正常启动MapWindow5主界面如下图所示。
  • 1
  • 2
  • 3
  • 4

进行注册时可能出现对dllregisterserver的调用失败问题,解决对dllregisterserver的调用失败的方法:首先在开始菜单右击【命令提示符(管理员)】;然后在命令提示符中输入【regsvr32 “路径 \控件名称”】;最后确定回车即可。

界面编辑器异常问题

在想对MW5的系统界面进行编辑设计时,大多界面都显示下图所示的类似界面
在这里插入图片描述
解决办法为,改个样式宏设置就可以了。

运行成功

享受这一刻!~
在这里插入图片描述

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号