feitaoy 发表于 2009-8-5 14:07:31

osggis的point label中文支持问题

osggis中可以把point的一个属性处理成label,但如果数据内容是中文,则显示出来的是乱码,请问这个问题谁解决过?

FlySky 发表于 2009-8-6 13:24:22

你更改一下字符编码应该就可以了~~~·

feitaoy 发表于 2009-8-6 15:19:49

我在类的构造函数里增加:setlocale( LC_ALL, "chs" ),好像不行;

是应该在哪里增加这个语句?每个class都需要加么?

谢谢

FlySky 发表于 2009-8-7 06:11:47

最好能够设置全局性最好了,,,不知道你设置宽字符集了没~~~可能你的位置不对吧~~~~

feitaoy 发表于 2009-8-7 11:09:45

能说得具体细么?比如我要在osgviewer中显示中文text,则只需要使osgtext的库支持中文就可以了么?在程序的那个地方设置setlocal?

FlySky 发表于 2009-8-8 00:01:20

是的,,,估计是你是否设置支持中文的缘故吧~中文的支持需要把字符转换为宽字符才可以的~~其他的一般都没有什么问题的~~~

feitaoy 发表于 2009-8-10 14:59:22

本帖最后由 feitaoy 于 2009-8-10 15:00 编辑

问题解决了,具体如下:
1。ive文件本身的text内容是中文的没问题,问题是出在加载ive时显示乱码,所以需要修改ive插件使其支持中文
2。ive插件的text.cpp中,增加中文支持:
#include <string>
#include <comutil.h>
using namespace std;
#pragma comment(lib, "comsuppw.lib")
string ws2s(const wstring& ws);
wstring s2ws(const string& s);
string ws2s(const wstring& ws)
{
        _bstr_t t = ws.c_str();
        char* pchar = (char*)t;
        string result = pchar;
        return result;
}

wstring s2ws(const string& s)
{
        _bstr_t t = s.c_str();
        wchar_t* pwchar = (wchar_t*)t;
        wstring result = pwchar;
        return result;
}

在Text::read()中增加代码
std::wstring str;
   str=s2ws(in->readString());
   setlocale(LC_ALL,"chs");
   setText(str.c_str());

FlySky 发表于 2009-8-10 18:37:48

哈哈,,你可以向官方提交相关的更改代码~~~~

tygh2000 发表于 2009-8-25 17:21:34

相当的有用!谢谢!

sohoman 发表于 2009-8-28 13:43:36

不知道楼主用的那个版本的osg,至少2.8版是已经支持UNICODE文字的

changwork 发表于 2009-9-3 00:05:01

在osggis的BuildLabelFilter中有一处setText语句,只需要将其参数改为宽字符就可以了。

feitaoy 发表于 2009-9-24 10:03:47

to changwork :osggis生产的数据中并不是乱码,所以应该不是osggis的问题,我认为还是解析显示的问题;

to sohoman :我用的是2.9.5,用osgviewer和osggis_viewer浏览都是乱码,请教您的使用经验

StackSnow 发表于 2011-6-30 14:48:10

回复 1# feitaoy


    请问楼主是不是 使用的osggis_makelayer 将带有文字信息的矢量文件(如.shp)处理成的ive呢??
现在我想要添加文字注记 希望得到楼主的帮助 谢谢
页: [1]
查看完整版本: osggis的point label中文支持问题