qt中已知经纬度和行列 如何用qpainter将实际坐标转化为画布坐标画出点
时间: 2024-10-22 18:14:25 浏览: 17
在Qt中,如果你已经知道了实际的经纬度坐标和地图上使用的行列坐标系统,想要在QPainter中绘制对应的点,你需要做以下几个步骤:
1. 获取比例尺和偏移信息:首先,你需要知道当前地图视图的缩放级别以及中心点(通常对应于行列坐标的0,0位置)。这可以通过`QGraphicsScene::transform()` 或 `QMapCanvas::mapFromScene()` 函数获取。
2. 转换经纬度到屏幕坐标:使用地图API提供的函数(如OpenStreetMap、Google Maps等提供的库),根据给定的经纬度(通常是地理坐标系 WGS84),通过地图投影将其转换成地图上使用的平面坐标,这个过程涉及到地图投影和计算。
3. 应用缩放和偏移:将得到的平面坐标应用到当前的图形视图的缩放和偏移上,生成屏幕上需要的像素坐标。这一步可以使用`QPointF`类并结合`QTransform`来进行。
```cpp
// 假设你已经有了经纬度(lat, lon)和场景中心点(sceneCenterX, sceneCenterY)
// 还有地图的缩放因子(scale)和偏移值(offsetX, offsetY)
// 将经纬度转换为平面坐标 (mapCoordX, mapCoordY)
QPointF mapCoord = convertLatLonToMap(lat, lon);
// 应用缩放和平移
QPointF screenCoord = QPointF(mapCoord.x() * scale + sceneCenterX, mapCoord.y() * scale + sceneCenterY) - QPointF(offsetX, offsetY);
```
4. 绘制点:最后,在QPainter中使用`drawPoint()` 或者 `drawEllipse()` 函数,传入屏幕坐标来绘制点。
```cpp
QPainter painter(&view); // view是你的QGraphicsView实例
painter.drawPoint(screenCoord);
```
阅读全文