2017-09-05 2 views
0

마커, 폴리 라인, 다각형 및 일부 클릭 수신기와 같은 옵션으로 안드로이드지도 앱을 제작해야하는 경우가 있습니다. 앱에서 Google API를 사용하면 안되며 대신 OSM 데이터를 사용할 수 있습니다. 나는 맞춤형 타일 서버를 가지고 있으며이를 앱에 통합하고자한다. 나는 내가 필요한 것을 비슷하게 제공하는 Mapquest를 발견했다. 내가 알아야 할 것은 내가 자체 타일 서버를 통합 할 수 있는지 여부입니다. 도움이 될 것입니다지도 및 점수에 대한 장단점

+2

[Ask]을 읽으십시오. 현재 코드에 특정 문제가있는 경우 해당 특정 문제에 대해 질문하십시오. 현재 코드가 정확히 작동하고 더 효율적으로 만들고 싶다면 [Code Review] (http://codereview.stackexchange.com/)의 리뷰 작성자에게 제출하십시오. 사람들이 당신을 위해 그것을 쓰길 기대한다면, 당신은 잘못된 사이트에 있습니다. 이것은 우리가 서로 돕는 곳이지만, 우리는 당신을 위해 그것을하지 않습니다. 스택 오버플로에 대한 자세한 내용은 [정보]를 확인하십시오. 또한 질문에 대한 예를 제시하는 방법을 보려면 [mcve]를 확인하십시오. – Mike

답변

2

Mapquest는 OSMdroid를 사용하여 자연스럽게 기본 맵으로 통합됩니다. 그런 말로하면 일하기 위해서는 열쇠가 필요합니다. 아래는베이스 맵 스위치 (베이스 맵과 스위치에 대한 색인을 받음)입니다. 베이스 맵 간을 쉽게 전환 할 수 있습니다 :

public boolean mapTileServerSwap() { 
    boolean flagOK = false; 
    String[] urlArray = {""}; 
    int mapTileServer = SessionPreferences.mapTileServer; 
    switch (mapTileServer) { 
     case(0): 
     default: 
      mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE); 
      flagOK = true; 
      break; 
     case(1): 
      urlArray[0] = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/"; 
      mapView.setTileSource(new OnlineTileSourceBase("ArcGIS Online", null, 0, 18, 256, "", 
        urlArray) { 
       @Override 
       public String getTileURLString(MapTile aTile) { 
        String mImageFilenameEnding = ".png"; 
        return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX() 
          + mImageFilenameEnding; 
       } 
      }); 
      flagOK = true; 
      break; 
     case(2): 
      urlArray[0] = "http://basemap.nationalmap.gov/ArcGIS/rest/services/USGSTopo/MapServer/tile/"; 
      mapView.setTileSource(new OnlineTileSourceBase("USGS Topo", null, 0, 18, 256, "", 
        urlArray) { 
       @Override 
       public String getTileURLString(MapTile aTile) { 
        String mImageFilenameEnding = ".png"; 
        return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX() 
          + mImageFilenameEnding; 
       } 
      }); 
      flagOK = true; 
      break; 
     case(3): 
      mapView.setTileSource(TileSourceFactory.MAPQUESTAERIAL); 
      flagOK = true; 
      break; 
     case(4): 
      mapView.setTileSource(TileSourceFactory.MAPQUESTOSM); 
      flagOK = true; 
      break; 
     case(5): 
      //TODO 20160509 
      // fix copyright and attributions for STAMEN! 
      urlArray[0] = "http://a.tile.stamen.com/watercolor/"; 
      mapView.setTileSource(new XYTileSource("Stamen WaterColor", null, 0, 18, 256, ".jpg", 
        urlArray)); 
      flagOK = true; 
      break; 
     case(6): 
      urlArray[0] = "http://a.stamen.com/terrain/"; 
      mapView.setTileSource(new XYTileSource("Stamen Terrain", null, 0, 18, 256, ".jpg", 
        urlArray)); 
      flagOK = true; 
      break; 
    } 
    return flagOK; 
} 
+0

내 타일 서버가 XYZ.png 형식 예 : http://tile.openstreetmap.org/{z}/{x}/{y}.png "그리고 내 앱과 통합해야합니다. 위의 구현 코드는 https://drive.google.com/open?id=0ByXacZESDmJRTzdKWjR6WG5aQW8입니다. 도와주세요, – himagaran

+0

문제는 무엇입니까? XYZ 형식은 osmdroid의 표준 형식입니다. – scai

+0

@scai mapquest를 사용하는 대신 내 타일 서버를 내 소스 코드에 연결하는 방법을 실제로 알아야합니다. – himagaran