在谷歌地图上将lat / lng投影到像素x,y

时间:2012-06-01 14:35:08

标签: python google-maps gis proj4

在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

0 个答案:

没有答案