//方法一 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}; }