2015-03-12 9 views
6

Ci sono due modi in cui un utente può posizionare un marcatore sulla mappa all'interno dell'app tramite UISearchBar sopra la mappa (non ancora completato) e premendo a lungo sulla mappa dove desiderano che appaia l'indicatore. Sto usando una variabile globale per il marcatore, perché l'utente è limitato all'impostazione di un solo marker sulla mappa. Ogni volta che il marcatore viene creato, mi piacerebbe disegnare un raggio (cerchio) attorno al marcatore. Ecco il mio codice finora:Come posso disegnare un raggio attorno a un indicatore di mappa utilizzando l'SDK di Google Maps (Swift/iOS)?

var mapMarker = GMSMarker() 
... 

//This function dectects a long press on the map and places a marker at the coordinates of the long press. 
func mapView(mapView: GMSMapView!, didLongPressAtCoordinate coordinate: CLLocationCoordinate2D) { 

     //Set variable to latitude of didLongPressAtCoordinate 
     var latitude = coordinate.latitude 

     //Set variable to longitude of didLongPressAtCoordinate 
     var longitude = coordinate.longitude 

     //Feed position to mapMarker 
     mapMarker.position = CLLocationCoordinate2DMake(latitude, longitude) 

     //Define attributes of the mapMarker. 
     mapMarker.icon = UIImage(named: "mapmarkericon") 

     //Set icon anchor point 
     mapMarker.groundAnchor = CGPoint(x: 0.5, y: 0.5) 

     //Enable animation on mapMarker 
     mapMarker.appearAnimation = kGMSMarkerAnimationPop 

     //Display the mapMarker on the mapView. 
     mapMarker.map = mapView 

     drawCircle(coordinate) 

     } 

func drawCircle(position: CLLocationCoordinate2D) { 

    //var latitude = position.latitude 
    //var longitude = position.longitude 
    //var circleCenter = CLLocationCoordinate2DMake(latitude, longitude) 
    var circle = GMSCircle(position: position, radius: 3000) 
    circle.strokeColor = UIColor.blueColor() 
    circle.fillColor = UIColor(red: 0, green: 0, blue: 0.35, alpha: 0.05) 
    circle.map = mapView 

} 

Certamente, questa è la mia prima app iOS/Swift. Ho capito se ho passato le coordinate di didLongPressAtCoordinate alla funzione drawCircle(), ma a quanto pare sto facendo qualcosa di sbagliato. Ho cercato aiuto tutto il giorno, ma ho trovato solo materiale per Android e Google Maps API v3. Grazie!

EDIT Il mio codice funziona, ma il raggio non scala, e l'icona appariva sopra l'icona. Quando ho ingrandito la mappa, sono riuscito a vedere il raggio. Esistono tre problemi:

  1. L'icona non viene ridimensionata in base al livello di zoom della mappa.
  2. Il raggio non viene ridimensionato in base al livello di zoom della mappa.
  3. Se la posizione del marcatore viene aggiornata, il raggio non si sposta con esso. Invece, viene disegnato un nuovo raggio ... quindi ci sono due raggi sulla mappa.
+0

Può descrivere come sta andando male, e/o inviare uno screenshot? –

+0

Ho aggiornato il mio post. Apparentemente il mio codice funziona, ma non esattamente come me lo aspettavo. Ci sono 3 problemi che devo affrontare con questo. – Jared

risposta

2

Questa è una specie di tre domande distinte, ma comunque:

1.

Il GMSMarker sia disegnato sempre le stesse dimensioni (in pixel), indipendentemente dalla scala carta. Per un'immagine che si adatta alla mappa, dai un'occhiata a GMSGroundOverlay.

2.

Hai definito il raggio di 3000 metri, quindi dovrebbe essere sempre quelle dimensioni in metri, e così scala con la scala della mappa. O volevi che fosse una dimensione fissa in pixel, quindi aumenti di più in metri mentre riduci lo zoom?

3.

È necessario memorizzare il cerchio come membro (come si fa con il marcatore), e aggiornare la sua posizione ogni volta che si sposta, invece di creare sempre un nuovo circolo.

+0

Anche se questa risposta non è stata la mia soluzione ESATTA, mi ha indirizzato nella giusta direzione. Invece di giocare con 'GMSGroundOverlay', ho appena cambiato la dimensione della mia icona per' GMSMarker'. Un'ulteriore revisione della mia app mi ha mostrato che il raggio si stava ridimensionando. Ho solo bisogno di impostare lo zoom sulla mappa per essere in grado di adattare correttamente il raggio nel 'mapView'. Il numero 3 era la chiave! Non posso credere che non sia venuto da me, ma forse ero troppo concentrato. – Jared

4

Ecco il codice swift per disegnare cerchio sul raggio specificato nel miglio

let circleCenter : CLLocationCoordinate2D = CLLocationCoordinate2DMake(centerLattitude, centerLongitude); 
let circ = GMSCircle(position: circleCenter, radius: distanceInMile * 1609.34) 
circ.fillColor = UIColor(red: 0.0, green: 0.7, blue: 0, alpha: 0.1) 
circ.strokeColor = UIColor(red: 255/255, green: 153/255, blue: 51/255, alpha: 0.5) 
circ.strokeWidth = 2.5; 
circ.map = self.googleMapView; 
Problemi correlati