Autore Topic: E' possibile mostrare solo la mappa dell'Italia?  (Letto 2163 volte)

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
E' possibile mostrare solo la mappa dell'Italia?
« il: 17 Maggio 2014, 16:45:40 CEST »
0
Vorrei mostrare nello schermo solo una porzione di mappa con l'Italia e non altre nazioni (che non mi occorrono nell'app).
Come posso fare in modo che si possa scorrere sulla mappa senza che sia possibile andare oltre un certo punto?

Offline Trotto23

  • Utente junior
  • **
  • Post: 94
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows Vista
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #1 il: 17 Maggio 2014, 16:58:52 CEST »
0
Credo che google non divida la mappa per nazioni.
Potresti fare cio che vuoi tu usando i metodi setCenter() e setZoom().

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #2 il: 17 Maggio 2014, 17:19:35 CEST »
0
Ma infatti non voglio che venga mostrata solo una nazione, voglio che sia possibile scorrere sulla mappa fino ad un certo punto... dopodiché la visualizzazione della mappa non mostra altro.

Offline Trotto23

  • Utente junior
  • **
  • Post: 94
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows Vista
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #3 il: 17 Maggio 2014, 17:21:11 CEST »
0
Come ti ho detto nel post precedente puoi giocare con quei due metodi sempre se ho capito cosa intendi

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #4 il: 17 Maggio 2014, 17:30:32 CEST »
0
Voglio che nello schermo venga visualizzato solo il "rettangolo" relativo all'Italia e che sia possibile fare solo zoom-in e zoom-out.

I metodi che mi hai indicato di quale classe sono e come dovrei usarli esattamente?

Grazie.

Offline OssoMasticato

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note GT-N7000
  • Sistema operativo:
    Windows XP SP2/Win Vista
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #5 il: 31 Maggio 2014, 13:04:46 CEST »
+1
Io ho risolto prendendo come riferimento un punto preciso con CameraPosition e impostando un valore di Zoom. Il grosso del lavoro sta nel calcolare il centro della mappa usando le coordinate GPS. puoi usare una media tra latitudine massima e minima e la media tra longitudine massima e minima. il resto lo regoli con lo zoom.

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #6 il: 31 Maggio 2014, 13:10:45 CEST »
0
Potresti mostrarmi il tuo codice?

Offline OssoMasticato

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note GT-N7000
  • Sistema operativo:
    Windows XP SP2/Win Vista
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #7 il: 31 Maggio 2014, 15:17:53 CEST »
0
Certo. Ecco qui.

Codice (Java): [Seleziona]
// questo permette di caricare la mappa
           
            CameraPosition cameraPosition = new CameraPosition.Builder().target(
                    new LatLng(XX.XXXXXXX , YY.YYYYYYY)).zoom(W).build();
     
    googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        Log.v(TAG, "Caricamento mappa...");

Sostituisci i valori XX, YY, e W per lo Zoom con i tuoi valori.

Se l'idea è quella di visualizzare solo una certa porzione di mappa, potresti perfino provare i Bounds.

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #8 il: 31 Maggio 2014, 15:28:14 CEST »
0
Cosa dovrei mettere in X e Y? Il centro della mappa giusto?
La mia idea è visualizzare solo l'Italia. Cioè l'utente non deve poter muoversi sulla mappa e andare oltre dei limiti che vorrei poter impostare.
Non è possibile una cosa del genere?

Offline OssoMasticato

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note GT-N7000
  • Sistema operativo:
    Windows XP SP2/Win Vista
Re:E\' possibile mostrare solo la mappa dell\'Italia?
« Risposta #9 il: 31 Maggio 2014, 15:48:43 CEST »
+1
Credo sia possibile utilizzando i Bounds.

Sono limiti che imponi alla mappa. Non ho letto molto, ma da quello che ho capito servono proprio a questo.

Ecco i riferimenti:


http://developer.android.com/reference/com/google/android/gms/maps/model/LatLngBounds.html


Devi solo specificare le coordinate NordEst e SudOvest

Off-Topic:

public final LatLng northeast

Northeast corner of the bound.


public final LatLng southwest

Southwest corner of the bound.


Post unito: 31 Maggio 2014, 16:55:56 CEST
Cosa dovrei mettere in X e Y? Il centro della mappa giusto?

Esatto, in ordine devi impostare i valori della Latitudine e della Longitudine. e al posto della "W" il valore dello zoom. Ai miei scopi è bastato il valore 7, ma credo che con i Bounds te la possa cavare meglio!
« Ultima modifica: 31 Maggio 2014, 16:55:56 CEST da OssoMasticato, Reason: Merged DoublePost »

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:E\' possibile mostrare solo la mappa dell\'Italia?
« Risposta #10 il: 11 Agosto 2014, 13:11:46 CEST »
0
Ciao, scusa se ti rispondo solo ora ma per un periodo ho abbandonato il progetto. Ora l'ho ripreso e sono ripartito da dove avevo lasciato, ovvero dal tuo post.

Seguendo il tuo link ho usato i bounds e questo è il codice risultante:

Codice: [Seleziona]
public class MapViewer extends Activity implements OnInfoWindowClickListener {
        private LatLng defaultLatLng = new LatLng(42.564241, 12.22759);
        public final LatLng northeast = new LatLng(47.09194444, 18.52166666);
        public final LatLng southwest = new LatLng(36.448311, 6.62555555);
        private GoogleMap map;
        private int zoomLevel = 5;
         
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.mapviewer);
         
            try {
                    map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
                    if (map != null) {
                            map.setMyLocationEnabled(true);
                            map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                            map.getUiSettings().setRotateGesturesEnabled(false);
         
                            // Move the camera instantly to defaultLatLng.
                            map.moveCamera(CameraUpdateFactory.newLatLngZoom(defaultLatLng, zoomLevel));
                             
                            this.addMerchantMarkers(new MarkerOptions());
                           
                            LatLngBounds.Builder builder = new LatLngBounds.Builder();
                            builder.include(northeast);
                            builder.include(southwest);
                            final LatLngBounds bounds = builder.build();
                           
                            map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
                                @Override
                                public void onMapLoaded() {
                                    map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 5));
                                }
                            });
                    }
            } catch (NullPointerException e) {
                    e.printStackTrace();
            }
        }
         
        @Override
        public void onPause() {
                if (map != null) {
                        map.setMyLocationEnabled(false);
                        map.setTrafficEnabled(false);
                }
                super.onPause();
        }
       
        public void addMerchantMarkers(MarkerOptions mo) {
                // Do something
        }
}

Solo che non ha nessun effetto sulla mappa, al primo caricamento la mappa è centrata sull'Italia, ma riesco ancora a muovermi su di essa (sia facendo zoom in/out e sia facendo "swiping") e visualizzare altre nazioni, non resta bloccata sull'Italia...
Cosa sbaglio?

Post unito: [time]11 Agosto 2014, 15:19:09 CEST[/time]
Certo. Ecco qui.

Codice (Java): [Seleziona]
// questo permette di caricare la mappa
           
            CameraPosition cameraPosition = new CameraPosition.Builder().target(
                    new LatLng(XX.XXXXXXX , YY.YYYYYYY)).zoom(W).build();
     
    googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        Log.v(TAG, "Caricamento mappa...");

Sostituisci i valori XX, YY, e W per lo Zoom con i tuoi valori.

Se l'idea è quella di visualizzare solo una certa porzione di mappa, potresti perfino provare i Bounds.

Quest'altra soluzione invece credo di eseguirla già con questo codice:

Codice: [Seleziona]
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(42.564241, 12.22759), 5));
Che mi centra la mappa al centro dell'Italia... però poi è possibile spostarsi nelle altre nazioni o fare zoom indietro e vedere tutto il pianeta... e questo è quello che non voglio...
Vorrei fare qualcosa come questo esempio che limita lo spostamento sulla mappa tanto da far restare l'utente nella porzione di mappa stabilita (anche se in questo caso usando lo zoom si va oltre tali limiti).
Come fare una cosa del genere su Android?
« Ultima modifica: 11 Agosto 2014, 15:20:41 CEST da smartmouse, Reason: Merged DoublePost »

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #11 il: 11 Agosto 2014, 16:29:48 CEST »
0
Hai pensato di usare OpenStreetMap al posto di Google maps? Magari risulta più semplice farlo. Io personalmente non ho mai lavorato con le mappe quindi non saprei.

Offline sismouse

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #12 il: 11 Agosto 2014, 17:58:14 CEST »
0
Hai pensato di usare OpenStreetMap al posto di Google maps? Magari risulta più semplice farlo. Io personalmente non ho mai lavorato con le mappe quindi non saprei.

Dovrei partire da zero in questo caso... o magari l'implementazione è molto pratica da attuare?

Offline Rino63

  • Utente normale
  • ***
  • Post: 161
  • Respect: +3
    • Mostra profilo
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #13 il: 11 Agosto 2014, 18:04:45 CEST »
0
mai tentato nulla con le mappe ma mi verrebbe di fare nel modo seguente:
1) ricavare latitudine e longitudine entro le quali è compresa l'italia
2) quando fai lo zoom o lo scroll controlli se è uscito dai limiti in tal caso forzi lo zoom sul limite massimo o al valore che vuoi.
(spero di non aver detto st....upidaggini...
se funziona proverei a raffinare la cosa dividendo l'italia in più zone in modo da non finire in mare....
« Ultima modifica: 11 Agosto 2014, 18:06:20 CEST da Rino63 »

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:E' possibile mostrare solo la mappa dell'Italia?
« Risposta #14 il: 11 Agosto 2014, 18:07:10 CEST »
0
Ti ho detto, non ho mai lavorato con le mappe e quindi non saprei. Però la maggior parte delle app che usano OSM hanno la possibilità di scaricare le mappe offline di una singola regione o stato quindi potrebbe essere più facile.
Se vuoi sbirciare un navigatore opensource OsmAnd sono sicuro abbia questa funzione.