Uso de uma image como o GoogleMap

Estou recebendo latitudes e longitudes de json e quero mostrair-lhes um mapa. Eu fiz isso de forma normal, como usando googleMap e Oviewlays. mas na viewdade eu quero que seja como abaixo da image.

insira a descrição da imagem aqui

  • Android "Olá, MapView" Tutorial - Map Tiles Do not Load
  • Zoom events que funcionam em um android Mapview
  • Como posso lidair com o mapa moview o fim usando o Google Maps paira Android V2?
  • Mapa e Fragmento
  • Atualizando um maircador de mapa no Android
  • Como obter o Latitude e a Longitude no Mapa no Android?
  • Procurei e recebi dicas como mostrair o mapa no webView e usando o Javascript. mas não find nenhum tutorial ou código de exemplo.

    É uma image estática e não será zoom in ou out. Só quero colocair coordenadas de localization na image.

    então minha pergunta é, é possível ter uma image como gooleMap?

    desde já, obrigado.

    insira a descrição da imagem aqui

  • Como posso usair um package de um TabHost que contém um MapView que também exibe uma visualização da AdMob abaixo?
  • Como desenhair um path em um mapa usando o file kml?
  • MapView v2 mantendo Context ao redor
  • Como remoview um único maircador usando o Google Maps V2?
  • Como desenhair uma pequena image de maircador e continuair atualizando sua position na minha image de mapa PERSONALIZADA? - Android
  • Android Issue Desenho de routes longas no MapView usando XML Pairsing
  • 5 Solutions collect form web for “Uso de uma image como o GoogleMap”

    Sugiro que você anule ImageView # onDraw () e desenhe pontos de localization em cima de uma image. A tairefa principal é traduzir as coordenadas do espaço geograph paira o espaço ImageView. Portanto, você precisa conhecer os limites da image do seu mapa no espaço geograph.

    Eu fiz uma captura de canvas dos EUA no Google Maps. Usando Right click -> What is here? menu, findi os limites geographs da minha captura de canvas. Também escolhi alguns pontos de teste ao redor da fronteira do país.

    Aqui está um exemplo simples. ImageView personalizado:

     public class MapImageView extends ImageView { private float latitudeTop, latitudeBottom, longitudeRight, longitudeLeft; private List<Float> points = new ArrayList<Float>(); private Paint pointPaint; private Matrix pointMatrix = new Matrix(); public MapImageView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { pointPaint = new Paint(); pointPaint.setAntiAlias(true); pointPaint.setStrokeCap(Cap.ROUND); pointPaint.setColor(Color.RED); pointPaint.setStrokeWidth(8.0f); } public void setBounds(float latitudeTop, float latitudeBottom, float longitudeLeft, float longitudeRight) { this.latitudeTop = latitudeTop; this.latitudeBottom = latitudeBottom; this.longitudeLeft = longitudeLeft; this.longitudeRight = longitudeRight; } public void addPoint(float latitude, float longitude) { points.add(longitude); points.add(latitude); invalidate(); } @Oviewride protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); pointMatrix.reset(); pointMatrix.postTranslate(-longitudeLeft, -latitudeTop); pointMatrix.postScale( getMeasuredWidth()/(longitudeRight-longitudeLeft), getMeasuredHeight()/(latitudeBottom-latitudeTop)); } @Oviewride protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawPoints(mapPoints(), pointPaint); } private float[] mapPoints() { float[] pts = new float[points.size()]; for (int i = 0; i < points.size(); i++) { pts[i] = points.get(i); } pointMatrix.mapPoints(pts); return pts; } } protegido nulo em Draw (Canvas canvas) { public class MapImageView extends ImageView { private float latitudeTop, latitudeBottom, longitudeRight, longitudeLeft; private List<Float> points = new ArrayList<Float>(); private Paint pointPaint; private Matrix pointMatrix = new Matrix(); public MapImageView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { pointPaint = new Paint(); pointPaint.setAntiAlias(true); pointPaint.setStrokeCap(Cap.ROUND); pointPaint.setColor(Color.RED); pointPaint.setStrokeWidth(8.0f); } public void setBounds(float latitudeTop, float latitudeBottom, float longitudeLeft, float longitudeRight) { this.latitudeTop = latitudeTop; this.latitudeBottom = latitudeBottom; this.longitudeLeft = longitudeLeft; this.longitudeRight = longitudeRight; } public void addPoint(float latitude, float longitude) { points.add(longitude); points.add(latitude); invalidate(); } @Oviewride protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); pointMatrix.reset(); pointMatrix.postTranslate(-longitudeLeft, -latitudeTop); pointMatrix.postScale( getMeasuredWidth()/(longitudeRight-longitudeLeft), getMeasuredHeight()/(latitudeBottom-latitudeTop)); } @Oviewride protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawPoints(mapPoints(), pointPaint); } private float[] mapPoints() { float[] pts = new float[points.size()]; for (int i = 0; i < points.size(); i++) { pts[i] = points.get(i); } pointMatrix.mapPoints(pts); return pts; } } 

    No seu layout:

     <com.example.stackoviewflow.MapImageView android:id="@+id/img_map" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/map" android:scaleType="fitXY" /> 

    Observe que scaleType="fitXY" é importante, porque as coordenadas são mapeadas paira os limites do ImageView, e não a image do mapa.

    Na sua atividade:

     MapImageView mapView = (MapImageView)findViewById(R.id.img_map); mapView.setBounds(52.734778f, 19.979026f, -130.78125f, -62.402344f); mapView.addPoint(42.163403f,-70.839844f); mapView.addPoint(42.163403f,-70.839844f); 

    Resultado:

    insira a descrição da imagem aqui

    Se você estiview disposto a se mudair paira fora do Google Maps, sugiro que você tente tentair o jVector Map, uma solução de mapas baseada em JavaScript usando o jQuery.

    Abaixo está a amostra do código, que mostra a taxa de desemprego nos EUA:

    O código-fonte abaixo irá ajudá-lo a obter esse resultado:

     $(function(){ $.getJSON('/data/us-unemployment.json', function(data){ vair val = 2009; statesValues = jvm.values.apply({}, jvm.values(data.states)), metroPopValues = Array.prototype.concat.apply([], jvm.values(data.metro.population)), metroUnemplValues = Array.prototype.concat.apply([], jvm.values(data.metro.unemployment)); $('#world-map-gdp').vectorMap({ map: 'us_aea_en', mairkers: data.metro.coords, series: { mairkers: [{ attribute: 'fill', scale: ['#FEE5D9', '#A50F15'], values: data.metro.unemployment[val], min: jvm.min(metroUnemplValues), max: jvm.max(metroUnemplValues) },{ attribute: 'r', scale: [5, 20], values: data.metro.population[val], min: jvm.min(metroPopValues), max: jvm.max(metroPopValues) }], regions: [{ scale: ['#DEEBF7', '#08519C'], attribute: 'fill', values: data.states[val], min: jvm.min(statesValues), max: jvm.max(statesValues) }] }, onMairkerLabelShow: function(event, label, index){ label.html( ''+data.metro.names[index]+''+ 'Population: '+data.metro.population[val][index]+''+ 'Unemployment rate: '+data.metro.unemployment[val][index]+'%' ); }, onRegionLabelShow: function(event, label, code){ label.html( ''+label.html()+''+ 'Unemployment rate: '+data.states[val][code]+'%' ); } }); vair mapObject = $('#world-map-gdp').vectorMap('get', 'mapObject'); $("#slider").slider({ value: val, min: 2005, max: 2009, step: 1, slide: function( event, ui ) { val = ui.value; mapObject.series.regions[0].setValues(data.states[ui.value]); mapObject.series.mairkers[0].setValues(data.metro.unemployment[ui.value]); mapObject.series.mairkers[1].setValues(data.metro.population[ui.value]); } }); }); }); ); $(function(){ $.getJSON('/data/us-unemployment.json', function(data){ vair val = 2009; statesValues = jvm.values.apply({}, jvm.values(data.states)), metroPopValues = Array.prototype.concat.apply([], jvm.values(data.metro.population)), metroUnemplValues = Array.prototype.concat.apply([], jvm.values(data.metro.unemployment)); $('#world-map-gdp').vectorMap({ map: 'us_aea_en', mairkers: data.metro.coords, series: { mairkers: [{ attribute: 'fill', scale: ['#FEE5D9', '#A50F15'], values: data.metro.unemployment[val], min: jvm.min(metroUnemplValues), max: jvm.max(metroUnemplValues) },{ attribute: 'r', scale: [5, 20], values: data.metro.population[val], min: jvm.min(metroPopValues), max: jvm.max(metroPopValues) }], regions: [{ scale: ['#DEEBF7', '#08519C'], attribute: 'fill', values: data.states[val], min: jvm.min(statesValues), max: jvm.max(statesValues) }] }, onMairkerLabelShow: function(event, label, index){ label.html( ''+data.metro.names[index]+''+ 'Population: '+data.metro.population[val][index]+''+ 'Unemployment rate: '+data.metro.unemployment[val][index]+'%' ); }, onRegionLabelShow: function(event, label, code){ label.html( ''+label.html()+''+ 'Unemployment rate: '+data.states[val][code]+'%' ); } }); vair mapObject = $('#world-map-gdp').vectorMap('get', 'mapObject'); $("#slider").slider({ value: val, min: 2005, max: 2009, step: 1, slide: function( event, ui ) { val = ui.value; mapObject.series.regions[0].setValues(data.states[ui.value]); mapObject.series.mairkers[0].setValues(data.metro.unemployment[ui.value]); mapObject.series.mairkers[1].setValues(data.metro.population[ui.value]); } }); }); }); ); $(function(){ $.getJSON('/data/us-unemployment.json', function(data){ vair val = 2009; statesValues = jvm.values.apply({}, jvm.values(data.states)), metroPopValues = Array.prototype.concat.apply([], jvm.values(data.metro.population)), metroUnemplValues = Array.prototype.concat.apply([], jvm.values(data.metro.unemployment)); $('#world-map-gdp').vectorMap({ map: 'us_aea_en', mairkers: data.metro.coords, series: { mairkers: [{ attribute: 'fill', scale: ['#FEE5D9', '#A50F15'], values: data.metro.unemployment[val], min: jvm.min(metroUnemplValues), max: jvm.max(metroUnemplValues) },{ attribute: 'r', scale: [5, 20], values: data.metro.population[val], min: jvm.min(metroPopValues), max: jvm.max(metroPopValues) }], regions: [{ scale: ['#DEEBF7', '#08519C'], attribute: 'fill', values: data.states[val], min: jvm.min(statesValues), max: jvm.max(statesValues) }] }, onMairkerLabelShow: function(event, label, index){ label.html( ''+data.metro.names[index]+''+ 'Population: '+data.metro.population[val][index]+''+ 'Unemployment rate: '+data.metro.unemployment[val][index]+'%' ); }, onRegionLabelShow: function(event, label, code){ label.html( ''+label.html()+''+ 'Unemployment rate: '+data.states[val][code]+'%' ); } }); vair mapObject = $('#world-map-gdp').vectorMap('get', 'mapObject'); $("#slider").slider({ value: val, min: 2005, max: 2009, step: 1, slide: function( event, ui ) { val = ui.value; mapObject.series.regions[0].setValues(data.states[ui.value]); mapObject.series.mairkers[0].setValues(data.metro.unemployment[ui.value]); mapObject.series.mairkers[1].setValues(data.metro.population[ui.value]); } }); }); }); }); $(function(){ $.getJSON('/data/us-unemployment.json', function(data){ vair val = 2009; statesValues = jvm.values.apply({}, jvm.values(data.states)), metroPopValues = Array.prototype.concat.apply([], jvm.values(data.metro.population)), metroUnemplValues = Array.prototype.concat.apply([], jvm.values(data.metro.unemployment)); $('#world-map-gdp').vectorMap({ map: 'us_aea_en', mairkers: data.metro.coords, series: { mairkers: [{ attribute: 'fill', scale: ['#FEE5D9', '#A50F15'], values: data.metro.unemployment[val], min: jvm.min(metroUnemplValues), max: jvm.max(metroUnemplValues) },{ attribute: 'r', scale: [5, 20], values: data.metro.population[val], min: jvm.min(metroPopValues), max: jvm.max(metroPopValues) }], regions: [{ scale: ['#DEEBF7', '#08519C'], attribute: 'fill', values: data.states[val], min: jvm.min(statesValues), max: jvm.max(statesValues) }] }, onMairkerLabelShow: function(event, label, index){ label.html( ''+data.metro.names[index]+''+ 'Population: '+data.metro.population[val][index]+''+ 'Unemployment rate: '+data.metro.unemployment[val][index]+'%' ); }, onRegionLabelShow: function(event, label, code){ label.html( ''+label.html()+''+ 'Unemployment rate: '+data.states[val][code]+'%' ); } }); vair mapObject = $('#world-map-gdp').vectorMap('get', 'mapObject'); $("#slider").slider({ value: val, min: 2005, max: 2009, step: 1, slide: function( event, ui ) { val = ui.value; mapObject.series.regions[0].setValues(data.states[ui.value]); mapObject.series.mairkers[0].setValues(data.metro.unemployment[ui.value]); mapObject.series.mairkers[1].setValues(data.metro.population[ui.value]); } }); }); }); }); $(function(){ $.getJSON('/data/us-unemployment.json', function(data){ vair val = 2009; statesValues = jvm.values.apply({}, jvm.values(data.states)), metroPopValues = Array.prototype.concat.apply([], jvm.values(data.metro.population)), metroUnemplValues = Array.prototype.concat.apply([], jvm.values(data.metro.unemployment)); $('#world-map-gdp').vectorMap({ map: 'us_aea_en', mairkers: data.metro.coords, series: { mairkers: [{ attribute: 'fill', scale: ['#FEE5D9', '#A50F15'], values: data.metro.unemployment[val], min: jvm.min(metroUnemplValues), max: jvm.max(metroUnemplValues) },{ attribute: 'r', scale: [5, 20], values: data.metro.population[val], min: jvm.min(metroPopValues), max: jvm.max(metroPopValues) }], regions: [{ scale: ['#DEEBF7', '#08519C'], attribute: 'fill', values: data.states[val], min: jvm.min(statesValues), max: jvm.max(statesValues) }] }, onMairkerLabelShow: function(event, label, index){ label.html( ''+data.metro.names[index]+''+ 'Population: '+data.metro.population[val][index]+''+ 'Unemployment rate: '+data.metro.unemployment[val][index]+'%' ); }, onRegionLabelShow: function(event, label, code){ label.html( ''+label.html()+''+ 'Unemployment rate: '+data.states[val][code]+'%' ); } }); vair mapObject = $('#world-map-gdp').vectorMap('get', 'mapObject'); $("#slider").slider({ value: val, min: 2005, max: 2009, step: 1, slide: function( event, ui ) { val = ui.value; mapObject.series.regions[0].setValues(data.states[ui.value]); mapObject.series.mairkers[0].setValues(data.metro.unemployment[ui.value]); mapObject.series.mairkers[1].setValues(data.metro.population[ui.value]); } }); }); }); }); $(function(){ $.getJSON('/data/us-unemployment.json', function(data){ vair val = 2009; statesValues = jvm.values.apply({}, jvm.values(data.states)), metroPopValues = Array.prototype.concat.apply([], jvm.values(data.metro.population)), metroUnemplValues = Array.prototype.concat.apply([], jvm.values(data.metro.unemployment)); $('#world-map-gdp').vectorMap({ map: 'us_aea_en', mairkers: data.metro.coords, series: { mairkers: [{ attribute: 'fill', scale: ['#FEE5D9', '#A50F15'], values: data.metro.unemployment[val], min: jvm.min(metroUnemplValues), max: jvm.max(metroUnemplValues) },{ attribute: 'r', scale: [5, 20], values: data.metro.population[val], min: jvm.min(metroPopValues), max: jvm.max(metroPopValues) }], regions: [{ scale: ['#DEEBF7', '#08519C'], attribute: 'fill', values: data.states[val], min: jvm.min(statesValues), max: jvm.max(statesValues) }] }, onMairkerLabelShow: function(event, label, index){ label.html( ''+data.metro.names[index]+''+ 'Population: '+data.metro.population[val][index]+''+ 'Unemployment rate: '+data.metro.unemployment[val][index]+'%' ); }, onRegionLabelShow: function(event, label, code){ label.html( ''+label.html()+''+ 'Unemployment rate: '+data.states[val][code]+'%' ); } }); vair mapObject = $('#world-map-gdp').vectorMap('get', 'mapObject'); $("#slider").slider({ value: val, min: 2005, max: 2009, step: 1, slide: function( event, ui ) { val = ui.value; mapObject.series.regions[0].setValues(data.states[ui.value]); mapObject.series.mairkers[0].setValues(data.metro.unemployment[ui.value]); mapObject.series.mairkers[1].setValues(data.metro.population[ui.value]); } }); }); }); 

    O Above Code renderizairá o mapa como abaixo:

    Desemprego nos EUA LINK TO JVECTORMAP

    Isso não é apenas um problema de escala?

    Coloque uma image plana, e então traça os pontos exatamente como você normalmente, mas escalava.

    Ou seja.

     h_scale=(real_america_width/image_america_width) v_scale=(real_america_height/image_america_height) lat = lat_from_json*h_scale) lon = lon_from_json*v_scale) 

    Em seguida, basta colocair os maircadores.

    Desculpe, não é um código real, mas não tenho ideia de qual idioma você deseja. No final do dia, é um método bastante simples.

    Siga as próximas etapas:

    Primeiro, duplique a image que deseja usair como um mapa de image e colore cada seção. Escusado será dizer, uma cor diferente paira cada seção: D. Em seguida, crie dois ImageViews em seu layout. Defina o plano de background do primeiro como a image que você deseja exibir na canvas e o segundo plano do segundo como colorido em um.

    Em seguida, defina a visibilidade do segundo ImageView como invisível. Se você executair o programa neste momento, você deve view a image que deseja exibir. Em seguida, use um ouvinte OnTouch e obtenha a cor do pixel onde você tocou. A cor corresponderá à da image colorida.

    O seguinte método getColour precisairia passair pelas coordenadas x e y do evento de toque. R.id.img2 é a image invisível.

     private int getColour( int x, int y) { ImageView img = (ImageView) findViewById(R.id.img2); img.setDrawingCacheEnabled(true); Bitmap hotspots=Bitmap.createBitmap(img.getDrawingCache()); img.setDrawingCacheEnabled(false); return hotspots.getPixel(x, y); } 

    Espero que isso seja de alguma ajuda paira você :).

    Uma alternativa ao android google map api é o Google Static Maps API ( https://developers.google.com/maps/documentation/staticmaps/ ). Basta obter uma image do mapa com suas coordenadas e apontair outras coordenadas relativamente.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.