MKMapView zoom a Region

hlasů
83

Jsem obeznámen s použitím Google Maps JavaScript API. Nedávno jsem začal používat rámec MapKit pro iPhone projekt, ale já jsem s těžko přijít na to zoomování a nastavení oblast na mapě.

V Google Maps API I používali celočíselné úrovní zoomu, jako 8, 9, 10 spolu s přímočarým funkce setZoom (). Jedinou rovnocenná metoda vidím v rámci MapKit je setRegion: animované. Jak jsem pochopil, musím nastavit zeměpisné šířky a délky „delta“ Rozpětí jeho regionu je určit úroveň přiblížení. Ale já opravdu nemám představu o tom, co tyto hodnoty znamenají (Četl jsem dokumentace).

Když jsem se použít MKMapView delegáta a sledování hodnot Rozpětí regionDidChange výsledků metody delegáta nezdá korelovat navzájem. To je v pořádku, když jsem oddálit a vidět rozpětí delta hodnoty jsou stále větší, jak je uvedeno v dokumentaci. Ale najednou jsem přetažením mapy bez zvětšování a delta hodnoty stát 0,0.

Může mi někdo prosím vysvětlit, co je referenční bod k těmto rozpětím a delta? Nebo je tam nějaký algoritmus převést hladinu celočíselnou zoom (jako 9) k těmto hodnotám delta?

Jako bonus otázku, je tam nějaký způsob, jak určit úroveň minimální-maximální přiblížení na MKMapView :)

dík

Položena 22/07/2009 v 17:16
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
133

Za prvé, MKMapView nepoužívá / má předdefinovanou sadu měřítkáchcích jako jsou Mapy Google dělá.

Místo toho, viditelná plocha MKMapView je popsán pomocí MKCoordinateRegion , který se skládá ze dvou hodnot:

  1. centrum (střed oblasti), a
  2. span (velikost viditelné oblasti kolem města).

Středový bod by mělo být jasné (to je střed regionu).

Nicméně, rozpětí (což je MKCoordinateSpan ) se skládá z:

  1. latitudeDelta (vertikální vzdálenost představuje region), a
  2. longitudeDelta (vodorovná vzdálenost představuje region).

Stručný příklad. Zde je hračka MKCoordinateRegion:

  1. centrum:
    • latitude: 0
    • délka: 0
  2. rozpětí:
    • latitudeDelta: 8
    • longitudeDelta: 6

Region by mohl být popsán pomocí jeho min a max souřadnice takto:

  1. koordinovat min (spodní levý bod):
    • latitude: -4
    • délka: -3
  2. max souřadnic (horní bod pravá):
    • zeměpisná šířka: 4
    • délka: 3

Takže, můžete určit úroveň zoomu kolem středového bodu pomocí odpovídající velikosti MKCoordinateSpan. Jako aproximace číselných měřítkáchcích Google, můžete zpětně velikosti rozpětí, které Google používá pro danou úroveň zoomu a vytvořit rozpětí, podle toho. (Google popisuje jejich regiony zobrazení stejným způsobem, že MKMapView dělá, jako centrum + rozpětí, takže si můžete vytáhnout tyto hodnoty z Google Maps).

Pokud jde o omezení regionu, můžete hrát w / tohoto způsobu delegáta:

mapView:regionWillChangeAnimated

například změnou velikosti region zpět do svých povolených úrovní zoomu. (Něco jako, jak se pohledy tabulce vám umožní procházet přes okraj, ale pak gumička zpět na své místo.) Nicméně, vaše najetých kilometrů se mohou lišit, protože jsem nepoužil pro tento účel.

btw, existuje konkrétní změnách / zlepšení OS 3.1 až aspektech MapKit které mi dávali problémy v 3.0.

Odpovězeno 22/07/2009 v 20:36
zdroj uživatelem

hlasů
117

Pokud dáváte přednost použití explicitních úrovní zoomu namísto definování MKCoordinateSpan jsem napsal kategorii, která přidává podporu pro určení úrovně přiblížení k MKMapView. Kód lze nalézt zde .

Odpovězeno 23/01/2010 v 03:49
zdroj uživatelem

hlasů
4

Rozpětí je ve stupních zeměpisné šířky a délky. Existuje metoda pro konstrukci MKCoordinateRegion structs který bere vzdálenost místo. Je možné, že používáte MKCoordinateRegionMakeWithDistance specifikovat rozsah, a pak, když si to zjistit v regionDidChange, vidíte na délku / šířku rozpětí, což je, jak je uložen v MKCoordinateRegion struct.

Pokud je mi známo, že hladiny integer zoom není k dispozici ani užitečná vůbec při práci s MKMapKit. Osobně preferuji pomocí čísla rozpětí jeho pružnější.

Nelze určit maximální a minimální zoom, a já nevím, o způsob, jak zaseknout v. MKMapKit je vlastně docela slabá právě teď, jsem docela zklamaný nedostatkem funkcí.

Odpovězeno 22/07/2009 v 19:09
zdroj uživatelem

hlasů
3

Rychlé Srovnání úrovně přiblížení na místo pomocí webu maps.google.com kontrolora na odkaz QueryString ukazuje, že dx a dy hodnoty span zvýšení o faktor 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
  ...
Odpovězeno 11/12/2009 v 01:30
zdroj uživatelem

hlasů
2

kategorie Brant na MKMapView funguje dobře. Zdá se však, že nebyl aktualizován pro podporu novějších zařízení s obrazovkami sítnice při výpočtu mapSizeInPixels.

To může být stanovena nahrazením tohoto řádku:

CGSize mapSizeInPixels = mapView.bounds.size;

Díky této lince:

CGSize mapSizeInPixels = CGSizeMake(mapView.bounds.size.width * [UIScreen mainScreen].scale, mapView.bounds.size.height * [UIScreen mainScreen].scale);
Odpovězeno 19/06/2014 v 16:43
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more