MKMapView ζουμ και Περιφέρεια

ψήφοι
83

Είμαι εξοικειωμένος με τη χρήση του Google Maps API Javascript. Πρόσφατα άρχισα να χρησιμοποιώ πλαίσιο MapKit για ένα έργο το iPhone, αλλά είμαι έχοντας έναν σκληρό χρόνο να καταλάβω ζουμ και τον καθορισμό μιας περιοχής στο χάρτη.

Στο Google Maps API Θα χρησιμοποιηθεί για να χρησιμοποιήσετε ακέραιο τα επίπεδα ζουμ, όπως 8, 9, 10, μαζί με την απλή setZoom λειτουργία (). Η μόνη άλλη ισοδύναμη μέθοδος μπορώ να δω στο πλαίσιο MapKit είναι setRegion: κινουμένων σχεδίων. Όπως καταλαβαίνω, θα χρειαστεί να ρυθμίσετε τις τιμές γεωγραφικού πλάτους και μήκους διάρκεια μιας περιοχής του «Δέλτα» για να καθορίσετε το επίπεδο ζουμ. Αλλά πραγματικά δεν έχουν ιδέα για το τι αυτές οι τιμές αντιπροσωπεύουν (Ι διαβάστε την τεκμηρίωση).

Όταν χρησιμοποιείτε ένα πληρεξούσιο MKMapView και να εντοπίζουν τις τιμές ανοίγματος στο regionDidChange αποτελεσμάτων της μεθόδου εκπρόσωπος δεν φαίνεται να συσχετίζονται μεταξύ τους. Είναι εντάξει όταν σμίκρυνση και να δείτε το χρονικό Οι τιμές δέλτα αύξηση, όπως ορίζεται στην τεκμηρίωση. Αλλά ξαφνικά να σύρετε το χάρτη χωρίς ζουμ και τιμές δέλτα γίνει 0,0.

Μπορεί κάποιος παρακαλώ να εξηγήσει ποιο είναι το σημείο αναφοράς για την εν λόγω έκταση και δέλτα; Ή είναι κάθε αλγόριθμο για να μετατρέψετε ένα επίπεδο μεγέθυνσης ακέραιο (όπως 9) σε αυτά τα δέλτα τιμές εκεί;

Ως ερώτηση μπόνους υπάρχει κάποιος τρόπος για να καθορίσετε ένα ελάχιστο-μέγιστο επίπεδο ζουμ σε μια MKMapView εκεί :)

Ευχαριστώ

Δημοσιεύθηκε 22/07/2009 στις 17:16
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
133

Πρώτα απ 'όλα, MKMapView δεν χρησιμοποιεί / έχουν ένα προκαθορισμένο σύνολο επίπεδα ζουμ, όπως το Google Maps κάνει.

Αντ 'αυτού, η ορατή περιοχή του ενός MKMapView περιγράφεται χρησιμοποιώντας MKCoordinateRegion , το οποίο αποτελείται από δύο τιμές:

  1. κέντρο (το κεντρικό σημείο της περιοχής), και
  2. διάστημα (το μέγεθος της ορατής περιοχής γύρω από το κέντρο).

Το κεντρικό σημείο θα πρέπει να είναι εμφανής (είναι το κεντρικό σημείο της περιοχής.)

Ωστόσο, διάρκεια (το οποίο είναι ένα MKCoordinateSpan ) αποτελείται από:

  1. latitudeDelta (η κατακόρυφη απόσταση που αντιπροσωπεύεται από την περιοχή), και
  2. longitudeDelta (η οριζόντια απόσταση που αντιπροσωπεύεται από την περιοχή).

Ένα σύντομο παράδειγμα. Εδώ είναι μια MKCoordinateRegion παιχνίδι:

  1. κέντρο:
    • γεωγραφικό πλάτος: 0
    • γεωγραφικό μήκος: 0
  2. σπιθαμή:
    • latitudeDelta: 8
    • longitudeDelta: 6

Η περιοχή θα μπορούσε να περιγραφεί χρησιμοποιώντας min και max συντεταγμένες ως ακολούθως:

  1. min συντεταγμένων (κατώτερο σημείο αριστερό):
    • γεωγραφικό πλάτος: -4
    • γεωγραφικό μήκος: -3
  2. max συντεταγμένων (ανώτερο σημείο δεξιά):
    • γεωγραφικό πλάτος: 4
    • γεωγραφικό μήκος: 3

Έτσι, μπορείτε να καθορίσετε τα επίπεδα ζουμ γύρω από ένα κεντρικό σημείο με τη χρήση ενός κατάλληλου μεγέθους MKCoordinateSpan. Ως προσέγγιση των αριθμητικών επίπεδα ζουμ της Google, θα μπορούσε να αναστρέψει τη λειτουργία των μεγεθών διάστημα που χρησιμοποιεί η Google για ένα δεδομένο επίπεδο ζουμ και να δημιουργήσει ένα άνοιγμα, αντίστοιχα. (Google περιγράφει την άποψη των περιφερειών τους με τον ίδιο τρόπο που MKMapView κάνει, ως κέντρο + διάστημα, ώστε να μπορείτε να τραβάτε αυτές τις τιμές από τους Χάρτες Google.)

Όσο για τον περιορισμό της περιοχής, μπορείτε να παίξετε w / αυτή τη μέθοδο εκπρόσωπος:

mapView:regionWillChangeAnimated

π.χ. με την αλλαγή μεγέθους της περιοχής πίσω στο επιτρέπεται επίπεδα ζουμ σας. (Κάτι σαν το πώς απόψεων τραπέζι θα σας αφήσει να μετακινηθείτε πέρα ​​από την άκρη, αλλά στη συνέχεια λάστιχο στη θέση του.) Ωστόσο, τα διανυθέντα χιλιόμετρα σας μπορεί να διαφέρει, δεδομένου ότι δεν έχουν χρησιμοποιηθεί για το σκοπό αυτό.

btw, υπάρχουν συγκεκριμένες διορθώσεις / βελτιώσεις στο λειτουργικό σύστημα 3.1 με πτυχές της MapKit που μου δίνετε πρόβλημα στο 3.0.

Απαντήθηκε 22/07/2009 στις 20:36
πηγή χρήστη

ψήφοι
117

Αν προτιμάτε τη χρήση ρητή επίπεδα ζουμ, αντί να ορίζει ένα MKCoordinateSpan, έγραψα μια κατηγορία που προσθέτει υποστήριξη για τον καθορισμό του επιπέδου ζουμ ενός MKMapView. Ο κώδικας μπορεί να βρεθεί εδώ .

Απαντήθηκε 23/01/2010 στις 03:49
πηγή χρήστη

ψήφοι
4

Το άνοιγμα είναι σε μοίρες γεωγραφικού πλάτους και μήκους. Υπάρχει μια μέθοδος για την κατασκευή MKCoordinateRegion Δομές που παίρνει απόσταση, αντ 'αυτού. Μπορεί να είναι ότι χρησιμοποιείτε MKCoordinateRegionMakeWithDistance να καθορίσετε το διάστημα, και στη συνέχεια, όταν το check-in regionDidChange, βλέπετε στο lat / μακρά διάρκεια, το οποίο είναι το πώς αποθηκεύεται σε ένα struct MKCoordinateRegion.

Απ 'όσο ξέρω, τα επίπεδα ακέραιο ζουμ δεν είναι διαθέσιμο ή χρήσιμο σε όλους κατά την εργασία με MKMapKit. Εγώ προσωπικά προτιμώ χρησιμοποιώντας τα στοιχεία βαθμονόμησης, του πιο ευέλικτη.

Δεν μπορείτε να καθορίσετε max και min zoom, και δεν ξέρω έναν τρόπο για να χαράξει το. MKMapKit είναι στην πραγματικότητα αρκετά αδύναμη αυτή τη στιγμή, είμαι πολύ απογοητευμένος από την έλλειψη των χαρακτηριστικών.

Απαντήθηκε 22/07/2009 στις 19:09
πηγή χρήστη

ψήφοι
3

Μια γρήγορη σύγκριση των επιπέδων ζουμ για μια θέση, χρησιμοποιώντας maps.google.com από την επιθεώρηση του querystring σύνδεσμο δείχνει ότι το dx και dy τιμές διάστημα αύξηση κατά ένα συντελεστή 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
  ...
Απαντήθηκε 11/12/2009 στις 01:30
πηγή χρήστη

ψήφοι
2

Κατηγορία Brant για MKMapView λειτουργεί καλά. Ωστόσο, φαίνεται ότι δεν έχει ενημερωθεί για την υποστήριξη νεότερες συσκευές με οθόνες αμφιβληστροειδή κατά τον υπολογισμό mapSizeInPixels.

Μπορεί να καθοριστεί από την αντικατάσταση αυτή τη γραμμή:

CGSize mapSizeInPixels = mapView.bounds.size;

Με αυτή τη γραμμή:

CGSize mapSizeInPixels = CGSizeMake(mapView.bounds.size.width * [UIScreen mainScreen].scale, mapView.bounds.size.height * [UIScreen mainScreen].scale);
Απαντήθηκε 19/06/2014 στις 16:43
πηγή χρήστη

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