关于MapWinGIS的编译以及打开中文数据的问题

Posted by:                    gischai          (210.77.87.---)
Date: April 08, 2009 12:22AM

这2天编译了 MapWinGIS OCX控件,做了一点修改

1、将svn下的Supportlibraries文件copy到C:\dev下,MapWinGIS文件则可以放在任意位置;你也可以更改Supportlibraries文件的位置,那么请设置“附加包含目录”,方法是在VS2005中:项目\MapWinGIS属性\配置属性\C++\常规\附加包含目录。
2、编译的时候可能有一个tkGridRaster.cpp文件 编译器错误 C2712,修改方法:在 Visual Studio 2005中设置此编译器选项;项目\MapWinGIS属性\配置属性\C++\代码生成\启用 C++ 异常,将其设置为”否”。
3、项目设置了 配置属性\常规\输出目录:c:\temp\$(ConfigurationName),所以ocx文件在该目录下,也可以自己修改设置。
4、关于MapWinGIS 4.X无法读取中文路径的问题:
4.1、在map.cpp的CMapView::DrawShapefile(const CRect & rcBounds, CDC * dc, Layer * layer)函数更改如下:
原来的:
char * sFilename = new char[b_strlen+1];
int sFilenamelast = WideCharToMultiByte(CP_ACP,0,fname,b_strlen,sFilename,b_strlen,0,0);
更改为:
char * sFilename = new char[(b_strlen+1) <<1];
int sFilenamelast = WideCharToMultiByte(CP_ACP,0,fname,b_strlen,sFilename,(b_strlen) <<1,0,0);
此处如果不修改,D:\USA\states.shp得出sFilenamelast=17,但D:\基本农田工程\珠海主要道路.shp得出sFilenamelast=0;
修改后D:\USA\states.shp得出sFilenamelast=17, D:\基本农田工程\珠海主要道路.shp得出sFilenamelast=32;
4.2 MapWinGIS.cpp文件中添加引用#include <fstream>,
在BOOL CMapWinGISApp::InitInstance()中添加
std::locale::global(std::locale(""));
但在vc6种据说好像不需要这个更改,2005和2008必须要。
BOOL CMapWinGISApp::InitInstance()
{
std::locale::global(std::locale(""));//这就是添加的一行
return COleControlModule::InitInstance() && InitATL();
// NB: GdiplusStartup was here. Please see Map.cpp for more explanation.
}
经过以上修改后就可以打开中文shp数据,在网站提供的SimpleMap-VB6.zip例子中,可以正确显示,在其“Labeling”功能中,可以读取中文字段,并用中文字段值进行标注
另外运行MapWindow4Dev(从svn下在的源代码),也可以正常打开中文数据,包括显示图形和属性表格(包括编辑),identify,可以正常运行。
另外没有在shp文件的创建和保存中进行测试。

5、对MapWindow V6中的View Attributes功能做了一点修改
(1)、MapWindow\Data\Vectors\internal\Shapefiles\AttribuTable.cs
修改了ReadTableRow(int currentRow)函数
将下面1行:
tempObject = new string(cBuffer).Trim().Replace("\0", String.Empty);   //.ToCharArray();
修改为:
tempObject = System.Text.Encoding.Default.GetString(bBuffer);
//这样就可以正确读取dbf文件中各行的中文信息了。

(2)、MapWindow\Data\Vectors\internal\Shapefiles\AttribuTable.cs
修改了ReadTableHeader(BinaryReader reader)函数
将以下3行:
read the field name
        char[] buffer = new char[11];
        buffer = reader.ReadChars(11);
        string name = new string(buffer);
修改为:
byte[] buffer = new byte[11];
        buffer = reader.ReadBytes(11);//如果不这样做,就会在后面的读取中,造成读取移位,出错。
string name = System.Text.Encoding.Default.GetString(buffer);
//这样就可以正确读取dbf文件中各字段的中文信息了。

Options: ReplyQuote
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:                    gster1981          (123.52.67.---)
Date: April 16, 2009 04:50AM

太感谢了....
关于中文路径的问题记得以前看过解决方案后来找不到了。
mapwindow对多语言一直不是很友好。记得mapwindow以前的版本,插件管理器一样不支持中文,会出现乱码,我曾经修改过....
比较疑惑的是,类似的多语种支持的bug官方为何一直不更新?人手太少?
gischai可以申请下写权限...:)



Edited 2 time(s). Last edit at 07/02/2009 07:31PM by gster1981.

Options: ReplyQuote
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:                    denbes          (121.32.158.---)
Date: July 02, 2009 08:38AM

Mark
Good

Options: ReplyQuote
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:                    neio          (121.207.89.---)
Date: July 28, 2009 07:14AM

Hi gischai,

在MapWinGIS 4.x 的SVN中,我已经帮你把中文路径支持的代码提交上去了。另外我做了四叉树索引,也请多多指教。我在C++编程上还是新手,呵呵。

Best Regards,

Neio Zhou (ZHOU Conghui)
周聪辉
--------------------------------

Currently Master Candidate in Computer Science, The Chinese University of Hong Kong
现在为香港中文大学计算机科学硕士研究生

Quanzhou STrong Newtork Co. Ltd. , China from March 2009 to August 2010
2009年至2010年供职于中国泉州市视通光电网络有限公司

Options: ReplyQuote
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:                    gischai          (210.77.87.---)
Date: September 01, 2009 01:55AM

多谢neio了
我的c++也不太熟悉,希望多交流。我的e文也很烂,典型的哑巴英语
如果MapWinGIS能提高对大数据量的操作效率就好了,这个可能与索引有关
另外怎么不支持PostGIS呢,可能是设计的时候就没想到要抽象出DataProvider
MapWindow6好像好点,但进展太慢了,缺乏文档

Options: ReplyQuote
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:                    flashwolf          (218.160.177.---)
Date: September 22, 2009 10:42AM

這篇文章請問一下,是不是有點舊了!我按裡面的資料去進行設定無法成功!麻煩說明,謝謝!

Options: ReplyQuote
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:                    gischai          (210.77.87.---)
Date: September 23, 2009 02:14AM

代码修改已经由neio提交上去了,不需要你手动修改源代码了,可以打开显示中文数据
目前最新的MapWinGIS源代码无法通过编译,或许是添加了SpatialIndex([ www.mapwindow.org]),可能是有些函数、变量没有声明或添加引用,我这里也无法编译通过
你可以去下载这个地址的源代码[ www.yinghuochong.com](自己随便注册一个ID)
我刚传上去的,按照我的方法设定,可以编译通过,那是2009.8.14下载的源代码

Options: ReplyQuote
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:                    flashwolf          (61.228.245.---)
Date: September 23, 2009 09:41PM

謝謝您gischai!感恩!

Options: ReplyQuote
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:                    gischai          (210.77.87.---)
Date: October 12, 2009 02:35AM

除了下载MapWinGIS源代码外,还需要下载最新的SupportLibraries,这样就可以编译成功了

Options: ReplyQuote
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:                    Rob Cairns          (196.207.47.---)
Date: October 15, 2009 02:22AM

这一变化引起了许多新的错误。在atof()函数被打破了。例如,当读“世界档案”。Neio - 我宁愿使用 myIncomingTextFile.imbue(std::locale("")); 只能读取数据?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值