前文链接:QGraphicsView实现简易地图11『指定层级-定位坐标』
提供地图平移与偏移功能。地图平移是指将地图的中心点更改为给定的点,即移动地图到指定位置。地图偏移是指将当前视口内的地图向上/下/左/右/进行微调,这里偏移视口宽/高的四分之一。
1、动态演示效果
2、平移与偏移代码
void WHMaPView::panTo(const QPointF &geoCenter) { m_geoCoord = GeoCoord(geoCenter.x(), geoCenter.y()); // 经纬度坐标转场景坐标、视图定位到中心点 QPointF offsetPos = QPointF(viewport()->width() / 2.0, viewport()->height() / 2.0); QPointF scenePos = MapUtility::sceneCoordFromGeoCoord(m_geoCoord, m_cURLevel); horizontalScrollBar()->setValue(scenePos.x() - offsetPos.x()); verticalScrollBar()->setValue(scenePos.y() - offsetPos.y()); moveScene(); emit geoCoordChanged(m_geoCoord); } void WHMapView::pantop() { double offsetValue = 4.0; QPointF scenePos = mapToScene(viewport()->width() / 2.0, viewport()->height() / offsetValue); m_geoCoord = MapUtility::geoCoordFromScene(scenePos, m_curLevel); verticalScrollBar()->setValue(verticalScrollBar()->value() + viewport()->height() / offsetValue); moveScene(); emit geoCoordChanged(m_geoCoord); } void WHMapView::panBottom() { double offsetValue = 4.0; QPointF scenePos = mapToScene(viewport()->width() / 2.0, viewport()->height() / offsetValue); m_geoCoord = MapUtility::geoCoordFromScene(scenePos, m_curLevel); verticalScrollBar()->setValue(verticalScrollBar()->value() - viewport()->height() / offsetValue); moveScene(); emit geoCoordChanged(m_geoCoord); } void WHMapView::panLeft() { double offsetValue = 4.0; QPointF scenePos = mapToScene(viewport()->width() / offsetValue, viewport()->height() / 2.0); m_geoCoord = MapUtility::geoCoordFromScene(scenePos, m_curLevel); horizontalScrollBar()->setValue(horizontalScrollBar()->value() + viewport()->width() / offsetValue); moveScene(); emit geoCoordChanged(m_geoCoord); } void WHMapView::panRight() { int offsetValue = 4; QPointF scenePos = mapToScene(viewport()->width() / offsetValue, viewport()->height() / 2); m_geoCoord = MapUtility::geoCoordFromScene(scenePos, m_curLevel); horizontalScrollBar()->setValue(horizontalScrollBar()->value() - viewport()->width() / offsetValue); moveScene(); emit geoCoordChanged(m_geoCoord); }