2012-12-19 1 views
1

Je développe une application qui a besoin de récupérer des cartes adjacentes les unes aux autres. Les cartes statiques Google permettent uniquement de définir l'emplacement en fonction d'une adresse (géocodage) ou d'un centre (latLng). Je dois pouvoir obtenir une carte basée sur une fenêtre (en haut à gauche, en bas à droite) ou simplement en obtenant la carte adjacente à celle que j'ai actuellement. J'ai essayé de faire un peu de calcul pour obtenir le prochain centre basé sur le niveau de zoom actuel et la taille de pixel sans succès.Obtenir Google Maps via viewport (centre ou pas géocodage) ou d'obtenir une carte adjacente

Mon client obtenir une licence d'entreprise, alors ne vous inquiétez pas ces restrictions.

Thxs pour l'aide vraiment collé sur celui-ci. Toutes les suggestions sont les bienvenues.

Répondre

2

a trouvé la réponse sur le web. Il s'avère que Google Maps utilise la projection Mercator. Après avoir découvert que les mathématiques sont devenues plus faciles. J'avais besoin du code pour traduire des pixels à latlng à un niveau de zoom déterminé.

Voici le code en 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))); 
} 

Hope this helps quelqu'un.

0

Utilisez les méthodes getBounds, getCenter et getZoom de la classe Map.

+0

qui me obtenir la fenêtre courante et niveau de zoom. Toujours aucune idée de comment obtenir le centre de la carte adjacente. –

+0

méthode d'utilisation getCenter – HugoLemos

+0

Je sais comment obtenir le centre d'une carte que je l'ai déjà (en utilisant getCenter comme vous le suggérez) ma question est de savoir comment obtenir le centre de la carte adjacente –