Display map or satellite imagery from your app's interface, call out points of interest, and determine placemark information for map coordinates using MapKit.

Posts under MapKit tag

200 Posts

Post

Replies

Boosts

Views

Activity

MapKit polygon render bug when single-vertex self-intersection
We have to draw polygons inside a MKMapView based on coordinates retrieved from external source. It seems that MapKit does not behave correctly where polygons have single-vertex self-intersection. Here it's a simple point list example (every element is a pair of latitude and longitude values): [(0, 0), (20, 0), (10, 10), (20, 20), (0, 20), (10, 10), (0, 0)] The next image shows the rendering issue. But if the list is slightly changed in this way [(0, 0), (20, 0), (10, 10), (20, 20), (0, 20), (15, 10), (0, 0)] the issue disappears. The next image shows it. So it's not a self-intersection and self-tangency problem, but we think single-vertex self-intersection is a buggy edge case for MapKit. Right now we fixed this problem by finding the duplicated coordinates and applying a small offset (1e-8) to one of them, but it's a temporary solution and adds rendering delay. The problem is not due to iOS versions, since iOS 17 and 18 have the same issue. Also it happens on simulators and real devices. Here is the playground example, based mostly on the "Map Playground" template Xcode offers. If you run it without modifying it, the playground shows the "bugged" polygon. If you use notBugPoints instead of the default bugPoints for the polygon, the playground shows the "not-bugged" polygon. import MapKit import PlaygroundSupport // Create an MKMapViewDelegate to provide a renderer for our overlay class MapViewDelegate: NSObject, MKMapViewDelegate { func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { if let overlay = overlay as? MKPolygon { let polygonRenderer = MKPolygonRenderer(overlay: overlay) polygonRenderer.fillColor = .red return polygonRenderer } return MKOverlayRenderer(overlay: overlay) } } // Create a strong reference to a delegate let delegate = MapViewDelegate() // Create an MKMapView let mapView = MKMapView(frame: CGRect(x: 0, y: 0, width: 800, height: 800)) mapView.delegate = delegate // Configure The Map elevation and emphasis style let configuration = MKStandardMapConfiguration(elevationStyle: .realistic, emphasisStyle: .default) mapView.preferredConfiguration = configuration // Create an overlay let bugPoints = [ MKMapPoint(CLLocationCoordinate2DMake(0, 0)), MKMapPoint(CLLocationCoordinate2DMake(20, 0)), MKMapPoint(CLLocationCoordinate2DMake(10, 10)), MKMapPoint(CLLocationCoordinate2DMake(20, 20)), MKMapPoint(CLLocationCoordinate2DMake(0, 20)), MKMapPoint(CLLocationCoordinate2DMake(10, 10)), MKMapPoint(CLLocationCoordinate2DMake(0, 0)) ] let notBugPoints = [ MKMapPoint(CLLocationCoordinate2DMake(0, 0)), MKMapPoint(CLLocationCoordinate2DMake(20, 0)), MKMapPoint(CLLocationCoordinate2DMake(10, 10)), MKMapPoint(CLLocationCoordinate2DMake(20, 20)), MKMapPoint(CLLocationCoordinate2DMake(0, 20)), MKMapPoint(CLLocationCoordinate2DMake(15, 10)), MKMapPoint(CLLocationCoordinate2DMake(0, 0)) ] let polygon = MKPolygon(points: bugPoints, count: notBugPoints.count) mapView.addOverlay(polygon) // Frame our annotation and overlay mapView.camera = MKMapCamera(lookingAtCenter: CLLocationCoordinate2DMake(10, 10), fromDistance: 5000000, pitch: 0, heading: 0) // Add the created mapView to our Playground Live View PlaygroundPage.current.liveView = mapView
2
0
686
Nov ’24
Center Map in SwiftUI to specific latitude and longitude.
I have a Map in SwiftUI using MapKit and the map has several annotations and MapCircles added to it. I need to have the ability to center the map on a specific latitude and longitude. The issue is that the map instead is centering so that all annotations and MapCircles etc. are visible. How can I have it disregard items added to the map and center the map at a specific latitude and longitude and ideally, control the zoom level of the map also?
1
0
617
Nov ’24
MapkitJS - not able to click on PointOfInterest and use it for actions
Hi, Have been trying to work with MapkitJS for a website, but I'm stumped on once basic capability: I want to be able to click on a point of interest, and perform some actions such as: Get its coordinates Attach an annotation to it (e.g. a callout) In my code, PointOfInterest's are selectable: map.selectableMapFeatures = [ mapkit.MapFeatureType.PointOfInterest, ]; But when I click on one, I do see the marker pop up but nothing else (which is not much help since there is no additional information in the marker itself). I see no event getting triggered that I can do something with. I am using an event listener as follows: map.addEventListener('single-tap', (event) => { const coordinate = map.convertPointOnPageToCoordinate(event.pointOnPage); console.log('Map tapped at:', coordinate); console.log('Map tapped event:', event); ... I guess I have to grab the Place ID somehow but I don't know how to. Thanks for any help.
0
0
699
Nov ’24
Apple Map Snapshot API broken??
I have been using the following python library to generate apple map snapshots. has worked fine until about ~12 hours ago - now all I'm getting is "bad request" for any snapshot with overlays. if it's just a snapshot with a defined center and no polyline overlays, it still works. perhaps something has changed with the api's way of parsing percent encoded parameters? it's super irritating that there's no changelog or source code to view. what the heck??? https://pypi.org/project/mapsnap/
0
2
819
Oct ’24
Apple maps trail / local path only becomes visible on very close zoom
I'm using apple maps to build a feature so users can create and save running/cycling/hiking routes. Currently the map only shows trails and similar local paths after zooming in to what is basically an extreme level. I want the trails and local paths to be more visible on a further, broader level of zoom. APPLE MAPS JS EX: https://trkbucket.s3.amazonaws.com/media/shoe_images/Screenshot_2024-10-23_at_10.52.17AM.png https://trkbucket.s3.amazonaws.com/media/shoe_images/Screenshot_2024-10-23_at_10.52.04AM.png APPLE MAPS iOS EX: https://trkbucket.s3.amazonaws.com/media/shoe_images/IMG_9DDF5C9A320D-1.jpeg Also strange that on iOS the path is visible while more zoomed out whereas JS does not. Please advise how to show these map items at a broader zoom.
1
0
804
Oct ’24
how to show subway exit in the mapkit mapview
mapView.showsTraffic=true mapView.showsScale=true mapView.showsCompass=true mapView.showsUserLocation=true mapView.showsBuildings=true mapView.showsLargeContentViewer=true hi,guy,please help to see this problem,thankyou,the mapkit api support some showsfunction,but I can not find how to show the exit of subway in my own app,but the map app of appple shows the exit of the subway,so how can I show the exit of the subway stations by using mapkit
1
0
495
Oct ’24
MapKit elevation information for a route
Hello all, I am playing with MapKit for SwiftUI, so far so good. There is one thing I have not seen any documentations, or sample codes around and that's elevation data, e.g. My questions are: Is there a way to get this information from an MKRoute? Is it possible to get the elevation gain/drop at a given point in the route? Many thank in advance for your help.
1
1
760
Oct ’24
using mapkit keep getting error message is it a bug?
I keep getting these messages every time the location of the user updates on the map. Although I doublechecked throughout my code and and I am not doing it within the view??? messages I receive: Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior
1
0
312
Oct ’24
Intermittent MKLocalSearch.Request Failures with Amap Data Source
My app has been using MKLocalSearch.Request for keyword-based location searches, and it has worked smoothly for a long time. However, starting last Wednesday, I began receiving an error from MKLocalSearch.start: MKErrorDomain (error code 4). This issue only occurs when the network environment is based in mainland China (where the API uses the Amap data source). When the network switches to other regions and other Apple Maps data source is used, the error does not occur. Another complication is that the API doesn't always fail—certain keywords still work (for example, "Huawei"). Already filed a ticket in Feedback Assistant: https://feedbackassistant.apple.com/feedback/15544549
1
0
531
Oct ’24
can I specify the transit mode
aoubut MKLaunchOptionsDirectionsModeKey, when I use MKLaunchOptionsDirectionsModeTransit as a mode in my code to call function openMaps ,the apple map app launches,it has 4 mode ,subbay or ferry,bus etc,so how can I specify the subway to transit before apple map app launch,so that I do not need to select on the map app,just specific subway in my own app, then the map app auto select the subway transit navigation。now it shows two much usless route。
0
0
418
Oct ’24
SwiftUI MapKit - MapAnnotation - Publishing changes from within view updates is not allowed, this will cause undefined behavior.
So I'm trying to use MapKit in a SwiftUI project targeting iOS/iPadOS. MapKit is obviously pretty limited in SwiftUI, but I've been getting warnings trying to set up basic annotations for the user to interact with. When I use a basic MapMarker everything is fine (although it's hard to do anything with it), but whenever I do anything with MapAnnotation, I get this warning in Xcode (14.0.1) whenever I move the map around: [SwiftUI] Publishing changes from within view updates is not allowed, this will cause undefined behavior. I'm no SwiftUI expert, and I get how to fix this issue when binding in something like a sheet, but I don't see how what I'm doing with MapAnnotation should be causing this. It looks like a bug to me, possibly complaining about the $region binding, but maybe I'm wrong? Am I doing something wrong or is this a bug? Below is some sample code that reproduces this easily for me (just launch an app with the below code and then drag the map around to see the constant warnings in Xcode). It's mostly an example from here: https://www.hackingwithswift.com/books/ios-swiftui/integrating-mapkit-with-swiftui import SwiftUI import MapKit struct Location: Identifiable {     let id = UUID()     let name: String     let coordinate: CLLocationCoordinate2D } struct ContentView: View {     @State private var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 51.5, longitude: -0.12), span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2))     let locations = [         Location(name: "Buckingham Palace", coordinate: CLLocationCoordinate2D(latitude: 51.501, longitude: -0.141)),         Location(name: "Tower of London", coordinate: CLLocationCoordinate2D(latitude: 51.508, longitude: -0.076))     ]     var body: some View {         Map(coordinateRegion: $region, annotationItems: locations) { location in             MapAnnotation(coordinate: location.coordinate) {                 Circle()                     .stroke(.red, lineWidth: 3)                     .frame(width: 44, height: 44)             }         }         .navigationTitle("Map")         .edgesIgnoringSafeArea(.all)     } }
20
14
11k
Oct ’24
MapCameraPosition camera region rect item all of them are nil
@State var position : MapCameraPosition = .userLocation(fallback: .region(.defaultRegion)) Map(position: $position) {} .onAppear { Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in print("check.position",position.camera,position.region,position.rect,position.item) } } All of the value are nil, so how do I get the current camera position?? check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil It is always nil (even if I manually move around the Map with a finger)
1
0
551
Oct ’24
Apple Maps Not responding to scrolling, zooming, or tap gestures on custom pins
Scrolling and zooming I have two apps that utilize the Apple Maps and since I updated my xcode to use IOS18, some of the functionalities have either been missing or glitching, and when I roll back to IOS17.5, everything seems to work fine. When I use MKMapView and use mapView.isZoomEnabled = true mapView.isScrollEnabled = true Scrolling and zooming is still not working on IOS18 but IOS17.5 works fine. Clicking on custom annotations When I press on a custom annotation I add to the MapView, the gesture is sometimes recognized and most of the times not recognized. If I have 20 annotations, there is a possibility only 2 of them respond to tap gestures. Below is how I define the annotation. Annotation("Pin", coordinate: CLLocationCoordinate2D(latitude: latitude, longitude: longitude), anchor: .bottom) { Button(action: {print ("Pressed annotation"){ CustomPin() } }
0
0
435
Oct ’24
MKLocalSearch for cities - How to uniquely identify results?
I'm using MKLocalSearch with resultTypes set to .address to search for cities. The search results don't include an ID for each city, which I need for database storage (which from my understanding is the only thing we can store). If I can't store the city name, country, and coordinates in my database, and I'm not allowed to use third-party data (like a pre-made list of cities with coordinates), what are my options for uniquely identifying and storing these city results? Any suggestions would be greatly appreciated.
0
0
516
Oct ’24
Mapkit and swiftui
I have updated my map code so that now I have a region that is set as a state var in my strict. My map links to this state var. the problem is now I want to update my map based on my long and last variables that are passed to the struct is there a way to do this - going crazy trying to do this
3
0
5.0k
Sep ’24
MKLocalSearch for cities not returning location identities
Hi fellow developers, I'm encountering an issue when using MKLocalSearch to search for cities. Here's my setup: I'm using MKLocalSearch with an MKLocalSearch.Request object. I've set the resultTypes to .address to focus on address results. The problem: When I receive the search response, it includes the locations as expected. However, these locations don't have an identity or alternative identities. Questions: Is this the expected behavior when searching for cities? Without an identity, how can I uniquely identify and store these city results in my database? Would it be appropriate to store the city name, country, and coordinates instead? Thanks in advance!
1
1
483
Sep ’24
MapAnnotation Position
I am working on a MapView with MapAnnotation on the Map and am having difficulty getting the MapAnnotation to function properly when selected. In my code, I want the MapAnnotation selected to be to the front if it is behind or partially blocked by another annotation. I have tried using a zIndex but this does not appear to work. Below is my MapView code along with a screenshot of the issue. Any help would be greatly appreciated. struct HospitalMapView: View { @StateObject var viewModel = HospitalViewModel() @State private var showSearchView = false @State private var showListView = false @State private var selectedTab: Int = 0 var body: some View { ZStack { VStack(spacing: 0) { TopTabView() // Map that updates the visible hospitals when the user moves or adjusts the map Map(coordinateRegion: $viewModel.region, interactionModes: .all, annotationItems: viewModel.filteredHospitals) { hospital in MapAnnotation(coordinate: CLLocationCoordinate2D(latitude: hospital.latitude, longitude: hospital.longitude)) { RoundedRectangle(cornerRadius: 40) .fill(viewModel.colorForPercentile(viewModel.calculatePercentile(for: hospital, in: viewModel.filteredHospitals))) .frame(width: 70, height: 30) // Maintain consistent size, adjust if necessary .overlay( Text("$\(Int(hospital.baseCharge / 1000))K") .foregroundColor(.white) .bold() ) .overlay( RoundedRectangle(cornerRadius: 40) .stroke(Color.blue, lineWidth: viewModel.selectedHospital == hospital ? 3 : 0) ) .onTapGesture { viewModel.selectHospital(hospital) // Move the selected hospital to the end of the list to bring it to the front viewModel.bringHospitalToFront(hospital) viewModel.showBottomSheet = true } .scaleEffect(viewModel.selectedHospital == hospital ? 1.1 : 1.0) // Highlight the selected hospital .zIndex(viewModel.selectedHospital == hospital ? 1 : 0) // Set the zIndex higher for the selected hospital .animation(.easeInOut, value: viewModel.selectedHospital) // Smooth transition } } .onAppear { // Initial update of visible hospitals when the map appears viewModel.updateFilteredHospitals() } .onChange(of: viewModel.region) { _ in // Update the visible hospitals as the user changes the map region viewModel.updateFilteredHospitals() } .edgesIgnoringSafeArea(.all) } // Hospital count display hovering over the map Text("\(viewModel.filteredHospitals.count) Hospitals") .font(.subheadline) .foregroundColor(.white) .padding(8) .background(Color.black.opacity(0.6)) .cornerRadius(10) .padding(.top, -315) // Adjust padding to position correctly below the TopTabView .zIndex(1) // Ensure it's above the map if let selectedHospital = viewModel.selectedHospital, viewModel.showBottomSheet { BottomSheetView(isOpen: $viewModel.showBottomSheet, maxHeight: UIScreen.main.bounds.height * 0.3) { SummaryTabView(selectedHospital: Binding( get: { selectedHospital }, set: { newValue in viewModel.selectHospital(newValue) } )) } .transition(.move(edge: .bottom)) .animation(.spring()) } } .safeAreaInset(edge: .bottom) { BottomTabView(selectedTab: $selectedTab, showListView: $showListView, showSearchView: $showSearchView, onSearchSelected: { showSearchView = true showListView = false }, onHomeSelected: { showSearchView = false showListView = false }, onListSelected: { showListView = true showSearchView = false }) } .fullScreenCover(isPresented: $showSearchView) { SearchView(viewModel: viewModel, showSearchView: $showSearchView, selectedTab: $selectedTab, showListView: $showListView) } .fullScreenCover(isPresented: $showListView) { ListView(selectedTab: $selectedTab, showListView: $showListView, showSearchView: $showSearchView) .environmentObject(viewModel) } .environmentObject(viewModel) } }
0
0
528
Sep ’24
MapKit polygon render bug when single-vertex self-intersection
We have to draw polygons inside a MKMapView based on coordinates retrieved from external source. It seems that MapKit does not behave correctly where polygons have single-vertex self-intersection. Here it's a simple point list example (every element is a pair of latitude and longitude values): [(0, 0), (20, 0), (10, 10), (20, 20), (0, 20), (10, 10), (0, 0)] The next image shows the rendering issue. But if the list is slightly changed in this way [(0, 0), (20, 0), (10, 10), (20, 20), (0, 20), (15, 10), (0, 0)] the issue disappears. The next image shows it. So it's not a self-intersection and self-tangency problem, but we think single-vertex self-intersection is a buggy edge case for MapKit. Right now we fixed this problem by finding the duplicated coordinates and applying a small offset (1e-8) to one of them, but it's a temporary solution and adds rendering delay. The problem is not due to iOS versions, since iOS 17 and 18 have the same issue. Also it happens on simulators and real devices. Here is the playground example, based mostly on the "Map Playground" template Xcode offers. If you run it without modifying it, the playground shows the "bugged" polygon. If you use notBugPoints instead of the default bugPoints for the polygon, the playground shows the "not-bugged" polygon. import MapKit import PlaygroundSupport // Create an MKMapViewDelegate to provide a renderer for our overlay class MapViewDelegate: NSObject, MKMapViewDelegate { func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { if let overlay = overlay as? MKPolygon { let polygonRenderer = MKPolygonRenderer(overlay: overlay) polygonRenderer.fillColor = .red return polygonRenderer } return MKOverlayRenderer(overlay: overlay) } } // Create a strong reference to a delegate let delegate = MapViewDelegate() // Create an MKMapView let mapView = MKMapView(frame: CGRect(x: 0, y: 0, width: 800, height: 800)) mapView.delegate = delegate // Configure The Map elevation and emphasis style let configuration = MKStandardMapConfiguration(elevationStyle: .realistic, emphasisStyle: .default) mapView.preferredConfiguration = configuration // Create an overlay let bugPoints = [ MKMapPoint(CLLocationCoordinate2DMake(0, 0)), MKMapPoint(CLLocationCoordinate2DMake(20, 0)), MKMapPoint(CLLocationCoordinate2DMake(10, 10)), MKMapPoint(CLLocationCoordinate2DMake(20, 20)), MKMapPoint(CLLocationCoordinate2DMake(0, 20)), MKMapPoint(CLLocationCoordinate2DMake(10, 10)), MKMapPoint(CLLocationCoordinate2DMake(0, 0)) ] let notBugPoints = [ MKMapPoint(CLLocationCoordinate2DMake(0, 0)), MKMapPoint(CLLocationCoordinate2DMake(20, 0)), MKMapPoint(CLLocationCoordinate2DMake(10, 10)), MKMapPoint(CLLocationCoordinate2DMake(20, 20)), MKMapPoint(CLLocationCoordinate2DMake(0, 20)), MKMapPoint(CLLocationCoordinate2DMake(15, 10)), MKMapPoint(CLLocationCoordinate2DMake(0, 0)) ] let polygon = MKPolygon(points: bugPoints, count: notBugPoints.count) mapView.addOverlay(polygon) // Frame our annotation and overlay mapView.camera = MKMapCamera(lookingAtCenter: CLLocationCoordinate2DMake(10, 10), fromDistance: 5000000, pitch: 0, heading: 0) // Add the created mapView to our Playground Live View PlaygroundPage.current.liveView = mapView
Replies
2
Boosts
0
Views
686
Activity
Nov ’24
Center Map in SwiftUI to specific latitude and longitude.
I have a Map in SwiftUI using MapKit and the map has several annotations and MapCircles added to it. I need to have the ability to center the map on a specific latitude and longitude. The issue is that the map instead is centering so that all annotations and MapCircles etc. are visible. How can I have it disregard items added to the map and center the map at a specific latitude and longitude and ideally, control the zoom level of the map also?
Replies
1
Boosts
0
Views
617
Activity
Nov ’24
MapkitJS - not able to click on PointOfInterest and use it for actions
Hi, Have been trying to work with MapkitJS for a website, but I'm stumped on once basic capability: I want to be able to click on a point of interest, and perform some actions such as: Get its coordinates Attach an annotation to it (e.g. a callout) In my code, PointOfInterest's are selectable: map.selectableMapFeatures = [ mapkit.MapFeatureType.PointOfInterest, ]; But when I click on one, I do see the marker pop up but nothing else (which is not much help since there is no additional information in the marker itself). I see no event getting triggered that I can do something with. I am using an event listener as follows: map.addEventListener('single-tap', (event) => { const coordinate = map.convertPointOnPageToCoordinate(event.pointOnPage); console.log('Map tapped at:', coordinate); console.log('Map tapped event:', event); ... I guess I have to grab the Place ID somehow but I don't know how to. Thanks for any help.
Replies
0
Boosts
0
Views
699
Activity
Nov ’24
Apple Map Snapshot API broken??
I have been using the following python library to generate apple map snapshots. has worked fine until about ~12 hours ago - now all I'm getting is "bad request" for any snapshot with overlays. if it's just a snapshot with a defined center and no polyline overlays, it still works. perhaps something has changed with the api's way of parsing percent encoded parameters? it's super irritating that there's no changelog or source code to view. what the heck??? https://pypi.org/project/mapsnap/
Replies
0
Boosts
2
Views
819
Activity
Oct ’24
Apple maps trail / local path only becomes visible on very close zoom
I'm using apple maps to build a feature so users can create and save running/cycling/hiking routes. Currently the map only shows trails and similar local paths after zooming in to what is basically an extreme level. I want the trails and local paths to be more visible on a further, broader level of zoom. APPLE MAPS JS EX: https://trkbucket.s3.amazonaws.com/media/shoe_images/Screenshot_2024-10-23_at_10.52.17AM.png https://trkbucket.s3.amazonaws.com/media/shoe_images/Screenshot_2024-10-23_at_10.52.04AM.png APPLE MAPS iOS EX: https://trkbucket.s3.amazonaws.com/media/shoe_images/IMG_9DDF5C9A320D-1.jpeg Also strange that on iOS the path is visible while more zoomed out whereas JS does not. Please advise how to show these map items at a broader zoom.
Replies
1
Boosts
0
Views
804
Activity
Oct ’24
how to show subway exit in the mapkit mapview
mapView.showsTraffic=true mapView.showsScale=true mapView.showsCompass=true mapView.showsUserLocation=true mapView.showsBuildings=true mapView.showsLargeContentViewer=true hi,guy,please help to see this problem,thankyou,the mapkit api support some showsfunction,but I can not find how to show the exit of subway in my own app,but the map app of appple shows the exit of the subway,so how can I show the exit of the subway stations by using mapkit
Replies
1
Boosts
0
Views
495
Activity
Oct ’24
MapKit elevation information for a route
Hello all, I am playing with MapKit for SwiftUI, so far so good. There is one thing I have not seen any documentations, or sample codes around and that's elevation data, e.g. My questions are: Is there a way to get this information from an MKRoute? Is it possible to get the elevation gain/drop at a given point in the route? Many thank in advance for your help.
Replies
1
Boosts
1
Views
760
Activity
Oct ’24
using mapkit keep getting error message is it a bug?
I keep getting these messages every time the location of the user updates on the map. Although I doublechecked throughout my code and and I am not doing it within the view??? messages I receive: Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior. Publishing changes from within view updates is not allowed, this will cause undefined behavior
Replies
1
Boosts
0
Views
312
Activity
Oct ’24
Intermittent MKLocalSearch.Request Failures with Amap Data Source
My app has been using MKLocalSearch.Request for keyword-based location searches, and it has worked smoothly for a long time. However, starting last Wednesday, I began receiving an error from MKLocalSearch.start: MKErrorDomain (error code 4). This issue only occurs when the network environment is based in mainland China (where the API uses the Amap data source). When the network switches to other regions and other Apple Maps data source is used, the error does not occur. Another complication is that the API doesn't always fail—certain keywords still work (for example, "Huawei"). Already filed a ticket in Feedback Assistant: https://feedbackassistant.apple.com/feedback/15544549
Replies
1
Boosts
0
Views
531
Activity
Oct ’24
Offline Maps for App via MapKit
I’m building an iOS app using MapKit that allows users to create and navigate trails. I need offline map functionality, I was wondering if MapKit supports that. If not I was wondering if MapBox is a viable alternative to MapKit though I would prefer using MapKit. Thanks!
Replies
2
Boosts
2
Views
1.1k
Activity
Oct ’24
can I specify the transit mode
aoubut MKLaunchOptionsDirectionsModeKey, when I use MKLaunchOptionsDirectionsModeTransit as a mode in my code to call function openMaps ,the apple map app launches,it has 4 mode ,subbay or ferry,bus etc,so how can I specify the subway to transit before apple map app launch,so that I do not need to select on the map app,just specific subway in my own app, then the map app auto select the subway transit navigation。now it shows two much usless route。
Replies
0
Boosts
0
Views
418
Activity
Oct ’24
Podcast restrictions on iPhone 13 Pro Max
I am trying to listen to a podcast, but for some reason; a message keep pops up saying: This podcast can't be played due to restrictions set for this device. This happens once I installed the latest IOS. Is there any solutions for this issue?
Replies
1
Boosts
0
Views
856
Activity
Oct ’24
SwiftUI MapKit - MapAnnotation - Publishing changes from within view updates is not allowed, this will cause undefined behavior.
So I'm trying to use MapKit in a SwiftUI project targeting iOS/iPadOS. MapKit is obviously pretty limited in SwiftUI, but I've been getting warnings trying to set up basic annotations for the user to interact with. When I use a basic MapMarker everything is fine (although it's hard to do anything with it), but whenever I do anything with MapAnnotation, I get this warning in Xcode (14.0.1) whenever I move the map around: [SwiftUI] Publishing changes from within view updates is not allowed, this will cause undefined behavior. I'm no SwiftUI expert, and I get how to fix this issue when binding in something like a sheet, but I don't see how what I'm doing with MapAnnotation should be causing this. It looks like a bug to me, possibly complaining about the $region binding, but maybe I'm wrong? Am I doing something wrong or is this a bug? Below is some sample code that reproduces this easily for me (just launch an app with the below code and then drag the map around to see the constant warnings in Xcode). It's mostly an example from here: https://www.hackingwithswift.com/books/ios-swiftui/integrating-mapkit-with-swiftui import SwiftUI import MapKit struct Location: Identifiable {     let id = UUID()     let name: String     let coordinate: CLLocationCoordinate2D } struct ContentView: View {     @State private var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 51.5, longitude: -0.12), span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2))     let locations = [         Location(name: "Buckingham Palace", coordinate: CLLocationCoordinate2D(latitude: 51.501, longitude: -0.141)),         Location(name: "Tower of London", coordinate: CLLocationCoordinate2D(latitude: 51.508, longitude: -0.076))     ]     var body: some View {         Map(coordinateRegion: $region, annotationItems: locations) { location in             MapAnnotation(coordinate: location.coordinate) {                 Circle()                     .stroke(.red, lineWidth: 3)                     .frame(width: 44, height: 44)             }         }         .navigationTitle("Map")         .edgesIgnoringSafeArea(.all)     } }
Replies
20
Boosts
14
Views
11k
Activity
Oct ’24
MapCameraPosition camera region rect item all of them are nil
@State var position : MapCameraPosition = .userLocation(fallback: .region(.defaultRegion)) Map(position: $position) {} .onAppear { Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in print("check.position",position.camera,position.region,position.rect,position.item) } } All of the value are nil, so how do I get the current camera position?? check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil check.position nil nil nil nil It is always nil (even if I manually move around the Map with a finger)
Replies
1
Boosts
0
Views
551
Activity
Oct ’24
Apple Maps Not responding to scrolling, zooming, or tap gestures on custom pins
Scrolling and zooming I have two apps that utilize the Apple Maps and since I updated my xcode to use IOS18, some of the functionalities have either been missing or glitching, and when I roll back to IOS17.5, everything seems to work fine. When I use MKMapView and use mapView.isZoomEnabled = true mapView.isScrollEnabled = true Scrolling and zooming is still not working on IOS18 but IOS17.5 works fine. Clicking on custom annotations When I press on a custom annotation I add to the MapView, the gesture is sometimes recognized and most of the times not recognized. If I have 20 annotations, there is a possibility only 2 of them respond to tap gestures. Below is how I define the annotation. Annotation("Pin", coordinate: CLLocationCoordinate2D(latitude: latitude, longitude: longitude), anchor: .bottom) { Button(action: {print ("Pressed annotation"){ CustomPin() } }
Replies
0
Boosts
0
Views
435
Activity
Oct ’24
Ios 18 GPS accuracy
I updated my phone 14 pro to ios 18 and I faced issue with GPS. it’s show me in next Country and after minutes or hours it’s moved to the correct location how is it can fix it
Replies
1
Boosts
2
Views
768
Activity
Oct ’24
MKLocalSearch for cities - How to uniquely identify results?
I'm using MKLocalSearch with resultTypes set to .address to search for cities. The search results don't include an ID for each city, which I need for database storage (which from my understanding is the only thing we can store). If I can't store the city name, country, and coordinates in my database, and I'm not allowed to use third-party data (like a pre-made list of cities with coordinates), what are my options for uniquely identifying and storing these city results? Any suggestions would be greatly appreciated.
Replies
0
Boosts
0
Views
516
Activity
Oct ’24
Mapkit and swiftui
I have updated my map code so that now I have a region that is set as a state var in my strict. My map links to this state var. the problem is now I want to update my map based on my long and last variables that are passed to the struct is there a way to do this - going crazy trying to do this
Replies
3
Boosts
0
Views
5.0k
Activity
Sep ’24
MKLocalSearch for cities not returning location identities
Hi fellow developers, I'm encountering an issue when using MKLocalSearch to search for cities. Here's my setup: I'm using MKLocalSearch with an MKLocalSearch.Request object. I've set the resultTypes to .address to focus on address results. The problem: When I receive the search response, it includes the locations as expected. However, these locations don't have an identity or alternative identities. Questions: Is this the expected behavior when searching for cities? Without an identity, how can I uniquely identify and store these city results in my database? Would it be appropriate to store the city name, country, and coordinates instead? Thanks in advance!
Replies
1
Boosts
1
Views
483
Activity
Sep ’24
MapAnnotation Position
I am working on a MapView with MapAnnotation on the Map and am having difficulty getting the MapAnnotation to function properly when selected. In my code, I want the MapAnnotation selected to be to the front if it is behind or partially blocked by another annotation. I have tried using a zIndex but this does not appear to work. Below is my MapView code along with a screenshot of the issue. Any help would be greatly appreciated. struct HospitalMapView: View { @StateObject var viewModel = HospitalViewModel() @State private var showSearchView = false @State private var showListView = false @State private var selectedTab: Int = 0 var body: some View { ZStack { VStack(spacing: 0) { TopTabView() // Map that updates the visible hospitals when the user moves or adjusts the map Map(coordinateRegion: $viewModel.region, interactionModes: .all, annotationItems: viewModel.filteredHospitals) { hospital in MapAnnotation(coordinate: CLLocationCoordinate2D(latitude: hospital.latitude, longitude: hospital.longitude)) { RoundedRectangle(cornerRadius: 40) .fill(viewModel.colorForPercentile(viewModel.calculatePercentile(for: hospital, in: viewModel.filteredHospitals))) .frame(width: 70, height: 30) // Maintain consistent size, adjust if necessary .overlay( Text("$\(Int(hospital.baseCharge / 1000))K") .foregroundColor(.white) .bold() ) .overlay( RoundedRectangle(cornerRadius: 40) .stroke(Color.blue, lineWidth: viewModel.selectedHospital == hospital ? 3 : 0) ) .onTapGesture { viewModel.selectHospital(hospital) // Move the selected hospital to the end of the list to bring it to the front viewModel.bringHospitalToFront(hospital) viewModel.showBottomSheet = true } .scaleEffect(viewModel.selectedHospital == hospital ? 1.1 : 1.0) // Highlight the selected hospital .zIndex(viewModel.selectedHospital == hospital ? 1 : 0) // Set the zIndex higher for the selected hospital .animation(.easeInOut, value: viewModel.selectedHospital) // Smooth transition } } .onAppear { // Initial update of visible hospitals when the map appears viewModel.updateFilteredHospitals() } .onChange(of: viewModel.region) { _ in // Update the visible hospitals as the user changes the map region viewModel.updateFilteredHospitals() } .edgesIgnoringSafeArea(.all) } // Hospital count display hovering over the map Text("\(viewModel.filteredHospitals.count) Hospitals") .font(.subheadline) .foregroundColor(.white) .padding(8) .background(Color.black.opacity(0.6)) .cornerRadius(10) .padding(.top, -315) // Adjust padding to position correctly below the TopTabView .zIndex(1) // Ensure it's above the map if let selectedHospital = viewModel.selectedHospital, viewModel.showBottomSheet { BottomSheetView(isOpen: $viewModel.showBottomSheet, maxHeight: UIScreen.main.bounds.height * 0.3) { SummaryTabView(selectedHospital: Binding( get: { selectedHospital }, set: { newValue in viewModel.selectHospital(newValue) } )) } .transition(.move(edge: .bottom)) .animation(.spring()) } } .safeAreaInset(edge: .bottom) { BottomTabView(selectedTab: $selectedTab, showListView: $showListView, showSearchView: $showSearchView, onSearchSelected: { showSearchView = true showListView = false }, onHomeSelected: { showSearchView = false showListView = false }, onListSelected: { showListView = true showSearchView = false }) } .fullScreenCover(isPresented: $showSearchView) { SearchView(viewModel: viewModel, showSearchView: $showSearchView, selectedTab: $selectedTab, showListView: $showListView) } .fullScreenCover(isPresented: $showListView) { ListView(selectedTab: $selectedTab, showListView: $showListView, showSearchView: $showSearchView) .environmentObject(viewModel) } .environmentObject(viewModel) } }
Replies
0
Boosts
0
Views
528
Activity
Sep ’24