data 2018 7 12 by WJB
该程序是在Qt项目中编写的,应为用到了一个Qt的QPointF类
#define MapLenght(level) 256*pow(2,(level))
#define WEBMERCATOR_256_MAP_LONG 20037508.342789
#define PI 3.141592653589793
#define WEBERCATOR_256_RESOLUTION(x) ((WEBMERCATOR_256_MAP_LONG * 2)/(256 * (2<<((x)-1))))
#include<QPointF>
QPointF qgs2map(const QPointF & qgs, quint8 zoomLevel)
{
QPointF mapPoint;
double resolution = WEBERCATOR_256_RESOLUTION(zoomLevel);
qreal x = (qreal)(WEBMERCATOR_256_MAP_LONG + (qgs.x()*resolution));
qreal y = (qreal)(WEBMERCATOR_256_MAP_LONG - (qgs.y()*resolution));
mapPoint.setX(x);
mapPoint.setY(y);
return mapPoint;
}
// Moded by WJB 2018 07 12
//,地图坐标与地理坐标之间的转换函数.…
QPointF map211(const QPointF & map)
{
QPointF geoPoint;
qreal x = (qreal)(map.x() / WEBMERCATOR_256_MAP_LONG * 180);
qreal y = (qreal)(map.y() / WEBMERCATOR_256_MAP_LONG * 180);
y = (180 / PI)*(2 * atan(exp(y*PI / 180) - PI / 2));
geoPoint.setX(x);
geoPoint.setY(y);
return geoPoint;
}
QPointF map2qgs(const QPointF & map, quint8 zoomLevel)
{
//Moded bY WJB 2018 07 12
// 地图坐标与场景像素坐标之间的转换函数
QPointF pixPoint;
double resolution = WEBERCATOR_256_RESOLUTION(zoomLevel);
qreal x = (qreal)((WEBMERCATOR_256_MAP_LONG + map.x()) / resolution);
qreal y = (qreal)((WEBMERCATOR_256_MAP_LONG - map.y()) / resolution);
pixPoint.setX(x);
pixPoint.setY(y);
return pixPoint;
}
QPointF ll2map(const QPointF & geo)
{
//Moded by WJB 2018 07 12
//地理坐标与地图坐标之间的转换函数
QPointF mapPoint;
qreal x = (qreal)(geo.x() *WEBMERCATOR_256_MAP_LONG / 180);
qreal y = (qreal)(log(tan(((90 + geo.y())*PI / 360))) / (PI / 180));
y = y*WEBMERCATOR_256_MAP_LONG / 180;
mapPoint.setX(x);
mapPoint.setY(y);
return mapPoint;
}