MKMapView Zoom e Regione

Ho familiarità con l’utilizzo di Google Maps Javascript API. Di recente ho iniziato a usare il MapKit quadro per un iphone di progetto, ma sto avendo un momento difficile capire lo zoom e l’impostazione di una regione sulla mappa.

In Google Maps API ho usato per utilizzare l’intero livelli di zoom, come 8, 9, 10, insieme con semplice funzione di setZoom(). L’unico metodo equivalente vedo il MapKit quadro è setRegion:l’animazione. Mi pare di capire, ho bisogno di impostare una regione span latitudine e longitudine, “delta” i valori per specificare il livello di zoom. Ma io davvero non hanno un’idea di ciò che questi valori rappresentano(ho letto la documentazione).

Quando io uso una MKMapView delegato e traccia l’arco valori in regionDidChange delegato metodo di risultati non sembrano correlare ogni altro. Ok quando lo zoom indietro e vedere l’arco delta valori sono in aumento, come specificato nella documentazione. Ma, all’improvviso, mi trascinare la mappa senza zoom e valori delta diventare 0.0.

Qualcuno può spiegare che cosa è il punto di riferimento per questi span e delta? O c’è qualche algoritmo per convertire un intero livello di zoom(9) a questi valori delta?

Come bonus domanda c’è un modo per specificare un minimo-massimo livello di zoom su un MKMapView 🙂

Grazie

 

5 Replies
  1. 134

    Prima di tutto, MKMapView non fa uso di/avere un set predefinito di livelli di zoom, come Google Maps fa.

    Invece, l’area visibile di un MKMapView è descritta utilizzando MKCoordinateRegion, che si compone di due valori:

    1. centro (il punto centrale della regione), e
    2. span (le dimensioni dell’area visibile intorno al centro).

    Il punto centrale dovrebbe essere ovvio (è il punto centrale della regione.)

    Tuttavia, span (che è un MKCoordinateSpan) si compone di:

    1. latitudeDelta (la distanza verticale rappresentata dalla regione), e
    2. longitudeDelta (la distanza orizzontale rappresentata dalla regione).

    Un breve esempio. Ecco un giocattolo MKCoordinateRegion:

    1. centro:
      • latitudine: 0
      • longitudine: 0
    2. span:
      • latitudeDelta: 8
      • longitudeDelta: 6

    La regione potrebbe essere descritto utilizzando il suo min e max coordinate come segue:

    1. min di coordinate (in basso a sinistra del punto):
      • latitudine: -4
      • longitudine: -3
    2. max di coordinate (in alto a destra del punto):
      • latitudine: 4
      • longitudine: 3

    Modo, è possibile specificare i livelli di zoom intorno a un punto centrale utilizzando una di dimensioni adeguate, MKCoordinateSpan. Come approssimazione di Google numerico livelli di zoom, è possibile invertire l’ingegnere span dimensioni che Google utilizza per un dato livello di zoom e creare un arco, di conseguenza. (Google descrive il loro punto di vista le regioni allo stesso modo che MKMapView fa, come centro + periodo, in modo che si può tirare di questi valori al di fuori di Google Maps.)

    Come per la limitazione della regione, si può giocare w/questo metodo delegato:

    mapView:regionWillChangeAnimated

    ad esempio ridimensionando la regione nel vostro permesso livelli di zoom. (Un po ‘ come come tabella di vista vi permetterà di scorrere oltre il bordo, ma poi elastico posteriore in posizione.) Tuttavia, il vostro chilometraggio può variare, dal momento che non ho usato per questo scopo.

    btw, ci sono precise correzioni/miglioramenti in OS 3.1 per gli aspetti di MapKit che mi stavano dando problemi in 3.0.

    • Bella descritto che mi permetta sapeva nozioni di base. Con voto positivo !!!
    • si può descrivere più dettagliatamente come “reverse engineering span dimensioni che Google utilizza per un dato livello di zoom e creare un arco”. Ho davvero bisogno
  2. 118

    Se si preferisce usare esplicito livelli di zoom invece di definire un MKCoordinateSpan, ho scritto una categoria che aggiunge il supporto per specificare il livello di zoom di un MKMapView. Il codice può essere trovato qui.

    • Davvero un post interessante, grazie per il link.
    • Troy post dei blog mi ha dato una grande comprensione di come mapkit di google maps e di lavoro. Consiglio vivamente la lettura di esso.
    • grande uomo del lavoro .. approfondimento..
    • git://github.com/jdp-global/MKMapViewZoom.git
    • sarà questo lavoro con xcode 4.2 storyboard funzione?
    • sì, lo fa

  3. 4

    L’arco è in gradi di latitudine e longitudine. C’è un metodo per la costruzione di MKCoordinateRegion strutture che prende distanza, invece. Può essere che si sta utilizzando MKCoordinateRegionMakeWithDistance per specificare l’intervallo, e quindi momento del check-in regionDidChange, si sta vedendo in lat/long span, che è come è memorizzato in un MKCoordinateRegion struct.

    Per quanto ne so, l’intero livelli di zoom non è disponibile o è utile quando si lavora con MKMapKit. Io personalmente preferisco usare l’arco figure, più flessibile.

    Non è possibile specificare max e min di zoom, e non so di un modo per incidere in. MKMapKit è in realtà piuttosto debole ora, io sono abbastanza deluso dalla mancanza di funzionalità.

  4. 3

    Un rapido confronto tra i livelli di zoom per una posizione utilizzando maps.google.com controllando il link querystring dimostra che il dx e dy span valori aumentano di un fattore 2:

     (0.005334, 0.011834) starting span
     (0.010668, 0.023668) dx: x2, dy: x2 
     (0.021335, 0.047337) dx: x2, dy: x2
     (0.042671, 0.094671) dx: x2, dy: x2
      ...
  5. 2

    Brant categoria MKMapView funziona bene. Tuttavia, sembra che esso non è stato aggiornato per supportare nuovi dispositivi con schermi retina durante il calcolo mapSizeInPixels.

    Può essere risolto sostituendo questa linea:

    CGSize mapSizeInPixels = mapView.bounds.size;

    Con questa linea:

    CGSize mapSizeInPixels = CGSizeMake(mapView.bounds.size.width * [UIScreen mainScreen].scale, mapView.bounds.size.height * [UIScreen mainScreen].scale);

Lascia un commento