2012-04-27 2 views
3

Google Tile Wrapper 예제에 따라 osmdroid GoogleTilesOverlay를 사용하여 Google MapView를 구현했습니다. 기본 구글 타일의 크기를 조정하고 osmd 오버레이 크기를 조정하지 않습니다하지만 원활 교체 (핀치를하거나 컨트롤을 통해) 확대 그러나 때osmdroid GoogleTilesOverlay smooth resize zoom

com.google.android.maps.MapView googleMapView; 
    org.osmdroid.google.wrapper.MapView osmdMapView; 
    org.osmdroid.google.overlay.GoogleTilesOverlay tiles; 

    final MapView googleMapView = (com.google.android.maps.MapView.MapView) findViewById(R.id.plan_mapview); 
    osmdMapView = new org.osmdroid.google.wrapper.MapView(gMapView); 

    // snip Provider instantiation etc. 

    overlayTiles = new GoogleTilesOverlay(provider, getApplicationContext()); 
    gMapView.getOverlays().add(overlayTiles); 

나머지에서, 오버레이 타일 고급 렌더링합니다.

결과 : 뷰에 남아있는 타일을 확대하는 경우 겹쳐지기 시작합니다. 반대로 축소하면 각 타일간에 간격이 표시됩니다.

첫 번째 단계는 하위 클래스 GoogleTilesOverlay에서 draw() 메소드를 수정할 수있는 것처럼 보입니다. 하지만 그 다음엔?

열심히 봤와 향해 몇 포인터를 발견했습니다 가) 단락 프로젝터/매트릭스 클래스를 사용) 할 때 애니메이션 B의 중간에 무승부() 메소드에서 확장하는 방법을 결정하는

안타깝게도 나는 안드로이드 API에 대한 전문가가 아니므로 어떤 방법으로 갈 것인지, 그리고 어떻게 솔루션을 구현하는 것이 가장 좋은지 잘 모릅니다.

+0

난 당신이 달성하기 위해 노력하고 있습니다 정확히 무엇을 요청할 수 있습니다? Google지도 안드로이드 API는 정말 가난하고, OSMDroid 훨씬 더 기능을 제공하지만, 왜 당신이 한 번에 화면에 2 x mapViews 가지고하려고하는 거 알아? 그것은 틀린 것처럼 보인다. 나는 OSMDroid를 사용하는 응용 프로그램을 작성하고 로컬 타일 오버레이 등을 사용하여 문제를 해결할 수 있습니다. 따라서 OSMDroid 코드를 깊이 파헤쳐 야했습니다. – rspython

+0

반투명 타일로 기본 (Google)지도 위에 겹쳐져 있습니다. 예를 들어 특정 표식을 강조 표시하는 사전 계산 된 타일 –

답변

2

그리기 방법을 약간 수정해야 GoogleTilesOverlay이됩니다. 그대로

는 두 개의 타일을 얻을 (x,y and x+1,y+1) 픽셀의 차이 빼기, 일정한 크기 (x,y,x+tileSizePx,y+tileSizePx).

쉽고 그것을 할 수있는 기초적인 방법의 사각형을 그립니다. 코드 아래

봐 :

   final GeoPoint geoPointUL = new GeoPoint(
         (int) (Mercator.tile2lat(y, zoomLevel) * 1E6), 
         (int) (Mercator.tile2lon(x, zoomLevel) * 1E6));      

       final GeoPoint geoPointLR = new GeoPoint(
         (int) (Mercator.tile2lat(y+1, zoomLevel) * 1E6), 
         (int) (Mercator.tile2lon(x+1, zoomLevel) * 1E6)); 

       Point pointUL=new Point(), pointLR=new Point(); 
       pj.toPixels(geoPointUL, pointUL); 
       pj.toPixels(geoPointLR, pointLR); 
       tileSizePx = pointLR.x - pointUL.x; 
+0

이것은 속임수입니다! Mercator 클래스는 이제 더 이상 사용되지 않습니다. –

+0

@dwightgunning 당신은 메르카토르 대신 무엇을 사용해야하는지 알고 있습니까? –

+0

아니 대체가 표시되지 않습니다. 3.0.8의 새 코드에서 사용 된 것을 보았습니다. 따라서 제거 할 타임 라인이 정의되어 있지 않습니다. –