webMercator 坐标转换 像素坐标 ,地理坐标和地图坐标相互转换

 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;

}

猜你喜欢

转载自blog.csdn.net/wangjianbo09/article/details/81014312