C语言实现EPSG:4326和EPSG:3857的互转

EPSG:4326是我们熟悉的WGS84,EPSG:3857又称EPSG:900913,是Pseudo-Mercator,互联网地图一般都采用EPSG:3857

参考GitHub项目Gcoord:https://github.com/hujiulong/gcoord

#include<stdio.h>
#include<math.h>
#define PI 3.1415926535897932
double D2R = PI / 180;
double R2D = 180 / PI;
double A = 6378137;
void ESPG3857_To_ESPG4326(double x, double y, double *lon, double *lat){
	*lon = x * R2D / A;
	*lat = (PI * 0.5 - 2.0 * atan(exp(-y / A))) * R2D;
}
void ESPG4326_To_ESPG3857(double lon, double lat, double *x, double *y){
	double adjusted = abs(lon) <= 180 ? lon : lon - (lon < 0 ? -1 : 1) *360;
	*x = A * adjusted * D2R;
	*y = A * log(tan(PI * 0.25 + 0.5 * lat * D2R));
}
int main(){
	double x, y, lon, lat;
	lon = 121.98625416795976;
	lat = 39.153783297406605;
	ESPG4326_To_ESPG3857(lon, lat, &x, &y);
	printf("%.14lf %.14lf\n", x, y);
	getchar(); 
} 

猜你喜欢

转载自blog.csdn.net/qq_42276781/article/details/120515458