C/C++ · 2023年9月21日 0

经纬度和地图瓦片索引的转换

// 经度转X坐标
int LongToTileX(double lon, int z)
{
	return (int)(floor((lon + 180.0) / 360.0 * (1 << z)));
}

// 维度转Y坐标
int LatToTileY(double lat, int z)
{
	double latrad = lat * M_PI / 180.0;
	return (int)(floor((1.0 - asinh(tan(latrad)) / M_PI) / 2.0 * (1 << z)));
}

// X坐标转经度
double TileX2Long(int x, int z)
{
	return x / (double)(1 << z) * 360.0 - 180;
}

// Y坐标转纬度
double TileY2Lat(int y, int z)
{
	double n = M_PI - 2.0 * M_PI * y / (double)(1 << z);
	return 180.0 / M_PI * atan(0.5 * (exp(n) - exp(-n)));
}

转换后可使用一些地图的网站接口下载地图瓦片

https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}