MKMapView Zum ve Bölge

oy
83

Google Maps JavaScript API kullanarak aşinayım. Son zamanlarda bir iphone proje için MapKit çerçevesini kullanmaya başladı ama yakınlaştırma ve harita üzerinde bir bölge ayarı anlamaya zor anlar yaşıyorum.

Google Maps API ben () basit fonksiyon setZoom birlikte 8 gibi 9, 10 tamsayı yakınlaştırma seviyelerini kullanmak için kullanılır. animasyonlu: Ben MapKit çerçevesinde görebileceğiniz tek eşdeğer yöntem setRegion olduğunu. Anlıyorum, ben yakınlaştırma düzeyini belirlemek için bir bölgenin Kaplayıcı enlem ve boylam delta değerlerini ayarlamak gerekir. Ama gerçekten bu değerler (I belgelerini okuyun) temsil ne bir fikir yok.

Bir MKMapView temsilci kullanmanızı ve regionDidChange temsilci yöntemi sonuçlarında yayılma değerlerini iz zaman birbirlerine ilişkilendirmek görünmüyor. Ben uzaklaştırmak ve belgelerde belirtildiği gibi delta değerleri artmaktadır yayılma görünce Tamam. Ama birden yakınlaştırmadan haritayı sürükleyin ve delta değerleri 0.0 olur.

Bu yayılma ve delta için referans noktası nedir Biri açıklayabilir misiniz? Yada bu delta değerlerine (9) gibi bir tamsayı yakınlaştırma seviyesini dönüştürmek için herhangi bir algoritma var mı?

sözlüsü sorusu niyetine bir MKMapView üzerinde minimum-maksimum yakınlaştırma düzeyini belirlemek için herhangi bir yol yoktur :)

Teşekkürler

Oluştur 22/07/2009 saat 17:16
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
133

Her şeyden önce, MKMapView / kullanan Google Maps yaptığı gibi yakınlaştırma seviyelerinin önceden tanımlanmış bir dizi yok.

Bunun yerine, bir MKMapView görünür alanı kullanılarak tarif edilir MKCoordinateRegion iki değerden oluşur:

  1. Merkezi (bölgenin merkez noktası) ve
  2. yayılma (merkezi etrafında görünür alan boyutu).

merkez noktası açık olmalı (o bölgenin merkez noktası.)

Bununla birlikte, (a, yayılma MKCoordinateSpan ) oluşur:

  1. latitudeDelta (bölgesi tarafından temsil düşey mesafe) ve
  2. longitudeDelta (bölgesi tarafından temsil yatay mesafe).

Kısa bir örnek. İşte bir oyuncak MKCoordinateRegion var:

  1. merkezi:
    • enlem: 0
    • boylam: 0
  2. açıklığı:
    • latitudeDelta: 8
    • longitudeDelta: 6

bölgenin dk kullanılarak tarif ve aşağıdaki gibi maksimum koordinatları edilebilir:

  1. dak (sol alt noktası) koordinat
    • enlem: -4
    • boylam: -3
  2. v max (sağ üst noktası) koordinat
    • enlem: 4
    • boylam: 3

Yani, uygun büyüklükte bir MKCoordinateSpan kullanarak bir merkez nokta çevresinde yakınlaştırma seviyelerini belirleyebilirsiniz. Google'ın sayısal yakınlaştırma seviyelerinin bir yaklaşım olarak, Google belirli bir yakınlaştırma düzeyi için kullandığı açıklık boyutları ters mühendislik olabilir ve buna göre, bir yayılma oluşturun. (Google MKMapView bir merkez + yayılma olarak, yok aynı şekilde kendi görüş bölgelerini açıklar, bu nedenle Google Maps üzerinden bu değerleri çekebilir.)

Bölgeyi kısıtlayan gelince, bu temsilci yönteminin w / oynayabilir:

mapView:regionWillChangeAnimated

geri izin yakınlaştırma düzeylerine bölgeyi yeniden boyutlandırma edilmesiyle değerlendirilebilir. (Bir çeşit tablo görünümleri kenarını geçecek kaydırma izin verir, ama sonra tekrar yerine koyun. Lastik bant nasıl gibi) bu amaç için kullanmadım Ancak, sizin kilometre değişebilir.

Btw 3.0'da başıma dert veriyorlardı MapKit yönlerine OS 3.1 kesin düzeltmeler / iyileştirmeler vardır.

Cevap 22/07/2009 saat 20:36
kaynak kullanıcı

oy
117

Eğer açık yakınlaştırma seviyelerini kullanarak yerine bir MKCoordinateSpan tanımlayan tercih ederseniz, bir MKMapView yakınlaştırma düzeyini belirlemek için destek ekler bir kategori yazdım. Kod bulunabilir burada .

Cevap 23/01/2010 saat 03:49
kaynak kullanıcı

oy
4

yayılma enlem ve boylam derece cinsindendir. Bunun yerine, mesafe alır MKCoordinateRegion yapılar oluşturmak için bir yöntem yoktur. Bu yayılma belirtmek için MKCoordinateRegionMakeWithDistance kullanıyor ve siz regionDidChange bunu kontrol ederken daha sonra bunu bir MKCoordinateRegion yapı içinde saklanır nasıl enlem / boylam yayılma en görüyoruz olabilir.

MKMapKit ile çalışırken olarak bildiğim kadarıyla, tamsayı zum seviyeleri mevcut veya hiç faydalı değildir. Ben şahsen, onun daha esnek yayılma rakamları kullanarak tercih ederim.

Sen maks ve min zoom belirtmek olamaz ve ben onu kesmek için bir yol bilmiyorum. MKMapKit şu anda aslında oldukça zayıftır, ben özelliklerin eksikliği oldukça hayal kırıklığına uğrattı.

Cevap 22/07/2009 saat 19:09
kaynak kullanıcı

oy
3

Bağlantı sorgu dizesi inceleyerek maps.google.com kullanarak bir konumu yakınlaştırma seviyelerinde arasında kısa bir karşılaştırma gösteriyor ki 2 kat dx ve dy açıklık değerleri artış:

 (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
  ...
Cevap 11/12/2009 saat 01:30
kaynak kullanıcı

oy
2

MKMapView üzerinde Brant'in kategorisi iyi çalışıyor. Ancak, mapSizeInPixels hesaplarken retina ekranlı yeni cihazlarını desteklemek için güncellendi değildir anlaşılmaktadır.

Bu çizgiyi değiştirerek düzeltilebilir:

CGSize mapSizeInPixels = mapView.bounds.size;

Bu hat sayesinde:

CGSize mapSizeInPixels = CGSizeMake(mapView.bounds.size.width * [UIScreen mainScreen].scale, mapView.bounds.size.height * [UIScreen mainScreen].scale);
Cevap 19/06/2014 saat 16:43
kaynak kullanıcı

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