1

互いに隣接するマップを取得する必要があるアプリケーションを開発しています。Google の静的マップでは、住所 (ジオコーディング) または中心 (latLng) に基づいて位置を設定することしかできません。ビューポート (左上の latlng、右下の latlng) に基づいてマップを取得するか、単に隣接するマップを現在持っているマップに取得する必要があります。現在のズームレベルとピクセルサイズに基づいて次の中心を取得するために、ある種の数学を試みましたが、成功しませんでした。

私のクライアントはビジネスライセンスを取得するので、それらの制限について心配する必要はありません.

助けてくれてありがとう、本当にこれに固執しました。すべての提案を歓迎します。

4

2 に答える 2

2

Webで答えを見つけました。Google マップはメルカトル図法を使用していることがわかりました。それを見つけた後、数学はより簡単になりました。明確なズームレベルでピクセルから緯度経度に変換するコードが必要でした。

これは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 に答える