使用geojson的Android osm地图非常慢

问题描述 投票:0回答:2

我想在OSM地图中显示geoJson对象,为此我使用osmdroid(版本5.4)和osmbonuspack(版本5.8)库。我的活动是:

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中的对象,但是当缩小/缩小(加载时)时,地图的工作速度非常慢。当我关闭加载geoJson时,地图工作正常。我不知道我在哪里做错了。

android geojson osmdroid
2个回答
0
投票

可能是因为您的GeoJSON文件包含大量对象,需要一段时间才能绘制。如果您可以分享,我们可以提供建议。使用模拟器或物理设备会变慢吗?


0
投票

Android doc says

从Android 3.0(API级别11)开始,Android 2D渲染管道支持硬件加速,这意味着在View的画布上执行的所有绘图操作都使用GPU。由于启用硬件加速所需的资源增加,您的应用程序将消耗更多RAM。

事实证明,我忘了在我的活动中禁用硬件加速,我在OSM Map中使用了数百个GeoJson元素。现在我已经禁用了,地图就像魅力一样。

© www.soinside.com 2019 - 2024. All rights reserved.