Отображение нескольких местоположений с помощью «MKMapView» - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь показать несколько мест, которые сохранены в Mysql, используя код ниже.Данные загружаются, но я понятия не имею, как показать несколько мест в зависимости от широты и долготы.Mysql подключен к приложению через файл PHP.Вот мой код, часть, которую я назвал с NSObject:

func downloadItems() {
    // the download function

    // return the nsuserdefaults which hold the lati and longi from the notification table
    UserDefaults.standard.string(forKey: "test");
    let myUrl =  UserDefaults.standard.string(forKey: "test");


    let urlPath: String = myUrl!
    let url: URL = URL(string: urlPath)!
    let defaultSession = Foundation.URLSession(configuration: URLSessionConfiguration.default)

    let task = defaultSession.dataTask(with: url) { (data, response, error) in

        if error != nil {
            print("Failed to download data")
        }else {
            print("Data downloaded")
            self.parseJSON(data!)
        }

    }

    task.resume()

}

func parseJSON(_ data:Data) {

    var jsonResult = NSArray()

    do{
        jsonResult = try JSONSerialization.jsonObject(with: data, options:JSONSerialization.ReadingOptions.allowFragments) as! NSArray



    } catch let error as NSError {
        print(error)

    }

    var jsonElement = NSDictionary()
    let locations = NSMutableArray()

    for i in 0 ..< jsonResult.count
    {

        jsonElement = jsonResult[i] as! NSDictionary

        let location = LocationModel()

        //the following insures none of the JsonElement values are nil through optional binding
        if let evIdL = jsonElement["id"] as? String,
            let evUserNameL = jsonElement["username"] as? String,
            let evNotikindL = jsonElement["notikind"] as? String,
            let evLatiL = jsonElement["lati"] as? String,
            let evLongiL = jsonElement["longi"] as? String,
            let evLocatL = jsonElement["locat"] as? String,
            let evTimedateL = jsonElement["timedate"] as? String,
             let evDistanceL = jsonElement["distance"] as? String

        {

            location.evId = evIdL
            location.evUsername = evUserNameL
            location.evNotikind = evNotikindL
            location.evLati = evLatiL
            location.evLongi = evLongiL
            location.evLocat = evDistanceL
            location.evTimedate = evTimedateL
            location.evDisatnce = evDistanceL
            location.evLocat = evLocatL

        }

        locations.add(location)

    }

    DispatchQueue.main.async(execute: { () -> Void in

        self.delegate.itemsDownloaded(items: locations)


    })
}

}

Я понятия не имею, как показать несколько мест на карте.

1 Ответ

0 голосов
/ 26 ноября 2018

попробуйте этот код ....

 var locations = NSMutableArray()
   var mapView = GMSMapView()

       for i in 0..< location.count{
                    let obj = location[i]
                    lat = obj["lati"] as? Double 
                    lng = obj["longi"] as? Double
                    let markerPoint = GMSMarker()
                    markerPoint.position = CLLocationCoordinate2D(latitude: lat!, longitude: lng!)
                    markerPoint.iconView = self.avtarImage() // Your image name
                    markerPoint.map = mapView  // your mapview object name
                    markerPoint.zIndex = Int32(i)
                    markerPoint.infoWindowAnchor = CGPoint(x: 0, y: 0)
                    markerPoint.accessibilityLabel = String(format: "%d", i)

                }
...