首页 / 浏览问题 / 组件GIS / 问题详情
鼠标拾取的地图坐标有偏差
3EXP 2020年04月02日

您好:

      环境是vs2013+Qt1.2.3插件(qt-x86-msvc2013-5.5.0)+iobjectscpp-9.1.1-16828-70590。操作系统:win7 x64

      我在用鼠标点击获取地图坐标时,在小比例尺大范围地图上,用qmapcontrol里的PixelToMap获取到的地图坐标偏差较大,获取到的地图坐标实际都在我点击位置的右下方(与idesktop里的拾取功能比对),比例尺越大偏差越小,只有把地图放大到很大,也就是比例尺很大时获取到的才是准确的,这是为什么呀?
这是我的鼠标点击代码:

void XWZK::mousePressEvent(QMouseEvent* event)
{
    if (event->button() == Qt::LeftButton)
    {   
        QPoint pt(event->x(), event->y());
        UGPoint2D MP = qMapControl->PixelToMap(pt);

        qDebug() << "MP x=" << MP.x << "y=" << MP.y;
    }
}

这是Extensions4Qt里qmapcontrol相关代码:

UGPoint2D QMapControl::PixelToMap(const QPoint &point)
{
    UGMap* pMap = this->GetMap();

    UGDrawCache &drawing = pMap->GetDrawing()->m_DrawCache;
    UGPoint DP(point.x(), point.y());
    UGPoint2D LP(0,0);
    drawing.DPtoLP(&DP, &LP, 1);

    UGPoint2D MP(0, 0);

    pMap->GetDrawing()->m_DrawParam.LPtoMP(LP, MP);

    return MP;
}

1个回答

你将大比例尺下和小比例尺下分别和桌面对应的结果对比截图出来看看呢,就是大比例尺下(程序:桌面);小比例尺下(程序:桌面)
4,620EXP 2020年04月02日

黑点位置我设置的112,37,下面是对比,桌面的始终一致,我的就不行……问题在哪儿捏?

程序:

桌面:

程序:

桌面:

程序:缩放到这个级别,才准确了


void XWZK::mousePressEvent(QMouseEvent* event) {     if (event->button() == Qt::LeftButton)     {            QPoint pt(event->x(), event->y());         UGPoint2D MP = qMapControl->PixelToMap(pt);         qDebug() << "MP x=" << MP.x << "y=" << MP.y;     } }这段代码只输出了MP的xy,下面的经度纬度应该还有一步投影转换,那部分代码是怎么写的。
这边测试是正常的,同一个位置点,不管在任何比例尺下获取出来的坐标都是一致的,你看你那边是否方便将你的着整个工程发过来,这边看看,工程请发送到邮箱chengyishi@supermap.com
谢谢,已发送!

那部分代码也是在咱们问答社区里找到的。

MP那部分就有问题,与桌面的对不上,投影转换是对的,麻烦您看看!
你的鼠标获取的像素位置点point是相对于怎么主窗体,不是相对qmapcontrol的,所以导致获取出来的xy值是错误的,需要在鼠标按下事件里面用qmapcontrol的相对位置去计算一下

原来如此,有关于这部分的示例代码吗?怎么计算的surprise

搞定了,谢谢!
...