2016-10-08 44 views
0

我想表明在OSM地圖GeoJSON的對象,併爲此我使用osmdroid(5.4版本)和(版本5.8)庫。我的活動是:從以GeoJSON使用GeoJSON的Android的OSM地圖很慢

public class TempMapActivity extends Activity { 

MapView map; 

KmlDocument mKmlGeoJson; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 
    initMap(); 
} 

private void initMap() { 
    map = (MapView) findViewById(R.id.map); 
    map.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE); 
    map.setBuiltInZoomControls(true); 
    map.setMultiTouchControls(true); 
    IMapController mapController = map.getController(); 
    map.setMinZoomLevel(18); 
    map.setMaxZoomLevel(22); 
    map.getController().setCenter(new GeoPoint(2.9691, 101.7146)); 
    mapController.setZoom(18); 
    setupGeoJson(); 
} 


private void setupGeoJson() { 

    String gJson = null; 
    try { 
     gJson = getGeoString(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    mKmlGeoJson = new KmlDocument(); 
    mKmlGeoJson.parseGeoJSON(gJson); 
    FolderOverlay myOverLay = (FolderOverlay) mKmlGeoJson.mKmlRoot. 
      buildOverlay(map, null, null, mKmlGeoJson); 
    map.getOverlays().add(myOverLay); 
    map.getController().setZoom(16); 
    map.getController().setCenter(new GeoPoint(2.9691, 101.7146)); 
    map.invalidate(); 
} 


private String getGeoString() throws IOException { 
    InputStream is = getResources().openRawResource(R.raw.json_template); 
    Writer writer = new StringWriter(); 
    char[] buffer = new char[1024]; 
    try { 
     Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
     int n; 
     while ((n = reader.read(buffer)) != -1) { 
      writer.write(buffer, 0, n); 
     } 
    } finally { 
     is.close(); 
    } 

    String jsonString = writer.toString(); 
    return jsonString; 
} 

}

對象正在顯示,但縮小/中(當負載)時,地圖是工作非常緩慢。當我關掉加載GeoJSON的,地圖是工作的罰款。我不知道我在做什麼錯。

回答

0

可能是因爲您的GeoJSON的文件包含大量的對象,需要一些時間來繪製。如果您可以分享,我們可以提供建議。 它是用模擬器或物理設備慢?

+0

我的GeoJson文件不是很大(大約100個功能項目)。該應用程序在物理設備上運行。如果我嘗試從Github以你在我的項目中加載的方式加載你的OSMBonusPackTuto或OSMNavigator項目中的GeoJson文件,map工作正常。但在我的項目地圖中非常緩慢。然後我想,也許這是由於包名和bonuspack以及爲了測試我使用applicationId(包名稱)「com.example.osmbonuspacktuto」創建了新項目,並且我想知道即使加載GeoJson文件時地圖工作也很快。 –

0

Android的DOC says

開始在Android 3.0的(API級別11),Android的2D渲染管線支持硬件加速,這意味着那些在View的畫布進行所有的繪圖操作使用GPU。由於啓用硬件加速所需增加的資源,你的應用程序會消耗更多的內存。

事實證明,我忘記了在我的活動中禁用硬件加速,其中使用了帶有數百個GeoJson元素的OSM Map。現在我已經禁用了,地圖就像魅力一樣。