Map Directions
This example shows how to configure a NGLMapView object. The NGLMapView object is a map view that can be used to display maps from the nominatim database. The NGLMapView allow to sets the following properties :
-
showsScale: This property is set to false to disable the scale bar.
-
scaleBarPosition: This property is set to .topLeft to position the scale bar at the top left of the map view.
-
scaleBarMargins: This property can be set to CGPoint to set the margins of the scale bar.
-
compassView.isHidden: This property can be set to true or false to show or hide the compass view.
-
compassViewMargins: This property can be set to CGPoint to set the margins of the compass view.
-
logoView.isHidden: This property can be set to true or false to show or hide the logo view.
-
logoViewMargins: This property can be set to CGPoint to set the margins of the logo view.
-
showsUserLocation: This property can be set to true or false to show or hide the user's location on the map.
-
userTrackingMode: This property can be set to .follow , .followWithHeading .followWithCourse or .none to make the map follow the user's location.
-
showsUserHeadingIndicator: This property can be set to true or false to enable or disable the user's heading indicator.
-
displayHeadingCalibration: This property can be set to true or false to show or hide the heading calibration alert when necessary.
-
targetCoordinate: This property can be set to the coordinate of the map's target.
-
isScrollEnabled: This property can be set to true or false to allow or disallow the user to scroll the map.
-
panScrollingMode: This property is set to .default to allow the user to scroll the map both horizontally and vertically.
-
isRotateEnabled: This property can be set to true or false to enable or disable the user's ability to rotate the map.
-
isPitchEnabled: This property can be set to true or false to allow or disallow the user to change the pitch of the map.
-
anchorRotateOrZoomGesturesToCenterCoordinate: This property can be set to true or false to enable or disable the anchoring of gestures to the center coordinate of the map while rotating or zooming.
Users can also use the following properties to get information from the NGLMapView object.
-
selectedAnnotations : Gets the selected annotations on the map.
-
visibleAnnotations: Gets the visible annotations that display on the map.
-
annotations : Gets all annotations added on the map.
-
visibleAnnotations: Gets the list of annotations associated with the receiver that intersect with the given rectangle.
-
zoomLevel: Gets the current zoom level of the map view.
-
Style: Gets the current map style.
-
userLocation: Gets the annotation object indicating the user's current location.
-
isRotateEnabled: Gets the bool value that determines whether the user may rotate the map, changing the direction.
-
isPitchEnabled: Gets the bool value that determines whether the user may change the pitch (tilt) of the map.
-
Direction: Gets the direction of the map.
For all code examples, refer to Maps Code Examples
MapConfigViewController view source
1import UIKit
2import Nbmap
3
4class MapConfigViewController: UIViewController, NGLMapViewDelegate {
5 var nbMapView: NGLMapView! {
6 didSet {
7 oldValue?.removeFromSuperview()
8 if let mapView = nbMapView {
9 configureMapView(nbMapView)
10 view.insertSubview(mapView, at: 0)
11 }
12 }
13 }
14
15 func configureMapView(_ mapView: NGLMapView) {
16 mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
17 /**
18 Set the map view's delegate.
19 A map view sends messages to its delegate to notify it of changes to its
20 contents or the viewpoint. The delegate also provides information about
21 annotations displayed on the map, such as the styles to apply to individual
22 annotations.
23 If set the delegate the current view controller need to extend with `NGLMapViewDelegate`
24 */
25 mapView.delegate = self
26
27 /**
28 A Boolean value indicating whether the map may display scale information.
29 The scale bar may not be shown at all zoom levels. The scale bar becomes visible
30 when the maximum distance visible on the map view is less than 400 miles (800
31 kilometers). The zoom level where this occurs depends on the latitude at the map
32 view's center coordinate, as well as the device screen width. At latitudes
33 farther from the equator, the scale bar becomes visible at lower zoom levels.
34 The unit of measurement is determined by the user's device locale.
35 The view controlled by this property is available at `scaleBar`. The default value
36 of this property is `NO`.
37 */
38 mapView.showsScale = false
39
40 /**
41 The position of the scale bar. The default value is `.topLeft`. The optional parameters are: `.topLeft`,`.topRight`,`.bottomLeft`,`.bottomRight`
42 */
43 mapView.scaleBarPosition = .topLeft
44 /**
45 A `CGPoint` indicating the position offset of the scale bar.
46 */
47 mapView.scaleBarMargins = CGPoint(x: 10, y: 10)
48
49 // Show or hidden the compass view
50 mapView.compassView.isHidden = false
51
52 // Set the compass view margins
53 mapView.compassViewMargins = CGPoint(x: 16 ,y: 100)
54
55 /**
56 The position of the compass view. The default value is `.topLeft`. The optional parameters are: `.topLeft`,`.topRight`,`.bottomLeft`,`.bottomRight`
57 */
58 mapView.compassViewPosition = .topRight
59
60 /** A `CGPoint` indicating the position offset of the compass view .**/
61 mapView.compassViewMargins = CGPoint(x: 16 ,y: 100)
62
63 // Show or hidden the logo view
64 mapView.logoView.isHidden = false
65 /**
66 The position of the logo view. The default value is `.bopLeft`. The optional parameters are: `.topLeft`,`.topRight`,`.bottomLeft`,`.bottomRight`
67 */
68 mapView.logoViewPosition = .bottomLeft
69
70 /** A `CGPoint` indicating the position offset of the logo. */
71 mapView.logoViewMargins = CGPoint(x: 16 ,y: 100)
72
73 /**
74 A Boolean value indicating whether the map may display the user location.
75 Setting this property to `YES` causes the map view to use the Core Location
76 framework to find the current location. As long as this property is `YES`, the
77 map view continues to track the user's location and update it periodically.
78 This property does not indicate whether the user's position is actually visible
79 on the map, only whether the map view is allowed to display it. To determine
80 whether the user's position is visible, use the `userLocationVisible` property.
81 The default value of this property is `NO`.
82 Your app must specify a value for `NSLocationWhenInUseUsageDescription` or
83 `NSLocationAlwaysUsageDescription` in its `Info.plist` to satisfy the
84 requirements of the underlying Core Location framework when enabling this
85 property.
86 If you implement a custom location manager, set the `locationManager` before
87 calling `showsUserLocation`.
88 */
89 mapView.showsUserLocation = true
90
91 /**
92 The mode used to track the user location. The default value is
93 `NGLUserTrackingModeNone`.
94 The optional parameters are: `.none`, `.follow`.`.followWithHeading`,`.followWithCourse`.
95 Changing the value of this property updates the map view with an animated
96 transition. If you don't want to animate the change, use the
97 `-setUserTrackingMode:animated:` method instead.
98 */
99 mapView.userTrackingMode = .follow
100
101 /**
102 A Boolean value indicating whether the user location annotation may display a
103 permanent heading indicator.
104 Setting this property to `true` causes the default user location annotation to
105 appear and always show an arrow-shaped heading indicator, if heading is
106 available. This property does not rotate the map; for that, see
107 `NGLUserTrackingModeFollowWithHeading`.
108 This property has no effect when `userTrackingMode` is
109 `NGLUserTrackingModeFollowWithHeading` or
110 `NGLUserTrackingModeFollowWithCourse`.
111 The default value of this property is `false`.
112 */
113 mapView.showsUserHeadingIndicator = false
114
115 /**
116 Whether the map view should display a heading calibration alert when necessary.
117 The default value is `true`.
118 */
119 mapView.displayHeadingCalibration = true
120
121 /**
122 The geographic coordinate that is the subject of observation as the user
123 location is being tracked.
124 By default, this property is set to an invalid coordinate, indicating that
125 there is no target. In course tracking mode, the target forms one of two foci
126 in the viewport, the other being the user location annotation. Typically, this
127 property is set to a destination or waypoint in a real-time navigation scene.
128 As the user annotation moves toward the target, the map automatically zooms in
129 to fit both foci optimally within the viewport.
130 This property has no effect if the `userTrackingMode` property is set to a
131 value other than `NGLUserTrackingModeFollowWithCourse`.
132 Changing the value of this property updates the map view with an animated
133 transition. If you don't want to animate the change, use the
134 `-setTargetCoordinate:animated:` method instead.
135 */
136 mapView.targetCoordinate = CLLocationCoordinate2DMake(12.94798778, 77.57375084)
137
138 /**
139 A Boolean value that determines whether the user may zoom the map in and
140 out, changing the zoom level.
141 When this property is set to `true`, the default, the user may zoom the map
142 in and out by pinching two fingers or by double tapping, holding, and moving
143 the finger up and down.
144 This property controls only user interactions with the map. If you set the
145 value of this property to `false`, you may still change the map zoom
146 programmatically.
147 */
148 mapView.isZoomEnabled = true
149
150 /**
151 A Boolean value that determines whether the user may scroll around the map,
152 changing the center coordinate.
153 When this property is set to `true`, the default, the user may scroll the map
154 by dragging or swiping with one finger.
155 This property controls only user interactions with the map. If you set the
156 value of this property to `false`, you may still change the map location
157 programmatically.
158 */
159 mapView.isScrollEnabled = true
160
161 /**
162 The scrolling mode the user is allowed to use to interact with the map.
163 `NGLPanScrollingModeHorizontal` only allows the user to scroll horizontally on the map,
164 restricting a user's ability to scroll vertically.
165 `NGLPanScrollingModeVertical` only allows the user to scroll vertically on the map,
166 restricting a user's ability to scroll horizontally.
167 `NGLPanScrollingModeDefault` allows the user to scroll both horizontally and vertically
168 on the map.
169 By default, this property is set to `NGLPanScrollingModeDefault`.
170 */
171 mapView.panScrollingMode = .default
172
173 /**
174 A Boolean value that determines whether the user may rotate the map,
175 changing the direction.
176 When this property is set to `true`, the default, the user may rotate the map
177 by moving two fingers in a circular motion.
178 This property controls only user interactions with the map. If you set the
179 value of this property to `false`, you may still rotate the map
180 programmatically.
181 */
182 mapView.isRotateEnabled = false
183
184 /**
185 A Boolean value that determines whether the user may change the pitch (tilt) of
186 the map.
187 When this property is set to `true`, the default, the user may tilt the map by
188 vertically dragging two fingers.
189 This property controls only user interactions with the map. If you set the
190 value of this property to `false`, you may still change the pitch of the map
191 programmatically.
192 The default value of this property is `true`.
193 */
194 mapView.isPitchEnabled = true
195 /**
196 A Boolean value that determines whether gestures are anchored to the center coordinate of the map while rotating or zooming.
197 Default value is set to `false`..
198 */
199 mapView.anchorRotateOrZoomGesturesToCenterCoordinate = false
200 /**
201 A floating-point value that determines the rate of deceleration after the user
202 lifts their finger.
203 Your application can use the `NGLMapViewDecelerationRate.normal` and
204 `NGLMapViewDecelerationRate.fast` constants as reference points for reasonable
205 deceleration rates. `NGLMapViewDecelerationRate.immediate` can be used to
206 disable deceleration entirely.
207 */
208 mapView.decelerationRate = NGLMapViewDecelerationRate.normal.rawValue
209
210 /** The zoom level of the receiver.
211 In addition to affecting the visual size and detail of features on the map,
212 the zoom level affects the size of the vector tiles that are loaded. At zoom
213 level 0, each tile covers the entire world map; at zoom level 1, it covers 1/4
214 of the world; at zoom level 2, <sup>1</sup>⁄<sub>16</sub> of the world, and
215 so on.
216 Changing the value of this property updates the map view immediately. If you
217 want to animate the change, use the `-setZoomLevel:animated:` method instead.
218 */
219 mapView.zoomLevel = 18
220 /**
221 * The minimum zoom level at which the map can be shown.
222 *
223 * Depending on the map view's aspect ratio, the map view may be prevented
224 * from reaching the minimum zoom level, in order to keep the map from
225 * repeating within the current viewport.
226 *
227 * If the value of this property is greater than that of the
228 * maximumZoomLevel property, the behavior is undefined.
229 *
230 * The default minimumZoomLevel is 0.
231 */
232 mapView.minimumZoomLevel = 0
233 /**
234 * The maximum zoom level the map can be shown at.
235 *
236 * If the value of this property is smaller than that of the
237 * minimumZoomLevel property, the behavior is undefined.
238 *
239 * The default maximumZoomLevel is 22. The upper bound for this property
240 * is 25.5.
241 */
242 mapView.maximumZoomLevel = 22
243
244 /**
245 The heading of the map, measured in degrees clockwise from true north.
246 The value `0` means that the top edge of the map view corresponds to true
247 north. The value `90` means the top of the map is pointing due east. The
248 value `180` means the top of the map points due south, and so on.
249 Changing the value of this property updates the map view immediately. If you
250 want to animate the change, use the `-setDirection:animated:` method instead.
251 */
252 mapView.direction = 0
253 /**
254 The minimum pitch of the map's camera toward the horizon measured in degrees.
255 If the value of this property is greater than that of the `maximumPitch`
256 property, the behavior is undefined. The pitch may not be less than 0
257 regardless of this property.
258 The default value of this property is 0 degrees, allowing the map to appear
259 two-dimensional.
260 */
261 mapView.minimumPitch = 0
262 /**
263 The maximum pitch of the map's camera toward the horizon measured in degrees.
264 If the value of this property is smaller than that of the `minimumPitch`
265 property, the behavior is undefined. The pitch may not exceed 60 degrees
266 regardless of this property.
267 The default value of this property is 60 degrees.
268 */
269 mapView.maximumPitch = 60
270
271 /**
272 The coordinate bounds visible in the receiver's viewport.
273 Changing the value of this property updates the receiver immediately. If you
274 want to animate the change, call `-setVisibleCoordinateBounds:animated:`
275 instead.
276 If a longitude is less than −180 degrees or greater than 180 degrees, the
277 visible bounds straddles the antimeridian or international date line. For
278 example, if both Tokyo and San Francisco are visible, the visible bounds might
279 extend from (35.68476, −220.24257) to (37.78428, −122.41310).
280 */
281// mapView.visibleCoordinateBounds
282
283 /**
284 The distance from the edges of the map view's frame to the edges of the map
285 view's logical viewport.
286 When the value of this property is equal to `UIEdgeInsetsZero`, viewport
287 properties such as `centerCoordinate` assume a viewport that matches the map
288 view's frame. Otherwise, those properties are inset, excluding part of the
289 frame from the viewport. For instance, if the only the top edge is inset, the
290 map center is effectively shifted downward.
291
292 When the map view's superview is an instance of `UIViewController` whose
293 `automaticallyAdjustsScrollViewInsets` property is `YES`, the value of this
294 property may be overridden at any time.
295
296 The usage of `automaticallyAdjustsScrollViewInsets` has been deprecated
297 use the map view's property `NGLMapView.automaticallyAdjustsContentInset`instead.
298 Changing the value of this property updates the map view immediately. If you
299 want to animate the change, use the `-setContentInset:animated:completionHandler:`
300 method instead.
301 */
302 mapView.contentInset = UIEdgeInsets.zero
303
304 /**
305 URL of the style currently displayed in the receiver.
306 The URL may be a full HTTP or HTTPS URL, a Nbmap
307 style URL (`nbmap://styles/{user}/{style}`), or a path to a local file
308 relative to the application's resource path.
309 If you set this property to `nil`, the receiver will use the default style
310 and this property will automatically be set to that style's URL.
311 If you want to modify the current style without replacing it outright, or if
312 you want to introspect individual style attributes, use the `style` property.
313 */
314// self.mapView?.styleURL = URL(string: styleUrl)
315 /**
316 The options that determine which debugging aids are shown on the map.
317 These options are all disabled by default and should remain disabled in
318 released software for performance and aesthetic reasons.
319 */
320
321 }
322
323 override func viewDidLoad() {
324 super.viewDidLoad()
325 /**
326 Initialize the map view
327 */
328 nbMapView = NGLMapView(frame:self.view.bounds)
329 /**
330 Get the select annotations on the map
331 */
332 let selectedAnnotations = nbMapView.selectedAnnotations
333 /**
334 Get the visible annotations that display on the map
335 */
336 let visibleAnnotations = nbMapView.visibleAnnotations
337
338 /**
339 Get all annotations added on the map
340 */
341 let annotation = nbMapView.annotations
342
343 /**
344 Get the list of annotations associated with the receiver that intersect with
345 the given rectangle.
346 */
347 let visibleAnnotationsInRect = nbMapView.visibleAnnotations(in: CGRect(x: 100, y: 100, width: 100, height: 100))
348
349 /**
350 Get the current zoom level of the map view
351 */
352 let zoomLevel = nbMapView.zoomLevel
353
354 /**
355 Get the current map style
356 */
357 let style = nbMapView.style ?? NGLStyle()
358
359 /**
360 Get the annotation object indicating the user's current location.
361 */
362 let userLocation = nbMapView.userLocation ?? NGLUserLocation()
363
364 /**
365 Get the bool value that whether the user may rotate the map, changing the direction.
366 */
367 let isRotateEnabled: Bool = nbMapView.isRotateEnabled
368 /**
369 Get the bool value that whether the user may change the pitch (tilt) of the map.
370 **/
371
372 let isPitchEnabled: Bool = nbMapView.isPitchEnabled
373
374 /**
375 Get the direction of the map
376 */
377 let direction: CLLocationDirection = nbMapView.direction
378
379 }
380
381}