2016-10-08 8 views
0

Я хочу показать объекты geoJson в карте OSM, и для этого я использую библиотеки (версия 5.4) и (версия 5.8). Моя активность:Android osm карта с использованием geojson очень медленная

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, карта работает нормально. Я не знаю, где я делаю неправильно.

ответ

0

Возможно, потому что ваш файл GeoJSON содержит множество объектов, занимая время рисования. Если вы можете поделиться им, мы могли бы советовать. Это медленный процесс с эмулятором или физическим устройством?

+0

Мой файл GeoJson не такой большой (около 100 предметов). Приложение работает на физическом устройстве. Если я попытаюсь загрузить этот файл GeoJson в ваш OSMBonusPackTuto или OSMNavigator проект из github таким образом, что я загружаю в свой проект, карта работает нормально. Но на моей проектной карте очень медленно. Тогда я подумал, возможно, это связано с именем пакета с бонусным пакетом, и для тестирования я создал новый проект с именем applicationId (имя пакета) «com.example.osmbonuspacktuto», и мне интересно, что карта работает быстро, даже если при загрузке файла GeoJson. –

0

Андроида док says:

Начиная с Android 3.0 (уровень API 11), то конвейер визуализации Android 2D поддерживает аппаратное ускорение, а это означает, что все операции рисования, которые выполняются на представлении в холсте с помощью GPU. Из-за увеличения ресурсов, необходимых для ускорения аппаратного ускорения, ваше приложение будет потреблять больше оперативной памяти.

Оказалось, что я забыл отключить аппаратное ускорение в своей деятельности, где использовал карту OSM с сотнями элементов GeoJson. Теперь я отключен, и карта работает как шарм.