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文件中各字段的中文信息了。
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文件中各字段的中文信息了。
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.
关于中文路径的问题记得以前看过解决方案后来找不到了。
mapwindow对多语言一直不是很友好。记得mapwindow以前的版本,插件管理器一样不支持中文,会出现乱码,我曾经修改过....
比较疑惑的是,类似的多语种支持的bug官方为何一直不更新?人手太少?
gischai可以申请下写权限...:)
Edited 2 time(s). Last edit at 07/02/2009 07:31PM by gster1981.
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:
denbes (121.32.158.---)
Date: July 02, 2009 08:38AM
Mark
Good
Good
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年供职于中国泉州市视通光电网络有限公司
在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年供职于中国泉州市视通光电网络有限公司
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:
gischai (210.77.87.---)
Date: September 01, 2009 01:55AM
多谢neio了
我的c++也不太熟悉,希望多交流。我的e文也很烂,典型的哑巴英语
如果MapWinGIS能提高对大数据量的操作效率就好了,这个可能与索引有关
另外怎么不支持PostGIS呢,可能是设计的时候就没想到要抽象出DataProvider
MapWindow6好像好点,但进展太慢了,缺乏文档
我的c++也不太熟悉,希望多交流。我的e文也很烂,典型的哑巴英语
如果MapWinGIS能提高对大数据量的操作效率就好了,这个可能与索引有关
另外怎么不支持PostGIS呢,可能是设计的时候就没想到要抽象出DataProvider
MapWindow6好像好点,但进展太慢了,缺乏文档
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:
flashwolf (218.160.177.---)
Date: September 22, 2009 10:42AM
這篇文章請問一下,是不是有點舊了!我按裡面的資料去進行設定無法成功!麻煩說明,謝謝!
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下载的源代码
目前最新的MapWinGIS源代码无法通过编译,或许是添加了SpatialIndex([ www.mapwindow.org]),可能是有些函数、变量没有声明或添加引用,我这里也无法编译通过
你可以去下载这个地址的源代码[ www.yinghuochong.com](自己随便注册一个ID)
我刚传上去的,按照我的方法设定,可以编译通过,那是2009.8.14下载的源代码
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:
flashwolf (61.228.245.---)
Date: September 23, 2009 09:41PM
謝謝您gischai!感恩!
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:
gischai (210.77.87.---)
Date: October 12, 2009 02:35AM
除了下载MapWinGIS源代码外,还需要下载最新的SupportLibraries,这样就可以编译成功了
Re: 关于MapWinGIS的编译以及打开中文数据的问题
Posted by:
Rob Cairns (196.207.47.---)
Date: October 15, 2009 02:22AM
这一变化引起了许多新的错误。在atof()函数被打破了。例如,当读“世界档案”。Neio - 我宁愿使用 myIncomingTextFile.imbue(std::locale("")); 只能读取数据?