使用产品:supermap-iobjectscpp-10.0.0-17726-74479 操作系统:win7 x64 -vs2015
数据类型: 服务和文件
问题详细描述:使用idesktop制作的点符号库(MarkerLibrary.sym),在地文件数据源地图上加点可以显示自定义的图片,在服务数据源地图显示不了,显示还是默认点。
问题重现步骤:
1、代开数据源
m_pWorkspace = new UGWorkspace();
#if 0
UGWorkspaceConnection *info = new UGWorkspaceConnection();
UGString str = _U("D:\\data\\World.smwu");
info->m_strServer = str;
info->m_nWorkspaceType = 9;
bool isss = false;
isss = m_pWorkspace->Open(*info);
#else
UGDsConnection dcon;
//UGString dataSourceName = _U("http://support.supermap.com.cn:8090/iserver/services/map-china400/rest/maps/China");
UGString dataSourceName = _U("http://support.supermap.com.cn:8090/iserver/services/map-ChinaProvinces/rest/maps/ChinaProvinces");
dcon.m_nType = UGEngineType::Rest;
dcon.m_strAlias = _U("China");
dcon.m_strServer = dataSourceName;
UGDataSource* pDataSourc = m_pWorkspace->OpenDataSource(dcon);
if (pDataSourc == NULL)
{
MessageBox("打开web地图失败", "提示", 0);
}
UGDataset *dataset = pDataSourc->GetDataset(0);
if (dataset == NULL)
{
MessageBox("打开web地图数据源失败", "提示", 0);
}
#endif // 0
2、加载点符号库
string strMarkLib;
CCSGlobalMethod::GetConfigurationDirPath(strMarkLib);
strMarkLib += CS_FILE_MARKERLIBRARY; //CS_FILE_MARKERLIBRARY="MarkerLibrary.sym"
UGString strLib;
strLib.FromStd(strMarkLib);
UGMarkerSymbolLib *ds = m_pWorkspace->m_Resources.GetMarkerSymbolLib();
UGbool isd = ds->LoadFromFile(strLib);
3、地图添加点,(根据传入的图片路径,解析文件名,在点符号库中寻找图片的ID)
CString CSuperMapCtrl::AddBmp(TPoint pt, LPCTSTR lpszBmpPath, double size /* = 30 */)
{
//获取当前符号库
UGMarkerSymbolLib *ds = m_pWorkspace->m_Resources.GetMarkerSymbolLib();
//解析图片路径获取图片名
char szFileName[256] = { 0 };
CR_OS::pathname_to_noextname(szFileName, lpszBmpPath);
string path = szFileName;
UGString ufilename;
ufilename.FromMBString(path);
//根据图片名获取符号库id
int id = ds->FindName(ufilename);
UGPoint2D pt2D = UGPoint2D(pt.x, pt.y);
UGGeoPoint *pUGpoint = new UGGeoPoint();
pUGpoint->SetPoint(pt2D);
pUGpoint->SetID(m_nId++);
UGStyle style;
style.SetMarkerStyle(id+1); //自制符号的id
style.SetMarkerSize(1); //点大小,5
style.SetMarkerHeight(10); // 设置符号高度
style.SetMarkerWidth(10); // 设置符号宽
pUGpoint->SetStyle(&style);
CString scTag = MakeUsableIndex(OIT_Bmp);
UGString suTag;
suTag.FromStd(scTag.GetBuffer());
m_pMapWnd->m_mapWnd.m_Map.m_TrackingLayer.Add(pUGpoint, suTag);
UGC::UGTextStyle tStyle;
tStyle.SetForeColor(UGRGB(255, 0, 0));
tStyle.SetBold(true);
tStyle.SetAlign(4);
tStyle.SetHeight(5);
tStyle.SetFixedSize(true);
m_pMapWnd->m_mapWnd.m_Map.m_TrackingLayer.AddLabel(_U("xxx"), tStyle);
m_pMapWnd->m_mapWnd.m_Map.SetRefreshFlag(false);
m_pMapWnd->SendInvalidateFunc();
delete pUGpoint;
pUGpoint = NULL;
m_pMapWnd->SetCenter(pt2D);
m_pMapWnd->SetScale(500);
return scTag;
}
4、本地文件数据可以显示自定义图片,使用服务数据源不行。
1)本地
2)服务
5、问题:
1)服务数据源怎么显示自定义图标(跟踪层)?
2)就是添加点的名称文字,怎么实现,我现在是用UGGeoText ,使用点的gps坐标转桌面坐标偏移图片大小再转gps来显示,这个出现的问题就是缩放时,点与文字间距效果很差,有没有其他方式?
3)点或文字的点击事件怎么实现?
4)程序每次运行一段时间就自动崩溃图片如下vs使用的是2015:
5)supermap mfc c++开发资料太少了,没啥demo,全是c#、java,c++的太少, 给的help 程序员参考API全是说明没有一个使用用例,跟看头文件有啥区别!(吐槽下)