|
- //方法一
- PointD latLng2WebMercator(double lng, double lat)
- {
- auto earthRad = 6378137.0;
- auto x = lng * PI / 180 * earthRad;
- auto a = lat * PI / 180;
- auto y = earthRad / 2 * std::log((1.0 + std::sin(a)) / (1.0 - std::sin(a)));
- return PointD {x, y};
- }
-
- //方法二
- PointD latLng2WebMercator2(double lng, double lat)
- {
- auto x = lng *20037508.34/180;
- auto y = std::log(std::tan((90+lat)*PI/360))/(PI/180);
- y = y *20037508.34/180;
- return PointD {x, y};
- }
-
- PointD webMercator2LngLat(double x, double y)
- {
- auto lng = x / 20037508.34 * 180;
- auto lat = y / 20037508.34 * 180;
- lat = 180 / PI * (2 * std::atan(std::exp(lat * PI / 180)) - PI / 2);
- return PointD {lng, lat};
- }
|