在 python 中,我想将 lat/lng(在 epsg 4326 中)转换为谷歌地图像素中的 x、y(假设最接近的缩放级别)。
pyproj
让我使用如下代码在投影空间之间进行转换:
>>> p1 = pyproj.Proj(init='epsg:4326')
>>> p2 = pyproj.Proj(init='epsg:3857')
>>> pyproj.transform(p1, p2, 10, 10)
>>> pyproj.transform(p1, p2, 10, 10)
(1113194.9079327343, 1118889.9748579597)
我不确定的是用于获取 x、y 像素的正确投影。
此页面上有转换的 PHP 实现:http: //www.appelsiini.net/2008/11/introduction-to-marker-clustering-with-google-maps
define('OFFSET', 268435456);
define('RADIUS', 85445659.4471); /* $offset / pi() */
function lonToX($lon) {
return round(OFFSET + RADIUS * $lon * pi() / 180);
}
function latToY($lat) {
return round(OFFSET - RADIUS *
log((1 + sin($lat * pi() / 180)) /
(1 - sin($lat * pi() / 180))) / 2);
}
与其在 python 中手动编码转换,我更愿意使用 pyproj,因为它会更灵活,并且更容易反转转换。
这些是实现在样本点 (10, 10) 上给出的值:
>>> lon_to_x(10)
283348536.88889694
>>> lat_to_y(10)
253446080.30134577