2014-03-09 5 views
8

Я пытаюсь реализовать MapView, используя библиотеку osmdroid.osmdroid - более высокий уровень масштабирования?

Однако в настоящее время, насколько мне кажется, я могу увеличить масштаб, недостаточно для моих целей.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Setup map view: 
    mapView = new MapView(this, 256); 
    setContentView(mapView); 

    // Parse parameters 
    Intent intent = getIntent(); 

    center  = intent.getDoubleArrayExtra(INITIAL_CENTER); 
    multiTouch = intent.getBooleanExtra(MULTI_TOUCH, DEFAULT_MULTI_TOUCH); 
    zoomButtons = intent.getBooleanExtra(ZOOM_BUTTONS, DEFAULT_ZOOM_BUTTONS); 
    zoomLevel = intent.getIntExtra(ZOOM_LEVEL, DEFAULT_ZOOM_LEVEL); 

    if (center == null) 
     center = DEFAULT_INITIAL_CENTER; 

    // Applying parameters 
    mapView.setClickable(true); 
    mapView.setMultiTouchControls(multiTouch); 
    mapView.setBuiltInZoomControls(zoomButtons); 
    mapView.getController().setZoom(zoomLevel); 
    mapView.getController().setCenter(new GeoPoint(center[0], center[1])); 
    mapView.setTileSource(TileSourceFactory.MAPQUESTOSM); 
    mapView.setMaxZoomLevel(18); 

    // Show current location coordinates 
    Toast.makeText(
      getApplicationContext(), 
      "Latitude:\t\t" + center[0] + "\n" + 
      "Longitude:\t" + center[1], 
      Toast.LENGTH_LONG).show(); 

    // Offline maps: 
    mapView.setUseDataConnection(true); 

} 

enter image description here

Есть в любом случае для дальнейшего увеличения (я уже попытался установить уровень масштабирования до 18)?

+0

Это фиксированное для меня: http://stackoverflow.com/questions/16222825/setting-min-and-max-zoom-levels/16352186#16352186 –

ответ

11

Максимальный уровень масштабирования определяется используемым вами источником плитки. Если вы используете один из предоставленных онлайн-источников, таких как MAPNIK, тогда максимальный уровень масштабирования устанавливается на 18, потому что это максимальный уровень масштабирования, который создает источник плитки для плитки. Если вы хотите увеличить масштаб, вам нужно использовать источник плитки, который обеспечивает более высокие уровни масштабирования.

Если вы просто хотите, чтобы отменить максимальный уровень масштабирования, независимо от уровня масштабирования источника Tile, то вы можете просто позвонить:

mapView.setMaxZoomLevel(19); 

установить максимальный уровень масштабирования до 19, но опять же источник плитка может просто не имеют плитки на этом уровне масштабирования.

+1

Есть ли поставщик плитки, который предлагает Увеличить Уровень выше 18? @kurtzmarc – trullallero

+0

Он работает, если плитки были загружены, прежде чем я увеличу до уровня 19. Если я увеличиваю до уровня 19 до того, как плитки будут загружены, плитки не будут загружены. Есть ли обходной путь? – ivan

4

У меня была аналогичная проблема с этим при использовании нового HTC One сегодня. Из-за очень высокой плотности экрана максимальный уровень масштабирования отображал фрагменты карты таким образом, чтобы названия улиц и места почти не читались (я использую OpenStreetMap). Лучшее решение, которое я нашел для масштабирования изображения в источнике плитки:

final float scale = getBaseContext().getResources().getDisplayMetrics().density; 
final int newScale = (int) (256 * scale); 
String[] OSMSource = new String[2]; 
OSMSource[0] = "http://a.tile.openstreetmap.org/"; 
OSMSource[1] = "http://b.tile.openstreetmap.org/"; 
XYTileSource MapSource = new XYTileSource("OSM", null, 1, 18, newScale, ".png", OSMSource); 
map.setTileSource(MapSource); 

Изменяя масштаб в соответствии с плотностью экрана является относительно хорошим решением, если вы добавляете некоторые непредвиденные обстоятельства, чтобы предотвратить плитки становится слишком размыто ,

Это не мое решение BTW, я нашел его среди выпусков OSMDROID на Github. Спасибо, stefangab95.

РЕДАКТИРОВАТЬ: Если плотность экрана слишком высока, то масштабирование плитки может также иметь отрицательное воздействие решений маршрутов пути (сгенерированный с помощью RoadManager) невидимых. Эта проблема была зарегистрирована как проблема на OSMBonusPack web site - No Polyline drawn. Пока нет разрешения.

7

Для всех, кто ищет для приготовления раствора для лучшего масштабирования плитки, osmdroid теперь поставляется с использованием встроенной функции называется:

setTilesScaledDpi(boolean) 

Функция находится в классе MapView.

+1

он работает, но изображение карты размыто. – ivan

+0

. Вы можете просто использовать код за методом setTitleScaledDpi и настроить коэффициент «256» на вашу потребность – gswierczynski

Смежные вопросы