2011-08-30 9 views
6

Estoy usando osmdroid y los mapas descargados de OSM hasta el nivel 16. Me preguntaba si hay alguna manera de que yo pueda hacer que el osmdroid use el mosaico de ese nivel de zoom pero lo dibuje más grande.osmdroid - mostrar los mosaicos más grandes

Lo que pasa es que los mosaicos en ese nivel tienen suficiente detalle para mí, pero se sienten pequeños. He visto otras aplicaciones que usan los mismos niveles de mosaico pero que de algún modo logran hacerlas más grandes.

Gracias

Respuesta

3

No pueden hacer esto sin modificar el código fuente de osmdroid. En este momento, las teselas se muestran con su resolución real, excepto cuando la vista se está animando entre niveles de zoom. Es decir, los mosaicos se cambian cuando la animación está lista y la escala se establece en 1 nuevamente. He intentado algunos trucos para mantener la escala cuando el usuario intenta acercarse más allá del más alto nivel de detalle. Funciona visualmente, pero se rompen todas las funciones que mapean desde los píxeles hasta las coordenadas del mapa, así como parte de la interacción cuando se arrastra el mapa. Por lo tanto, requeriría una modificación más significativa de la fuente. Es factible, pero creo que realmente no vale la pena, a menos que realmente desee contribuir con la modificación del proyecto, y hacerlo de una manera menos hackosa.

-1

Una solución que se mantiene dentro del modelo de trabajo actual de OSMdroid es usar un paquete de manipulación de imágenes como ImageMagick o Photoshop para crear un nuevo conjunto de mosaicos de mapa de bits en el nivel de zoom más alto.

Lo que debes hacer es tomar cada mosaico actual (256x256px), redimensionarlo, doblar tanto el tamaño como el ancho, y luego cortar la imagen en 4 nuevos mosaicos. Guarde cada tesela de acuerdo con la convención de nomenclatura para el nuevo nivel de zoom. La convención de nombres de mapas de teselas es described here, as well as an easy way of getting the 4 new names from the original name

+0

Esto daría lugar a la replicación esencialmente los azulejos en el siguiente nivel de zoom superior. –

+0

En cierto sentido, pero aún así se logra el resultado deseado. – CjS

1

Cloudmade tiene soporte para mosaicos de alta resolución que se ven mucho mejor en los teléfonos actuales en el mercado ahora. Echar un vistazo aquí:

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

me gustaría utilizar los azulejos normales para dispositivos LDPI y MDPI, y utilizar los de alta resolución de IPAP y xhdpi dispositivos

+0

Parece que este proyecto ya no se mantiene para desarrolladores pequeños: http://notes.ericjiang.com/posts/741 – elcuco

0

Se puede utilizar una fuente de azulejos diferentes, por ejemplo M $ Bing. Eso también tiene nombres de calles más grandes.

1

Para resolver completamente su problema, existen dos enfoques. El primero es que usted generará o renderizar mosaicos de mapas por su cuenta mediante un software tipo mapnik. El segundo está usando renderizador en tiempo real basado en vectores en teléfonos móviles como mapsforge. El archivo de configuración o el archivo de estilo es la clave en ambos enfoques.

2

Estoy usando mosaicos sin conexión y solo hice esto para mostrarlos con una resolución 2x. La parte importante es el tamaño de 512 píxeles a pesar de que las baldosas son 256.

myMapView.setTileSource (new XYTileSource ("Mapnik", ResourceProxy.string.offline_mode, 13, 17, 512, ".png", "http://127.0.0.1")); 
+0

Con un tamaño de mosaico diferente, ¿cómo calcula osmdroid la coordenada real del mosaico? – hguser

+0

Si las teselas son 256x256 y configura el origen de la fuente como 512, solo duplicará el tamaño de las teselas. En realidad prefiero poner Leaflet en una vista web ahora sobre osmroid. –

3

La mejor solución que he encontrado para este problema (lo que a mi el día de hoy), es cambiar la escala de la fuente de azulejos (estoy usando mi propia versión de 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); 

la variación de la escala de acuerdo con la densidad de la pantalla es relativamente una buena solución. Durante mi prueba algunas de las imágenes se volvieron un poco borrosas, pero si disminuyes la escala para esa contingencia obtienes un muy buen resultado.

Esta no es mi solución Por cierto, la encontré entre los problemas de OSMDROID en Github. Gracias va al stefangab95.

Cuestiones relacionadas