1

我正在开发一个需要检索彼此相邻的地图的应用程序。谷歌静态地图只允许根据地址(地理编码)或中心(latLng)设置位置。我需要能够获得基于视口(左上纬度,右下纬度)的地图,或者只是通过将相邻地图获取到当前拥有的地图。我试图根据当前的缩放级别和像素大小进行某种数学运算以获取下一个中心,但没有成功。

我的客户将获得营业执照,所以不用担心这些限制。

Thxs 的帮助真的停留在这一点上。欢迎所有建议。

4

2 回答 2

2

在网上找到了答案。原来谷歌地图使用墨卡托投影。在发现这一点之后,数学变得更容易了。我需要代码以确定的缩放级别从像素转换为 latlng。

这是java中的代码:

static final double OFFSET = 268435456;
static final double OFFSET_RADIUS = OFFSET / Math.PI;
static final double MATHPI_180 = Math.PI / 180;
static private final double preLonToX1 = OFFSET_RADIUS * (Math.PI / 180);

public static double LonToX(double lon) {
    return Math.round(OFFSET + preLonToX1 * lon);
}

public static double LatToY(double lat) {
    return Math.round(OFFSET - OFFSET_RADIUS * Math.log((1 + Math.sin(lat * MATHPI_180)) / (1 - Math.sin(lat * MATHPI_180))) / 2);
}

public static double XToLon(double x) {
    return ((Math.round(x) - OFFSET) / OFFSET_RADIUS) * 180 / Math.PI;
}

public static double YToLat(double y) {
    return (Math.PI / 2 - 2 * Math.atan(Math.exp((Math.round(y) - OFFSET) / OFFSET_RADIUS))) * 180 / Math.PI;
}

public static double adjustLonByPixels(double lon, int delta, int zoom) {
    return XToLon(LonToX(lon) + (delta << (21 - zoom)));
}

public static double adjustLatByPixels(double lat, int delta, int zoom) {
    return YToLat(LatToY(lat) + (delta << (21 - zoom)));
}

希望这可以帮助某人。

于 2013-02-14T21:04:11.640 回答
0

使用Map类的方法getBounds和方法。getCentergetZoom

于 2012-12-19T22:37:57.007 回答