osmdroid - показать плитки больше - PullRequest
6 голосов
/ 30 августа 2011

Я использую osmdroid и карты, загруженные из OSM до уровня 16. Мне было интересно, есть ли способ заставить osmdroid использовать плитку с этого уровня масштабирования, но нарисовать ее побольше.

Дело в том, что плитки на этом уровне имеют достаточно деталей для меня, но нарисованы мелкими. Я видел, как некоторые другие приложения используют те же уровни листов, но каким-то образом удается увеличить их.

Спасибо

Ответы [ 8 ]

4 голосов
/ 10 сентября 2014

Лучшее решение, которое я нашел для этой проблемы (которое у меня было сегодня ранее), это изменить масштабирование в источнике плиток (я использую свою собственную версию 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);

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

Кстати, это не мое решение, я нашел его среди проблем с OSMDROID на Github . Спасибо stefangab95 .

3 голосов
/ 24 ноября 2011

Вы не можете сделать это без изменения исходного кода osmdroid. Прямо сейчас плитки отображаются с их фактическим разрешением, кроме случаев, когда представление анимируется между уровнями масштабирования. То есть плитки переключаются, когда анимация завершена, и масштаб снова устанавливается на 1. Я попробовал некоторые приемы, чтобы сохранить масштабирование, когда пользователь пытается увеличить масштаб за пределы самого высокого уровня детализации. Это работает визуально, но все функции, которые отображаются от пикселей до координат карты, а также некоторые взаимодействия при перетаскивании карты, ломаются. Следовательно, потребуется более значительная модификация источника. Это выполнимо, но я думаю, что на самом деле это не стоит того, если вы действительно не хотите внести изменения в проект и сделать это менее хакерским способом.

2 голосов
/ 03 января 2016

mMapview.setTilesScaledToDpi (правда)

https://github.com/osmdroid/osmdroid/blob/master/osmdroid-android/src/main/java/org/osmdroid/views/MapView.java#L307

это должно сработать

2 голосов
/ 03 ноября 2013

Я использую автономные плитки и просто сделал это, чтобы отобразить их в 2x разрешении.Важной частью является размер 512 пикселей, хотя плитки имеют размер 256.

myMapView.setTileSource  (new XYTileSource ("Mapnik", ResourceProxy.string.offline_mode, 13, 17, 512, ".png", "http://127.0.0.1"));
1 голос
/ 09 августа 2013

Чтобы полностью решить вашу проблему, существует два подхода.Во-первых, вы генерируете или визуализируете листы карты самостоятельно с помощью программного обеспечения, похожего на mapnik.Второй использует векторную визуализацию в реальном времени на мобильном телефоне, например mapsforge.Файл конфигурации или файл стиля является ключом в обоих этих подходах.

1 голос
/ 08 июня 2012

Cloudmade имеет поддержку плиток высокого разрешения, которые выглядят намного лучше на современных телефонах, представленных на рынке.Посмотрите здесь:

http://developers.cloudmade.com/projects/tiles/documents

Я бы использовал обычные тайлы для устройств ldpi и mdpi, а также с высоким разрешением для устройств hdpi и xhdpi

0 голосов
/ 08 августа 2012

Вы можете использовать другой источник плиток, например M $ Bing.У этого также есть большие названия улиц.

0 голосов
/ 22 марта 2012

Один из обходных путей, который остается в текущей рабочей модели OSMdroid, - это использование пакета манипулирования изображениями, такого как ImageMagick или Photoshop, для создания нового набора растровых плиток с более высоким уровнем масштабирования.

Что вам нужно сделать, это взять каждую текущую плитку (256x256px), изменить ее размер, удвоить размер и ширину, а затем разрезать изображение на 4 новых плитки. Сохраните каждую плитку в соответствии с соглашением об именах для нового уровня масштабирования. Здесь описана схема именования карты тайлов , а также простой способ получить 4 новых имени от исходного названия

...