Pārlūkot izejas kodu

Open Street Maps tiles in the location section.

Iñigo Valentin 9 gadi atpakaļ
vecāks
revīzija
d390128d2f
3 mainītis faili ar 75 papildinājumiem un 64 dzēšanām
  1. 24 36
      app/EventController.swift
  2. 3 1
      app/FetchLocation.swift
  3. 48 27
      app/LocationView.swift

+ 24 - 36
app/EventController.swift

@@ -39,7 +39,7 @@ class EventController: UIViewController, UIGestureRecognizerDelegate {
 	var passId: Int = -1
 	var delegate: AppDelegate?
 	
-	var tileRenderer: MKTileOverlayRenderer!
+	var mapRenderer: MKTileOverlayRenderer!
 
 	
 	
@@ -57,12 +57,7 @@ class EventController: UIViewController, UIGestureRecognizerDelegate {
 	*/
 	override func viewDidLoad() {
 		
-		//let mapTemplate: String = "http://tile.openstreetmap.org/{z}/{x}/{y}.png";
-		//let mapOverlay: MKTileOverlay = MKTileOverlay.initWithURLTemplate(mapTemplate)
-		//overlay.canReplaceMapContent = YES
-		//self.eventMap addOverlay(overlay level:MKOverlayLevelAboveLabels];         // (4)
-		
-		// TODO: Pas this
+		// TODO: Pass this as parameter, make an if to show city events.
 		let margolari: Bool = true
 		
 		let context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
@@ -120,18 +115,9 @@ class EventController: UIViewController, UIGestureRecognizerDelegate {
 				}
 				
 				// Set up map
-				setupTileRenderer()
-				//mapView.region = initialRegion
-				eventMap.showsUserLocation = true
-				//mapView.showsCompass = true
-				eventMap.setUserTrackingMode(.followWithHeading, animated: true)
-				//let osmTemplate = "http://tile.openstreetmap.org/{z}/{x}/{y}.png"
-				//let osmOverlay = MKTileOverlay(urlTemplate:osmTemplate)
-				//carte_indice.isGeometryFlipped = true
-				//osmOverlay.canReplaceMapContent = false
-				//self.eventMap.add(osmOverlay, level: .aboveLabels)
-				//tileRenderer = MKTileOverlayRenderer(tileOverlay: osmOverlay)
-				
+				setupMapRenderer()
+				self.eventMap.showsUserLocation = true
+				self.eventMap.setUserTrackingMode(.followWithHeading, animated: true)
 				self.eventMap.delegate = self;
 				
 				// Set marker
@@ -235,25 +221,24 @@ class EventController: UIViewController, UIGestureRecognizerDelegate {
 	}
 	
 	
+	/**
+	Selects the renderer for the map.
+	:return: The map renderer.
+	*/
 	func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
-		return tileRenderer
+		return mapRenderer
 	}
 	
-	func setupTileRenderer() {
-		// 1
-		let template = "https://tile.openstreetmap.org/{z}/{x}/{y}.png"
-		
-		// 2
-		let overlay = MKTileOverlay(urlTemplate: template)
-		
-		// 3
-		overlay.canReplaceMapContent = true
-		
-		// 4
-		eventMap.add(overlay, level: .aboveLabels)
-		
-		//5
-		tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
+	
+	/**
+	Sets up the map renderer using OpenStreet Maps tiles.
+	*/
+	func setupMapRenderer() {
+		let osmTemplate = "https://tile.openstreetmap.org/{z}/{x}/{y}.png"
+		let osmOverlay = MKTileOverlay(urlTemplate: osmTemplate)
+		osmOverlay.canReplaceMapContent = true
+		self.eventMap.add(osmOverlay, level: .aboveLabels)
+		self.mapRenderer = MKTileOverlayRenderer(tileOverlay: osmOverlay)
 	}
 	
 	
@@ -273,9 +258,12 @@ class EventController: UIViewController, UIGestureRecognizerDelegate {
 	}
 }
 
+/**
+Extension to make the class comply with MKMapViewDelegate.
+*/
 extension EventController: MKMapViewDelegate {
 	func eventMap(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
-  return tileRenderer
+		return mapRenderer
 	}
 	
 }

+ 3 - 1
app/FetchLocation.swift

@@ -41,7 +41,9 @@ class FetchLocation{
 	func fetch(){
 		NSLog(":LOCATION:LOG: Fetching location...")
 		
-		let url = URL(string: "https://margolariak.com/API/V1/location.php")
+		// TODO Change for production
+		//let url = URL(string: "https://margolariak.com/API/V1/location.php")
+		let url = URL(string: "http://192.168.1.101/API/V3/location.php")
 		
 		let task = URLSession.shared.dataTask(with: url!) { data, response, error in
 			if error != nil {

+ 48 - 27
app/LocationView.swift

@@ -42,6 +42,8 @@ class LocationView: UIView {
 	
 	var locationTimer: Timer? = nil
 	
+	var mapRenderer: MKTileOverlayRenderer!
+	
 
 	/**
 	Default constructor for the interface builder.
@@ -85,18 +87,6 @@ class LocationView: UIView {
 	}
 	
 	
-	/**
-	Enables the user location dot in the map, checking for permission.
-	:param: manager Location manager used to get the location.
-	:param: didChangeAuthorizationStatus status Permission status
-	*/
-	func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
-		if status == CLAuthorizationStatus.authorizedWhenInUse {
-			//map.isMyLocationEnabled = true
-		}
-	}
-	
-	
 	/**
 	Get new user location and recalculates distance to GM .
 	*/
@@ -113,11 +103,25 @@ class LocationView: UIView {
 				self.lbTitle.isHidden = false
 				self.lbDistance.isHidden = false
 				self.lbNo.isHidden = true
-				//let marker = GMSMarker()
-				//marker.position = CLLocationCoordinate2D(latitude: lat, longitude: lon)
-				//marker.title = "Gasteizko Margolariak"
-				//marker.snippet = "Australia"
-				//marker.map = self.map
+				
+				// Set up map
+				setupMapRenderer()
+				self.map.showsUserLocation = true
+				self.map.delegate = self;
+				
+				// Set marker
+				let annotation = MKPointAnnotation()
+				annotation.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon)
+				self.map.addAnnotation(annotation)
+				
+				
+				// Center map
+				let center = CLLocation(latitude: lat, longitude: lon)
+				let radius: CLLocationDistance = 1000
+				let coordinateRegion = MKCoordinateRegionMakeWithDistance(center.coordinate,
+				                                                          radius, radius)
+				self.map.setRegion(coordinateRegion, animated: true)
+				
 			
 				let location = self.controller.getLocation()
 				if location != nil {
@@ -174,16 +178,33 @@ class LocationView: UIView {
 		return Int(m)
 	}
 	
-	/*
-	// TODO: Whato does this do?
-	func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutableRawPointer) {
-		if !didFindMyLocation {
-			let myLocation: CLLocation = change[NSKeyValueChangeNewKey] as CLLocation
-			map.camera = GMSCameraPosition.camera(withTarget: myLocation.coordinate, zoom: 10.0)
-			map.settings.myLocationButton = true
-			
-			didFindMyLocation = true
-		}
+	/**
+	Selects the renderer for the map.
+	:return: The map renderer.
+	*/
+	func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
+		return mapRenderer
 	}
+	
+	/**
+	Sets up the map renderer using OpenStreet Maps tiles.
 	*/
+	func setupMapRenderer() {
+		let osmTemplate = "https://tile.openstreetmap.org/{z}/{x}/{y}.png"
+		let osmOverlay = MKTileOverlay(urlTemplate: osmTemplate)
+		osmOverlay.canReplaceMapContent = true
+		self.map.add(osmOverlay, level: .aboveLabels)
+		self.mapRenderer = MKTileOverlayRenderer(tileOverlay: osmOverlay)
+	}
+	
+}
+
+/**
+Extension to make the class comply with MKMapViewDelegate.
+*/
+extension LocationView: MKMapViewDelegate {
+	func map(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
+		return mapRenderer
+	}
+	
 }