Post not yet marked as solved
The code available for download at : https://developer.apple.com/documentation/mapkit/mapkit_annotations/annotating_a_map_with_custom_data
Does not work, line 18 of CustomAnnotationView.swift :
private let blurEffect = UIBlurEffect(style: .systemThickMaterial)
returns with error that :
Type 'UIBlurEffect.Style' has no member 'systemThickMaterial'
Hey everyone,
I wanted to ask you guys a question. I'm trying to build an app that shows buses routes. For instance, let's say that Blue Bus is going to Cupertino St but the bus I see coming right now (the Red Bus) is going to Palo Alto St, which is a block away from Cupertino Street.
I'd better off taking the Red Bus which goes a bit out of way than waiting 10 or more minutes for the right bus (Here, the Blue Bus).
Ok, that's what I'm trying to do.
How do I want to do this? I'm thinking of drawing the lines of each specific bus route on the map of the app. So I can look at the app and know the routes, be able to zoom in or zoom out, and etc. I don't need to do directions, time, buses, etc. It should be relatively simple.
Any thoughts? I'm not sure how to draw the buses routes. Thank you!!!
Post not yet marked as solved
I am using MKMapView to display a gps track as an MKPolyline. But when in satellite or hybrid view MKMapView hides parts of the track when I zoom in, even when the entire track should be visible. When I change to street view I get the polyline displayed correctly. Is this a bug in MKMapView or is there some way of forcing the line to sit above the map? My guess is it's something to do with the pseudo-3D rendering that projects trees and other objects above the map plane and results in hiding (or rather preventing the rendering of) parts of the polyline. But I haven't found any way to fix this. I am using a Mac OSX Catalina.
My goal here is to have two users communicating with each other, one of which is coming towards the other one (for the sake of simplicity we'll call moovy the moving one and waity the one's who's waiting). Moovy needs to keep updated waity on the amount of time and distance left to reach him.
Since waity might actually be waiting not only him but more than one user, I preferred to leave the calculation of the remaining time and distance on moovy's device and keep track of it on firebase's realtime database, while waity's device will be listening on a list of 'incoming users'
To update firebase's real time database I put the 'calculating' login within the locationManager(didUpdateLocation)
So my function looks something like this
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let directionsRequest: MKDirections.Request = MKDirections.Request()
directionsRequest.source = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: coordinates.latitude, longitude: coordinates.longitude), addressDictionary: nil))
directionsRequest.destination = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: destination, longitude: destination.longitude), addressDictionary: nil))
directionsRequest.requestsAlternateRoutes = true
directionsRequest.transportType = .automobile
let directions = MKDirections(request: directionsRequest)
var approxTime: Double = 9999
directions.calculate { [self] (response, error) -> Void in
guard let response = response else {
if let error = error {
print("Error: \(error)")
}
return
}
if response.routes.count > 0 {
let route = response.routes[0]
approxTime = route.expectedTravelTime
viewModel.updateDestination(destinationUserId: destination.userId, currentUsername: userStore.userData.username, currentUserLocation: locations.last!, approxTime: approxTime, distance: distanceFromChosen ?? 0) { result in
print(result)
}
}
}
Where destination is Waity's location and id, viewModel is in charge of updating the real time database with Moovy's location, distance and time left to the arrival.
It works pretty fine for the first 10 seconds or so and then it proceeds to stop updating the time and distance left due to a max calls limit reached on the calculate method
Specifically
Error: Error Domain=MKErrorDomain Code=3 "Directions Not Available" UserInfo={NSLocalizedFailureReason=Route information is not available at this moment., MKErrorGEOError=-3, MKErrorGEOErrorUserInfo={details = ({ intervalType = short; maxRequests = 50; "throttler.keyPath" = "app:com.app.bundleid/0x20200/short(default/any)";timeUntilReset = 33; windowSize = 60; }); timeUntilReset = 33;
}, MKDirectionsErrorCode=3, NSLocalizedDescription=Directions Not Available}
Is this the right way to implement the goal I'm trying to achieve. Should I just limit the number of calls with some wait signal or should I use another approach?
How can one prevent auto-zooming with IOS MapKit when using userTrackingMode = .followWithHeading? That is I am setting the current user location to the centre of the screen, and have "view.userTrackingMode = .followWithHeading" so that the map orientates to north, but when you zoom in/out manually the MapView automatically overrides this and zooms back to the level it seems to prefer being at.
I was to be able to zoom in, then the zoom level stays like this, whilst it keeps the map centred to user location, and keeps auto-rotating to keep map aligned to north.
I am using SwiftUI so have effectively do have the location being passed into GCMapView as a parameter (as the means to keep the SwiftUI GCMapView up to date with latest user location). So not sure if this is causing an issue?
Some key bits (have pulled some code out to show relevant lines) of the MapKit call backs I'm using:
struct FlightView: View {
@EnvironmentObject var locationManager : GCLocationManager
@State var centreUserLocation : Bool = false
var body: some View {
GCMapView(
flight: flight,
userLocation: locationManager.userLocation,
centreUserLocation: centreUserLocation,
initalZoomDone: initalZoomDone
)
}
}
struct GCMapView : UIViewRepresentable {
let map = MKMapView()
func makeUIView(context: Context) -> MKMapView {
map.delegate = context.coordinator
map.isRotateEnabled = true
map.userTrackingMode = .followWithHeading
map.showsUserLocation = true
return map
}
func updateUIView(_ view: MKMapView, context: Context) {
if let userLocation = userLocation {
view.centerCoordinate = userLocation
view.userTrackingMode = .followWithHeading // Needed to keep map rotating to align to North
}
}
func makeCoordinator() -> Coordinator {
return Coordinator(self)
}
class Coordinator: NSObject, MKMapViewDelegate {
var parent: GCMapView
init(_ parent: GCMapView) {
self.parent = parent
super.init()
}
}
}
Post not yet marked as solved
MY application crash due to vectorkit md::LabelPart::LabelPart()
I have not found any solution to resovle this issue. Can yopu please provide help in resolving issue.
I have share Logs
Crashed: com.apple.vectorkit.dispatch.layoutbackgroundqueue
0 VectorKit 0x1bce6ca18 md::LabelPart::LabelPart() + 28
1 VectorKit 0x1bd2c23c8 md::TextLabelPart::TextLabelPart(std::__1::shared_ptrmd::LabelText const&) + 24
2 VectorKit 0x1bd2cd010 md::HorizontalTextLabelPart::HorizontalTextLabelPart(std::__1::shared_ptrmd::LabelText const&) + 12
3 VectorKit 0x1bd2fdf14 md::PointLabelFeature::newTextPart(unsigned char, md::LabelManager*, md::Label*, md::LabelStyle*) + 584
4 VectorKit 0x1bd2fd858 md::PointLabelFeature::newRootPart(md::LabelManager*, md::Label*, md::LabelStyle*, md::LabelPartCreationOptions&) + 624
5 VectorKit 0x1bd2a2170 md::Label::createNextPart(md::LabelManager*, md::LabelPartCreationOptionsOverrides const*) + 260
6 VectorKit 0x1bd2a1aa4 md::Label::layoutForStaging(md::LabelManager*, md::LabelPool*) + 3240
7 VectorKit 0x1bd096b98 md::StandardLabeler::layoutLabelsForStaging() + 68
8 VectorKit 0x1bd096ad8 md::StandardLabeler::layoutForStaging(md::LabelUpdateOptions const&) + 120
9 VectorKit 0x1bd1fb190 md::CompositeLabeler::layoutForStaging(md::LabelUpdateOptions const&) + 52
10 VectorKit 0x1bd0675e4 md::LabelManager::layoutForStaging(md::LabelUpdateOptions const&) + 172
11 VectorKit 0x1bd069a84 std::__1::__function::__func<md::LabelManager::evaluateUpdateOperation(bool&, bool&)::$_4, std::__1::allocator<md::LabelManager::evaluateUpdateOperation(bool&, bool&)::$_4>, void ()>::operator()() + 192
12 VectorKit 0x1bcd92f5c invocation function for block in geo::TaskQueue::queueAsyncTask(std::__1::shared_ptrgeo::Task, NSObject<OS_dispatch_group>*) + 80
13 libdispatch.dylib 0x1adb8f2b0 _dispatch_call_block_and_release + 24
14 libdispatch.dylib 0x1adb90298 _dispatch_client_callout + 16
15 libdispatch.dylib 0x1adb38a40 _dispatch_lane_serial_drain$VARIANT$mp + 612
16 libdispatch.dylib 0x1adb39548 _dispatch_lane_invoke$VARIANT$mp + 468
17 libdispatch.dylib 0x1adb42fac _dispatch_workloop_worker_thread + 712
18 libsystem_pthread.dylib 0x1f648d5bc _pthread_wqthread + 272
19 libsystem_pthread.dylib 0x1f649086c start_wqthread + 8
com.apple.main-thread
0 libsystem_kernel.dylib 0x1d9d9a95c semaphore_timedwait_trap + 8
1 libdispatch.dylib 0x1adb32e98 _dispatch_sema4_timedwait$VARIANT$mp + 60
2 libdispatch.dylib 0x1adb33430 _dispatch_semaphore_wait_slow + 72
3 QuartzCore 0x1b1152884 -[CAMetalLayer nextDrawable] + 1060
4 VectorKit 0x1bd36aed0 -[MetalLayer _updateDrawable] + 36
5 VectorKit 0x1bd36b080 -[MetalLayer _onTimerFired:withPresent:] + 308
6 VectorKit 0x1bd0ba928 md::MapEngine::renderScene(double, std::__1::function<void ()>) + 104
7 VectorKit 0x1bd0b8898 md::MapEngine::onRenderTimerFired(double) + 328
8 VectorKit 0x1bd3642a4 ggl::DisplayLink::onTimerFired(double) + 40
9 VectorKit 0x1bd363de8 -[_GGLDisplayLinkTarget displayLinkFired:] + 84
10 QuartzCore 0x1b1028200 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 676
11 IOKit 0x1b85120f8 IODispatchCalloutFromCFMessage + 376
12 CoreFoundation 0x1adeb450c __CFMachPortPerform + 172
13 CoreFoundation 0x1aded80e8 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 56
14 CoreFoundation 0x1aded74ec __CFRunLoopDoSource1 + 588
15 CoreFoundation 0x1aded1660 __CFRunLoopRun + 2376
16 CoreFoundation 0x1aded07d0 CFRunLoopRunSpecific + 572
17 GraphicsServices 0x1c4612570 GSEventRunModal + 160
18 UIKitCore 0x1b07fd2d0 -[UIApplication _run] + 1052
19 UIKitCore 0x1b080284c UIApplicationMain + 164
20 LineGuide 0x102055934 main + 23 (Report.swift:23)
21 libdyld.dylib 0x1adbaf140 start + 4
Post not yet marked as solved
Hi,
I am developing a program for recording geotracks. In order for the track to continue recording even when the program is in the background, I set locationManager.allowsBackgroundLocationUpdates = true. In Backgroung Modes, I also set Location updates.
This works - the track continues recording in the background even when the device is locked. However, sometimes the program will automatically terminate in the background. This can happen in a few minutes or in a few hours. I suspect that the program is forcibly terminated by iOS.
How can i be guaranteed to get rid of this?
Post not yet marked as solved
In our iOS app we use a MKTileOverlay subclass and set tileSize to CGSizeMake(512, 512). This allows tiled maps such as Open Street Maps to display larger for those that need larger font sizes.
Since iOS 15 this no longer works, and the tiles are not large anymore and are small, similar to how it was before we added this feature.
Once tileSize has been set, we use loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *, NSError *))result to return the larger image NSData in the result.
Did something change in OS 15 and MKTileOverlay and tileSize that would require some changes on our end?
Post not yet marked as solved
Hi everyone,
I'm trying to add a tap gesture to a Map with no interactions enabled (static), but it seems that the gesture is intercepted (and ignored) by the Map view.
Is this a bug or there is a way to do it?
Thank you,
I’m trying to make cursor the right way. But it doesn’t work. If I set limit 5, then I can see only 5 records, even I move my finger on the map (I’m using MapKit with CloudKit). If 200 then 200, but have to wait for very long time. I’m sure my cursor is wrong. Who can help me?
func getLocation(completed: @escaping (Result<[AppLocation], Error>) -> Void) {
let sortDescriptor = NSSortDescriptor(key: AppLocation.kName, ascending: true)
let query = CKQuery(recordType: RecordType.location, predicate: NSPredicate(value: true))
query.sortDescriptors = [sortDescriptor]
let operation = CKQueryOperation(query: query)
operation.resultsLimit = 5
operation.query = query
operation.queuePriority = .veryHigh
operation.qualityOfService = .userInteractive
var locations = [AppLocation]()
operation.recordFetchedBlock = { record in
let location = AppLocation(record: record)
locations.append(location)
}
operation.queryCompletionBlock = { (cursor, error) in
DispatchQueue.main.async {
if let error = error {
completed(.failure(error))
} else {
completed(.success(locations))
}
}
}
CKContainer.default().publicCloudDatabase.add(operation)
}
Post not yet marked as solved
I noticed that when searching for restaurants in the Apple Maps app, some restaurants have an "Order" button.
In one of the cases that I looked at, it launches "Yelp".
If I were to build an app for a specific restaurant, and that restaurant offered takeout ordering within the app, then I'd rather have Apple Maps launch my app, instead of Yelp. How would I do that? Having trouble finding the APIs for this.
I still would like the "Order" button right there, as it's very useful. I'd just rather it launch my app (assuming it's installed on the user's device).
Post not yet marked as solved
I've integrated a map view into my app (now using iOS 15). In one particular area I'm getting these kinds of errors in the console of Xcode:
2021-09-29 17:46:16.330607+0100 […] [VKDefault] Building failed to triangulate!
Wrapped around the polygon without finishing... :-(
List has 66 nodes:
144 [...abbreviated...] 2
2021-09-29 17:46:16.331588+0100 […] [VKDefault] Building failed to triangulate!
2021-09-29 17:46:16.493476+0100 […] [ResourceLoading] Failed to load key: 1385568764.285346958 t:35 kt:0 type: 35, -7: GEOErrorDomain
I came across this only because rendering of a static map image using MKMapSnapshotter of that location at a certain zoom level keeps failing without an error all the time, i.e. the completion handler is never called, not even with an error.
If I change the snapshot region or use a wider span I have no issues.
For privacy I won't share the affected location here in the forum.
Any ideas? Is this some kind of unhandled error with problematic map data from Apple?
Post not yet marked as solved
I've notice the 3D globe in apple Maps app is different then the ones provided in mapkit mkmaptype. How can I replicate the style?
Post not yet marked as solved
We have a SDK that we ship via Cocoapods. It contains a map that makes some api calls and then renders custom annotations on the map. I’m running into an issue with MKAnnotationView when trying to integrate with a customer app.
At dev time and in our sample apps, the annotations appear correctly. When the customer tries to integrate it, the map annotations don’t work.
Has anyone ever seen this issue before? I'm not getting any error messages.
The relevant MKMapViewDelegate code is
public func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let place = annotation as? Place {
os_log("Returning saved annotation", log: OSLog.map, type: .info)
return mapView.dequeueReusableAnnotationView(withIdentifier: PlacesAnnotationView.ReuseID) ??
PlacesAnnotationView(annotation: place, reuseIdentifier: PlacesAnnotationView.ReuseID)
}
os_log("Place was nil", log: OSLog.map, type: .error)
return nil
}
public func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let tileOverlay = overlay as? MKTileOverlay {
return MKTileOverlayRenderer(tileOverlay: tileOverlay)
}
return MKOverlayRenderer(overlay: overlay)
}
The ReuseID is in the format of OurName_PlacesAnnotation.
In viewDidLoad, I'm calling map.register(PlacesAnnotationView.self, forAnnotationViewWithReuseIdentifier: "placesViewReuseIdentitier").
Post not yet marked as solved
Folks;
Is there any reason I only receive 25 items in any MKLocalSearch not matter what the request entails?
MacOS 11.6 - Xcode 13.0
Steve
Hello,
I would like to store, save users data inside the app (Best option to store it in the cloud) with location the user reach. The loaction check in point on the map is within radius 100 meters. So the thing I would like to do is to show as a list in the second viewcontroller Zdobyte Szczyty, names of the locations sczyt.name from the first ViewController (the one with the map) that user reached (clicked with a button to check in). I thought about adding a button to the annotation view, which should do the check in if the user is in this radius - but it does not show me the button, just pin. Here is my code:
import UIKit
import MapKit
class ViewController: UIViewController, MKMapViewDelegate{
let locationManager = CLLocationManager()
struct Szczyt {
let name: String
let opis: String
let lattitude: CLLocationDegrees
let longtitude: CLLocationDegrees
var coordinate: CLLocationCoordinate2D {
.init(latitude: lattitude, longitude: longtitude)
}
}
@IBOutlet weak var mapView: MKMapView!
@IBAction func mapTypeSegmentSelected(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
mapView.mapType = .standard
case 1:
mapView.mapType = .satellite
default:
mapView.mapType = .hybrid
}
}
private(set) var circles: [MKCircle]!
let szczyty = [Szczyt(name: "one", opis: "describtion", lattitude: 53.865061725039226, longtitude: 17.708595782487315),
Szczyt(name: "two", opis: "describtion2", lattitude: 55.893874478583854, longtitude: 24.896341184611302),
Szczyt(name: "Skrzyczne", opis: "describtion3", lattitude: 49.685059170137386, longtitude: 19.030076144463138)]
override func viewDidLoad() {
super.viewDidLoad()
mapView.register(MKMarkerAnnotationView.self, forAnnotationViewWithReuseIdentifier: "identifier")
checkLocationServices()
znajdzSzczytyNaMapie(szczyty)
circles = szczyty.map {
MKCircle(center: $0.coordinate, radius: 100)
}
mapView.addOverlays(circles!)
mapView.delegate = self
}
func checkLocationServices() {
if CLLocationManager.locationServicesEnabled() {
checkLocationAuthorization()
} else {
// Show alert letting the user know they have to turn this on.
}
}
func checkLocationAuthorization() {
switch CLLocationManager.authorizationStatus() {
case .authorizedWhenInUse:
mapView.showsUserLocation = true
case .denied: // Show alert telling users how to turn on permissions
break
case .notDetermined:
locationManager.requestWhenInUseAuthorization()
mapView.showsUserLocation = true
case .restricted: // Show an alert letting them know what’s up
break
case .authorizedAlways:
break
}
}
func znajdzSzczytyNaMapie(_ szczyty: [Szczyt]) {
for szczyt in szczyty {
let annotations = MKPointAnnotation()
annotations.title = szczyt.name
annotations.subtitle = szczyt.opis
annotations.coordinate = CLLocationCoordinate2D(latitude:
szczyt.lattitude, longitude: szczyt.longtitude)
mapView.addAnnotation(annotations)
}
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
guard !(annotation is MKUserLocation) else { return nil }
//let annotationView = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: "MyMarker")
let identifier = "identifier"
//guard let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKMarkerAnnotationView else { return nil }
guard let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier, for: annotation) as? MKMarkerAnnotationView else { return nil }
let btn = UIButton(type: .detailDisclosure)
annotationView.rightCalloutAccessoryView = btn
switch annotation.title!! {
case "one":
annotationView.markerTintColor = UIColor(red: 0.86, green: 0.99, blue: 0.79, alpha: 1.00)
annotationView.glyphImage = UIImage(named: "one_pic")
case "two":
annotationView.markerTintColor = UIColor(red: 0.80, green: 0.98, blue: 0.73, alpha: 1.00)
annotationView.glyphImage = UIImage(named: "two_pic"")
case "Skrzyczne":
annotationView.markerTintColor = UIColor(red: 0.02, green: 0.61, blue: 0.69, alpha: 1.00)
annotationView.glyphImage = UIImage(named: "three_pic"")
default:
annotationView.markerTintColor = UIColor.green
annotationView.glyphImage = UIImage(named: "default")
}
return annotationView
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let circleRenderer = MKCircleRenderer(overlay: overlay)
circleRenderer.strokeColor = UIColor.green
circleRenderer.fillColor = UIColor.green
circleRenderer.alpha = 0.3
circleRenderer.lineWidth = 1.0
return circleRenderer
}
}
This is my Zdobyte Szczyty viewcontroller:
import UIKit
import SwiftUI
class Zdobyte_ViewController: UIViewController {
struct ContentView: View {
var body: some View {
Text("Test viewcontroller gór")
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
Here is the button view I would like to have with the pin image, but now it only shows the pin with the image:
This is how my viewcontrollers view looks like:
New guy here, hacking away on the SwiftUI tutorial (https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation ):
In MapView.swift it would be useful to add a pin/marker. Thus adding:
struct Place: Identifiable {
let id = UUID()
let name: String
let coordinate: CLLocationCoordinate2D
}
var annotations = [
Place(name: "Xyz", coordinate: CLLocationCoordinate2D(latitude: 34.011286, longitude: -116.166868))
]
and modifying the View to:
var body: some View {
Map(coordinateRegion: $region, annotationItems: annotations) {
MapPin(coordinate: $0.coordinate)
}
.onAppear {
setRegion(coordinate)
}
}
puts a pin on the Turtle Rock map using the hard-coded latitude and longitude.
However, changing (latitude: 34.011286, longitude: -116.166868) to (latitude: coordinate.latitude, longitude: coordinate.longitude) results in error "Cannot use instance member 'coordinate' within property initializer; property initializers run before 'self' is available."
What modifications to the project are required to access the latitude and longitude for use in the annotation?
I am using the CloudKit cursor in my app and the cursor works because I can see it from the print (cursor code: https://controlc.com/0d42933b). However, I see nothing on the map (I am using MapKit, CloudKit, and SwiftUI in my project). Below is my View Model:
…
func fetchLocations() {
ckController.database.fetchRecords(with: RecordType.location) { (results, moreComing, error) in
print("fetchRecords: results.count = \(results.count), moreComing = \(moreComing), error = \(String(describing: error))")
if !moreComing {
DispatchQueue.main.async { [self] in
objects = results
}
}
}
}
…
Below is my implementation in the view:
…
.task {
if locationManager.locations.isEmpty {
viewModel.fetchLocations()
}
}
…
Print (I have 155 records):
fetchRecords: results.count = 1, moreComing = true, error = nil
fetchRecords: results.count = 2, moreComing = true, error = nil
…
fetchRecords: results.count = 155, moreComing = true, error = nil
fetchRecords: results.count = 155, moreComing = false, error = nil
Somebody knows solutions? Where is a mistake and how I can see all my elements on the map finally?
Post not yet marked as solved
I think there is a bug in MapKit when pedestrian directions are requested. The step geometry returned in the route of the MKDirections.Response is "shifted". The attached picture shows an example of the route steps returned for pedestrian directions between two points. The geometry of the steps on iOS15 is on the left, and the expected geometry of the steps is on the right.
The problem are:
The geometry for the first and second steps are single points located at the beginning of the route. In the example, the geometry of the second step should cover the first two points of the route's polyline.
The geometry of the remaining steps are shifted. The steps start and end one point before the expected location on the route polyline.
This only happens on iOS15, and there is no problem on iOS14.
Below is a unit-test to reproduce the bug. The coordinates used in the test correspond to the picture.
MKStepsTests.swift
The unit test pass on iOS14 and failed on iOS15. On line 74, the test will failed on iOS15 because the first and second step of the route have the same geometry.
Due to this bug, our application does not provide the correct instructions on iOS15.
Hi,
I've been asked to estimate a project that would require ARKit, unfortunately I'm new to the technology and need some quick answers as to how it works.
The app my customer wants to build would overlay simple graphics at street addresses, as the user pointed their camera at buildings or storefronts.
For this to work, I'd need to be able to have the AR view tell me what map locations or street addresses are being seen in the camera view. Is this possible?
Thanks,
Frank