2012-12-19 2 views
1

서로 인접한지도를 가져와야하는 애플리케이션을 개발 중입니다. Google 정적지도는 주소 (지오 코딩) 또는 센터 (latLng)를 기반으로 위치를 설정할 수 있습니다. 나는 뷰포트 (top-left latlng, bottom-right latlng)를 기반으로 한 맵을 얻거나 단순히 현재 가지고있는 맵에 인접한 맵을 가져 와서 맵을 얻을 수 있어야합니다. 나는 현재의 확대/축소 수준과 픽셀 크기를 기반으로 다음 센터를 얻기 위해 몇 가지 유형의 수학을 시도했지만 성공하지 못했습니다.뷰포트를 통해 Google지도 가져 오기 (중심 또는 지오 코딩이 아님) 또는 인접지도 가져 오기

클라이언트가 비즈니스 라이센스를 취득하므로 이러한 제한 사항에 대해 걱정할 필요가 없습니다.

정말이 도움말에 집착 한 Thx입니다. 모든 제안을 환영합니다.

답변

2

웹에서 대답을 찾았습니다. Google지도는 Mercator 투영법을 사용합니다. 그걸 발견 한 후에는 수학이 쉬워졌습니다. 결정형 줌 레벨에서 픽셀을 latlng로 변환하는 코드가 필요했습니다. 이 사람을 도움이

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))); 
} 

희망 :

는 자바 코드입니다.

0

Map 클래스의 getBounds, getCentergetZoom 클래스를 사용하십시오.

+0

그러면 현재 뷰포트와 줌 레벨을 얻을 수 있습니다. 인접한지도의 중심을 얻는 방법에 대한 아이디어는 아직 없습니다. –

+0

사용 방법 getCenter – HugoLemos

+0

내가 이미 가지고있는지도의 중심을 얻는 방법을 알고있다. (당신이 제안한대로 getCenter를 사용한다.) 나의 질문은 어떻게 인접한지도의 중심을 얻는가이다. –

관련 문제