首页 / 浏览问题 / 组件GIS / 问题详情
iobjcet c++ 经纬度怎么转换成显示坐标
56EXP 2019年10月21日
1.地图版本 supermap iObjcets C++ 9D

2.qt下知道一点的经纬度如何在地图上显示

1个回答

您好,您可以创建一个点对象,并设置风格,添加到UGMap的跟踪层或动态层显示。
694EXP 2019年10月21日
你好!很感谢你的回答

   你说的这一步已经实现,但是我把点的经纬度值转换为UGPoint点地图显示坐标时不知道该怎么转换,可以给出一个实例嘛?
坐标转换需要使用UGRefTranslator实现,需用的SetPrjCoord
SysSrc(),SetPrjCoordSysDes(),SetGeoTransMethod(),Translate()等方法。请参考一下UGRefTranslator的头文件。
你好!,看了那个头文件不太看得懂,可以给个是实例嘛?

  比如84坐标下一点的经度为105,纬度为32,怎么把它转换成UGPoint2D坐标?
你好!我怎么获得我当前地图是什么坐标系?
请参考下面的转换代码:转换结果在ugArray中

void JunSuMFCDialogDlg::coordnateTransform()
{
    // 地图坐标系
    const UGPrjCoordSys& pSrcPrj = m_pMapControl->GetMapEditWnd()->m_mapWnd.m_Map.GetPrjCoordSys();
    UGPrjCoordSys* pTargetPrj = new UGPrjCoordSys(4326);
    UGRefTranslator* pUGRefTranslator = new UGRefTranslator();

    pUGRefTranslator->SetPrjCoordSysSrc(pSrcPrj);         // 被转换点的坐标系
    pUGRefTranslator->SetPrjCoordSysDes(*pTargetPrj);     // 转换后点的坐标系
    pUGRefTranslator->SetGeoTransMethod(EmGeoTransMethod::MTH_GEOCENTRIC_TRANSLATION); // 转换方法:三参数

    // 转换参数,根据设置的转换方法,有旋转,平移等时设置对应参数,没有需要就创建空对象
    UGGeoTransParams* pTempParams = new UGGeoTransParams();
    pUGRefTranslator->SetGeoTransParams(*pTempParams);
    delete pTempParams;
    pTempParams = NULL;

    // 构造点串, pt为一个屏幕上的点
    UGPoint2D p1 = m_pMapControl->PixelToMap(pt.x, pt.y); // clicked position
    UGPoint2D p2 = m_pMapControl->PixelToMap(pt.x + 50, pt.y + 50); // offset 50 pixels

    UGArray<UGPoint2D> ugArray;
    ugArray.Add(p1);
    ugArray.Add(p2);

    int count = ugArray.GetSize();

    bool result = pUGRefTranslator->Translate(ugArray.GetData(), count);
}
...