Как добавить наложение изображений в MKMapView? - PullRequest
0 голосов
/ 30 мая 2019

---------- ОБНОВЛЕНО ------------
оригинальный вопрос внизу


IЯ получил довольно далеко, и у меня есть это сейчас:

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

    @IBOutlet var mapView: MKMapView!

    var locationManager: CLLocationManager!
    var mapOverlay: MKOverlay!

    override func viewDidLoad() {
        super.viewDidLoad()

        var points = [CLLocationCoordinate2D(latitude: -29.8122, longitude: 148.6351),
                      CLLocationCoordinate2D(latitude: -27.9307, longitude: 148.6351),
                      CLLocationCoordinate2D(latitude: -27.9307, longitude: 150.9909),
                      CLLocationCoordinate2D(latitude: -29.8122, longitude: 150.9909)]
        let tile = MKPolygon(coordinates: &points, count: points.count)
        tile.title = "zurich"
        mapView.addOverlay(tile)

        //Setup our Location Manager
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()

        //Setup our Map View
        mapView.delegate = self
        mapView.mapType = MKMapType.satellite
        mapView.showsUserLocation = true
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    // mapView delegate function
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        let renderer = MKPolygonRenderer(overlay: overlay)
        renderer.fillColor = UIColor.red
        return renderer
    }
}

Теперь мне нужно знать, как заменить renderer.fillColor = UIColor.red чем-то, что будет отображать мое изображение.Еще раз спасибо
----- оригинальный вопрос ------

Итак, я новичок в Swift и MapKit и хочу добавитьпростое наложение изображений поверх MKMapView.Я нашел несколько ответов, но все они сбивают с толку, и все они для Swift 3 и более ранних версий.

Я обнаружил, что необходим делегат для представления карты, это файл?Я уже создал вид карты с помощью контроллера основного вида.

Это то, что я сделал до сих пор (это в файле ViewController.swift):

import UIKit
import MapKit

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate
{
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    }

    @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib

        let location = CLLocationCoordinate2D(latitude: 47.457925,
                                              longitude: 8.548466)

        let span = MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05)
        let region = MKCoordinateRegion(center: location, span: span)
        mapView.setRegion(region, animated: true)


    }


}

Спасибои я надеюсь, что вы можете помочь!

1 Ответ

0 голосов
/ 30 мая 2019

Существует множество способов встроить изображение в ваши карты.

  1. Просмотров аннотации
  2. Callouts
  3. Плитка пользовательской карты

Объясните, что вам нужно больше, и, возможно, мы сможем помочь вам лучше понять, как туда добраться.


Вы добавляете оверлей на карту. Мы хотим изменить с определенной плитки карты.

func createLocalUrl(forImageNamed name: String) -> URL? {

    let fileManager = FileManager.default
    let cacheDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0]
    let url = cacheDirectory.appendingPathComponent("\(name).png")

    guard fileManager.fileExists(atPath: url.path) else {
        guard
            let image = UIImage(named: name),
            let data = image.pngData()
            else { return nil }

        fileManager.createFile(atPath: url.path, contents: data, attributes: nil)
        return url
    }

    return url
}

func setupTiles() {
    let url = createLocalUrl(forImageNamed: "yourImageName")
    let template = url?.absoluteString
    let overlay = MKTileOverlay(urlTemplate: template)
    overlay.canReplaceMapContent = true
    self.tileOverlay = overlay
    mapView.addOverlay(overlay)
    self.tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
}

func isInDesiredArea(middlePoint: MKMapPoint) -> Bool {

    //mapView has convert function which converts CGPoint -> 
    //CLLocationCoordinate2D and vice versa Use this function and,
    //Your polygon has boundingMapRect which has contains function.
    //Also your map has func mapView(_ mapView: MKMapView, 
    //regionDidChangeAnimated animated: Bool) which runs whenever region changes..
    return myBoundsPolygon.boundingMapRect.hasContain(middlePoint)

}


func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
 //Convert middle point of your view to CLLocationCoordinate2D
 //Convert your coordinate to MKMapPoint
 if isInDesiredArea(middlePoint: point) {
     setupTiles()
 }
}

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    ....
if overlay is MKTileOverlay {
    return tileRenderer
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...