Maps Web Snapshots

RSS for tag

Create a static image of a map from a URL using Maps Web Snapshots.

Posts under Maps Web Snapshots tag

17 Posts

Post

Replies

Boosts

Views

Activity

Request for Higher MapKit Service/API Quota
Hello Apple Developer Team, I’m currently using Apple MapKit JS as the main map provider for our logistics, telematics, and HR platform TADMIN, and we are extremely satisfied with its reliability, accuracy, and visual quality. We would now like to expand our Apple integration by migrating our backend reverse geolocation services to Apple as well. However, our current usage requirements significantly exceed the standard 25,000 daily service request limit. At this stage, we already need between 250,000 and 350,000 reverse geocoding requests per day, and this number will continue to grow rapidly. Our TADMIN Tracking product processes live GPS data from connected vehicle telematics boxes, and each vehicle sends an average of 1.5 pings per minute in normal mode. We currently manage around 140 vehicles and are already in discussions with new customers that will add over 1,000 additional vehicles to the platform soon. As our customer base continues to expand, we expect this growth trend to accelerate significantly over the coming months. We already make extensive use of caching to minimize redundant geolocation calls. For example, we reuse location data when vehicles remain within a defined radius. However, since trucks rarely stay stationary for long, there is still a constant flow of new coordinates that require reverse geolocation. To give you a broader picture: TADMIN is a comprehensive SaaS ecosystem for the transport and logistics industry, combining HR management, telematics and tracking, dispatching, and data analysis into one integrated platform. The Tracking module is just one part of this system and serves as the live data backbone for our dispatching, HR, and telematics analytics modules. We would therefore like to increase our quotas for: Service Requests (especially Reverse Geocoding) Snapshot Requests, which we use for our Geofence Alerts. These are sent via push notification and email, and we would love to include the snapshot images in the emails for a clear and visually rich presentation MapKit JS Views, since we also use MapKit JS heavily in our web dashboards, for example in our tracking portal Higher quotas would allow us to rely even more on Apple services, including Autocomplete and Geocoding for customer-facing address searches inside our applications. We already have three apps published on the App Store, with a fourth one scheduled for release this week, and I will soon be upgrading my Apple Developer account to an Organization Account for our company. We are currently evaluating providers for this next stage of integration, as we are preparing a new major version of our TADMIN software, which will introduce a reworked telematics backend. Our goal is to migrate to Apple’s geolocation and map services as part of this new release. Could you please advise how we can best address this use case, for example through higher quotas or an adjusted configuration? Thank you very much for your time and support. Best regards, Timo Köhler Founder & CTO, TADMIN GmbH
1
0
417
Oct ’25
MapKitJS Pricing
Hello (: I have a question regarding the current pricing model for Apple Maps APIs, specifically MapKitJS, the Maps Snapshot API, and the Maps Server API. Previously, the documentation and my understanding indicated that the usage limits were defined per day — for example, 250,000 map loads per day for MapKitJS and 25,000 snapshots per day. However, in the Apple Developer Dashboard, I’m now seeing these limits shown on a per-month basis, such as only 25,000 snapshots per-month. This appears to contradict the publicly available information on the official website, which still states daily limits. Has the pricing model officially changed, or is this just a display issue in the dashboard? I need to know this because we're going into release soon, and then we might have thousands of users.
2
1
523
Apr ’25
Maps Web Snapshots: 500 Internal Server Error
Currently (at least for a few days, maybe longer), when trying to create an Apple Maps Web Snapshot according to https://developer.apple.com/documentation/snapshots/generating_a_url_and_signature_to_create_a_maps_web_snapshot with a custom image marker (passed as Base64 PNG), the Apple server responds with a 500 Internal Server Error. Using the default balloon marker works, but a custom Base64 image marker used to work in the past (and still should according to the documentation).
1
1
263
Mar ’25
Inquiry About Background Permission Issue in My App
I am writing to address a concern regarding the background permission functionality in my app, which is critical for ensuring user safety as they navigate various terrains. This feature also enables users to smoothly record their navigation tracks for review after their activities. Recently, I've noticed that this functionality is not working as seamlessly as before. Additionally, I observed that the app is not categorized under 'health and fitness'—could reclassifying it improve background activity? Before I delve into a detailed code review, I wanted to check if this issue might be related to sync or settings on the App Store side, such as permission configurations, app updates, or other related factors. Or, is it more likely an issue stemming from the app’s codebase?
1
0
510
Jan ’25
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
621
Oct ’24
Did the Snapshot API authentication change too?
Previously (and still, according to the documentation) building a Map Snapshot URL required building the URL with all its parameters, and then signing it using your private key. However, the URL created via the "Create a map" tool simply appends the pre-generated token on the end of the URL. And if I build a URL and do the same thing - append the token, but do not create a signature - the snapshot is generated correctly. (Omitting the token leads to a "not authenticated" message). Is this a new, easier way to generate snapshots?
1
1
842
Jun ’24
iOS 17 MKMapSnapshotter 'black square' issues
Hi, I'm using MKMapSnapshotter in my app to make a snapshot of routes and I'm using MKMarkerAnnotationView for markers with specific images. This all used to work just fine until iOS 17 arrived. Since then every map that is rendered places a back square around my markers. I have tried everything, searched the whole Internet and there is no way I can solve this... Anyone ran into this and have a way to fix this or is is just a bug we have to live with for now? Thanks in advance!
1
0
767
Nov ’23
MKMapSnapshotter/VectorKit crash since iOS 16
We "recently" started getting crashes when taking a satelite map snapshot in app using MKMapSnapshotter. We realized that all crashes have a common denominator that they all happened on iOS 16. The code that creates the snapshot has been unaltered and working without crashes since 2018 up until the release of iOS 16. This is likely some bug in the SDK. let options = MKMapSnapshotter.Options() let location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) options.mapType = .satelliteFlyover options.size = size options.camera = MKMapCamera(lookingAtCenter: location, fromDistance: distance, pitch: 0, heading: 0) let snapshotter = MKMapSnapshotter(options: options) snapshotter.start(completionHandler: completionHandler) Crashed: com.apple.maps.snapshotter 0 VectorKit 0x95d8f0 ggl::Renderer::removeDebugRenderer(std::__1::shared_ptr<ggl::DebugRenderer> const&) + 40 1 VectorKit 0x5cc588 md::DebugConsoleManager::~DebugConsoleManager() + 120 2 VectorKit 0x5cc588 md::DebugConsoleManager::~DebugConsoleManager() + 120 3 VectorKit 0x14e4f4 std::__1::unique_ptr<md::DebugConsoleManager, std::__1::default_delete<md::DebugConsoleManager> >::reset(md::DebugConsoleManager*) + 32 4 VectorKit 0x1b4a48 -[GGLImageCanvas .cxx_destruct] + 36 5 libobjc.A.dylib 0x14a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116 6 libobjc.A.dylib 0x621c objc_destructInstance + 80 7 libobjc.A.dylib 0xf9d0 _objc_rootDealloc + 80 8 VectorKit 0x145958 -[GGLImageCanvas dealloc] + 44 9 VectorKit 0x6eacc md::MapEngine::~MapEngine() + 1644 10 VectorKit 0x133e6c md::MapEngine::~MapEngine() + 16 11 VectorKit 0x33b30 -[VKMapSnapshotCreator softDealloc] + 352 12 VectorKit 0x33778 __42-[VKMapSnapshotCreator renderNextSnapshot]_block_invoke + 904 13 libdispatch.dylib 0x24b4 _dispatch_call_block_and_release + 32 14 libdispatch.dylib 0x3fdc _dispatch_client_callout + 20 15 libdispatch.dylib 0xb694 _dispatch_lane_serial_drain + 672 16 libdispatch.dylib 0xc214 _dispatch_lane_invoke + 436 17 libdispatch.dylib 0x16e10 _dispatch_workloop_worker_thread + 652 18 libsystem_pthread.dylib 0xdf8 _pthread_wqthread + 288 19 libsystem_pthread.dylib 0xb98 start_wqthread + 8
7
1
2.9k
Aug ’23
Map Snapshot - Max number of Overlays, longest allowed query?
Hello, Playing around with the MapJs Snapshot API. How many individual Overlays can it support? The docs say max for Images is 10 but not listing number of Overlays/Annotations it can support. Trying to generate a gradient path like so: But it seems the Apple Snapshot api only allows for 10 unique Overlay objects, is that true? Also, what's the max size of a Snapshot query url? Seems to stop working around 5,000 characters but Google allows for 8000+
1
1
1.1k
Jun ’23
Swift AppleMap MKOverlayRenderer Image Zoom In Bug
Hi I need Help I do control Apple Map I want overlay image on map I use MKOverlayRenderer and this function override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) and then success overlay but map zoom level 2.0 over than image broken if not use CGContext.rotate then image are not broken but use rotate then image are broken class IndoorInfoOverlay: NSObject, MKOverlay { let coordinate: CLLocationCoordinate2D let boundingMapRect: MKMapRect init(indoorInfo: IndoorInfo) { boundingMapRect = indoorInfo.overlayBoundingMapRect coordinate = indoorInfo.midCoordinate } } class IndoorInfoOverlayView: MKOverlayRenderer { var overlayImage: UIImage var parent: IndoorMapView init(overlay: MKOverlay, overlayImage: UIImage,_ parent: IndoorMapView) { self.overlayImage = overlayImage self.parent = parent super.init(overlay: overlay) } override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) { guard let imageReference = overlayImage.cgImage else { return } let bearing = degreesToRadians(360 - (Double(self.parent.floorData!.FLOOR_BEARING) ?? 0)) let rect = self.rect(for: overlay.boundingMapRect) context.scaleBy(x: 1.0, y: -1.0) context.translateBy(x: 0.0, y: -rect.size.height) if self.parent.floorData != nil { context.rotate(by: bearing) } context.draw(imageReference, in: rect, byTiling: false) } private func degreesToRadians(_ x:Double) -> Double { return (Double.pi * x / 180.0) } }````
1
1
1k
Dec ’22
iOS 13、iOS 12 crashed on MapKit - com.apple.MapKit.SnapshotService
App crashed when open MapView Dispatch queue: com.apple.mapdisplay.dispatch.labelTileDecodeQueue (4)#0 (null) in __pthread_kill () #1 (null) in pthread_kill$VARIANT$armv81 () #2 (null) in abort () #3 (null) in std::__1::wstring_convert<std::__1::codecvt_utf8_utf16<char16_t, 1114111ul, (std::__1::codecvt_mode)0>, char16_t, geo::StdAllocator<char16_t, mdm::Allocator>, geo::StdAllocator<char, mdm::Allocator> >::from_bytes+ 3001860 (char const*, char const*) () #4 (null) in md::TextDataStringInfo::TextDataStringInfo+ 2992704 (std::__1::basic_string<char, std::__1::char_traits<char>, geo::StdAllocator<char, mdm::Allocator> > const*, std::__1::basic_string<char, std::__1::char_traits<char>, geo::StdAllocator<char, mdm::Allocator> > const*, gss::Country) () #5 (null) in md::LabelFeature::updateTextVector+ 5040644 () () #6 (null) in md::LabelFeature::setStyle+ 5042596 (std::__1::shared_ptr<gss::StylesheetQuery<gss::PropertyID> > const*, std::__1::shared_ptr<md::LabelStyle> const*, unsigned long, bool, unsigned int, bool) () #7 (null) in md::LabelFeatureStyler::styleLabelFeatures+ 3010884 (std::__1::vector<md::LabelFeatureStylerItem, geo::StdAllocator<md::LabelFeatureStylerItem, mdm::Allocator> >&, bool, bool, geo::TaskQueue*) () #8 (null) in md::LabelFeaturePool::addRoadFeatures+ 5520880 (GEOVectorTile*, GEOMultiSectionFeature*, unsigned long, gm::Box<double, 2> const&, std::__1::shared_ptr<md::LabelManager> const&, std::__1::set<std::__1::weak_ptr<md::RoadLabelFeature>, std::__1::owner_less<std::__1::weak_ptr<md::RoadLabelFeature> >, geo::StdAllocator<std::__1::weak_ptr<md::RoadLabelFeature>, mdm::Allocator> >&, bool) () #9 (null) in md::LabelTile::LabelTile+ 1251832 (geo::MercatorTile const&, GEOVectorTile*, md::LabelTileType, std::__1::shared_ptr<md::LabelManager> const&, bool, md::mun::MuninMetadata*) () #10 (null) in md::LabelLayerDataSource::createLayerData+ 1254684 (mdc::LayerDataRequestKey const&, geo::linear_map<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > >, std::__1::equal_to<unsigned short>, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > >, std::__1::vector<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > >, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > > > > const&, long long) const () #11 (null) in mdc::LayerDataSource::updateLayerData+ 6246072 (unsigned long, mdc::LayerDataRequestKey const&, geo::linear_map<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > >, std::__1::equal_to<unsigned short>, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > >, std::__1::vector<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > >, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > > > > const&, long long) () #12 (null) in std::__1::__function::__func<mdc::LayerDataSource::processLayerDataRequests(mdc::ResourceManager*, geo::TaskGroup*, long long)::$_5, std::__1::allocator<mdc::LayerDataSource::processLayerDataRequests(mdc::ResourceManager*, geo::TaskGroup*, long long)::$_5>, void ()>::operator()+ 6261080 () () #13 (null) in invocation function for block in geo::TaskQueue::queueAsyncTask+ 5745220 (std::__1::shared_ptr<geo::Task>, NSObject<OS_dispatch_group>*) () #14 (null) in _dispatch_call_block_and_release () #15 (null) in _dispatch_client_callout () #16 (null) in _dispatch_lane_serial_drain$VARIANT$armv81 () #17 (null) in _dispatch_lane_invoke$VARIANT$armv81 () #18 (null) in _dispatch_workloop_invoke$VARIANT$armv81 () #19 (null) in _dispatch_workloop_worker_thread () #20 (null) in _pthread_wqthread () #21 (null) in start_wqthread ()
3
0
1.2k
Sep ’22
MapKit - Snapshop - URL: How to sign the signature
Hello everyone, I try to use the URL to generate a snapshot. Team ID and Key ID could be easily added. But how do I sign the signature? With what tool or website? I tried to sign it with openssl and several tool thar should be able to sign SHA-256 https://snapshot.apple-mapkit.com/api/v1/snapshot?center=apple+park&teamId=TEAM_ID&keyId=KEY_ID&signature=THE_SIGNATURE_HERE Kind regards, Jens
0
0
1k
Mar ’22
Now Available: Image Annotations on Maps Web Snapshots
Available today, you can now use custom images for annotations on Maps Web Snapshots. The full list of available annotation styles for Maps Web Snapshots is now: dot (a small circle) balloon (default balloon-style annotation) large (a selected balloon) *NEW* img (your own custom image) To use: Specify the images that you want to use in the imgs array. Each item in imgs should be an Image - https://developer.apple.com/documentation/snapshots/image JSON object, which lets you specify parameters like url, height, and width. Set markerstyle=img on your Annotation - https://developer.apple.com/documentation/snapshots/annotation object. Use imgIdx to choose an image within imgs for this annotation. To get the full story on creating static map images to use on websites, in email, and more, check out the Maps Web Snapshots - https://developer.apple.com/documentation/snapshots documentation.
3
0
1.7k
Nov ’21
Request for Higher MapKit Service/API Quota
Hello Apple Developer Team, I’m currently using Apple MapKit JS as the main map provider for our logistics, telematics, and HR platform TADMIN, and we are extremely satisfied with its reliability, accuracy, and visual quality. We would now like to expand our Apple integration by migrating our backend reverse geolocation services to Apple as well. However, our current usage requirements significantly exceed the standard 25,000 daily service request limit. At this stage, we already need between 250,000 and 350,000 reverse geocoding requests per day, and this number will continue to grow rapidly. Our TADMIN Tracking product processes live GPS data from connected vehicle telematics boxes, and each vehicle sends an average of 1.5 pings per minute in normal mode. We currently manage around 140 vehicles and are already in discussions with new customers that will add over 1,000 additional vehicles to the platform soon. As our customer base continues to expand, we expect this growth trend to accelerate significantly over the coming months. We already make extensive use of caching to minimize redundant geolocation calls. For example, we reuse location data when vehicles remain within a defined radius. However, since trucks rarely stay stationary for long, there is still a constant flow of new coordinates that require reverse geolocation. To give you a broader picture: TADMIN is a comprehensive SaaS ecosystem for the transport and logistics industry, combining HR management, telematics and tracking, dispatching, and data analysis into one integrated platform. The Tracking module is just one part of this system and serves as the live data backbone for our dispatching, HR, and telematics analytics modules. We would therefore like to increase our quotas for: Service Requests (especially Reverse Geocoding) Snapshot Requests, which we use for our Geofence Alerts. These are sent via push notification and email, and we would love to include the snapshot images in the emails for a clear and visually rich presentation MapKit JS Views, since we also use MapKit JS heavily in our web dashboards, for example in our tracking portal Higher quotas would allow us to rely even more on Apple services, including Autocomplete and Geocoding for customer-facing address searches inside our applications. We already have three apps published on the App Store, with a fourth one scheduled for release this week, and I will soon be upgrading my Apple Developer account to an Organization Account for our company. We are currently evaluating providers for this next stage of integration, as we are preparing a new major version of our TADMIN software, which will introduce a reworked telematics backend. Our goal is to migrate to Apple’s geolocation and map services as part of this new release. Could you please advise how we can best address this use case, for example through higher quotas or an adjusted configuration? Thank you very much for your time and support. Best regards, Timo Köhler Founder & CTO, TADMIN GmbH
Replies
1
Boosts
0
Views
417
Activity
Oct ’25
Create a Maps Web Snapshot with token got 403 response
The https certificate has expired
Replies
3
Boosts
0
Views
111
Activity
Jun ’25
MapKitJS Pricing
Hello (: I have a question regarding the current pricing model for Apple Maps APIs, specifically MapKitJS, the Maps Snapshot API, and the Maps Server API. Previously, the documentation and my understanding indicated that the usage limits were defined per day — for example, 250,000 map loads per day for MapKitJS and 25,000 snapshots per day. However, in the Apple Developer Dashboard, I’m now seeing these limits shown on a per-month basis, such as only 25,000 snapshots per-month. This appears to contradict the publicly available information on the official website, which still states daily limits. Has the pricing model officially changed, or is this just a display issue in the dashboard? I need to know this because we're going into release soon, and then we might have thousands of users.
Replies
2
Boosts
1
Views
523
Activity
Apr ’25
Maps Web Snapshots: 500 Internal Server Error
Currently (at least for a few days, maybe longer), when trying to create an Apple Maps Web Snapshot according to https://developer.apple.com/documentation/snapshots/generating_a_url_and_signature_to_create_a_maps_web_snapshot with a custom image marker (passed as Base64 PNG), the Apple server responds with a 500 Internal Server Error. Using the default balloon marker works, but a custom Base64 image marker used to work in the past (and still should according to the documentation).
Replies
1
Boosts
1
Views
263
Activity
Mar ’25
Inquiry About Background Permission Issue in My App
I am writing to address a concern regarding the background permission functionality in my app, which is critical for ensuring user safety as they navigate various terrains. This feature also enables users to smoothly record their navigation tracks for review after their activities. Recently, I've noticed that this functionality is not working as seamlessly as before. Additionally, I observed that the app is not categorized under 'health and fitness'—could reclassifying it improve background activity? Before I delve into a detailed code review, I wanted to check if this issue might be related to sync or settings on the App Store side, such as permission configurations, app updates, or other related factors. Or, is it more likely an issue stemming from the app’s codebase?
Replies
1
Boosts
0
Views
510
Activity
Jan ’25
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
621
Activity
Oct ’24
Did the Snapshot API authentication change too?
Previously (and still, according to the documentation) building a Map Snapshot URL required building the URL with all its parameters, and then signing it using your private key. However, the URL created via the "Create a map" tool simply appends the pre-generated token on the end of the URL. And if I build a URL and do the same thing - append the token, but do not create a signature - the snapshot is generated correctly. (Omitting the token leads to a "not authenticated" message). Is this a new, easier way to generate snapshots?
Replies
1
Boosts
1
Views
842
Activity
Jun ’24
iOS 17 MKMapSnapshotter 'black square' issues
Hi, I'm using MKMapSnapshotter in my app to make a snapshot of routes and I'm using MKMarkerAnnotationView for markers with specific images. This all used to work just fine until iOS 17 arrived. Since then every map that is rendered places a back square around my markers. I have tried everything, searched the whole Internet and there is no way I can solve this... Anyone ran into this and have a way to fix this or is is just a bug we have to live with for now? Thanks in advance!
Replies
1
Boosts
0
Views
767
Activity
Nov ’23
Maps Web Snapshots
Hello there,is it possible to let users take Maps Web Snapshots after searched a location on mapkit js?
Replies
0
Boosts
0
Views
726
Activity
Sep ’23
MKMapSnapshotter/VectorKit crash since iOS 16
We "recently" started getting crashes when taking a satelite map snapshot in app using MKMapSnapshotter. We realized that all crashes have a common denominator that they all happened on iOS 16. The code that creates the snapshot has been unaltered and working without crashes since 2018 up until the release of iOS 16. This is likely some bug in the SDK. let options = MKMapSnapshotter.Options() let location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) options.mapType = .satelliteFlyover options.size = size options.camera = MKMapCamera(lookingAtCenter: location, fromDistance: distance, pitch: 0, heading: 0) let snapshotter = MKMapSnapshotter(options: options) snapshotter.start(completionHandler: completionHandler) Crashed: com.apple.maps.snapshotter 0 VectorKit 0x95d8f0 ggl::Renderer::removeDebugRenderer(std::__1::shared_ptr<ggl::DebugRenderer> const&) + 40 1 VectorKit 0x5cc588 md::DebugConsoleManager::~DebugConsoleManager() + 120 2 VectorKit 0x5cc588 md::DebugConsoleManager::~DebugConsoleManager() + 120 3 VectorKit 0x14e4f4 std::__1::unique_ptr<md::DebugConsoleManager, std::__1::default_delete<md::DebugConsoleManager> >::reset(md::DebugConsoleManager*) + 32 4 VectorKit 0x1b4a48 -[GGLImageCanvas .cxx_destruct] + 36 5 libobjc.A.dylib 0x14a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116 6 libobjc.A.dylib 0x621c objc_destructInstance + 80 7 libobjc.A.dylib 0xf9d0 _objc_rootDealloc + 80 8 VectorKit 0x145958 -[GGLImageCanvas dealloc] + 44 9 VectorKit 0x6eacc md::MapEngine::~MapEngine() + 1644 10 VectorKit 0x133e6c md::MapEngine::~MapEngine() + 16 11 VectorKit 0x33b30 -[VKMapSnapshotCreator softDealloc] + 352 12 VectorKit 0x33778 __42-[VKMapSnapshotCreator renderNextSnapshot]_block_invoke + 904 13 libdispatch.dylib 0x24b4 _dispatch_call_block_and_release + 32 14 libdispatch.dylib 0x3fdc _dispatch_client_callout + 20 15 libdispatch.dylib 0xb694 _dispatch_lane_serial_drain + 672 16 libdispatch.dylib 0xc214 _dispatch_lane_invoke + 436 17 libdispatch.dylib 0x16e10 _dispatch_workloop_worker_thread + 652 18 libsystem_pthread.dylib 0xdf8 _pthread_wqthread + 288 19 libsystem_pthread.dylib 0xb98 start_wqthread + 8
Replies
7
Boosts
1
Views
2.9k
Activity
Aug ’23
Map Snapshot - Max number of Overlays, longest allowed query?
Hello, Playing around with the MapJs Snapshot API. How many individual Overlays can it support? The docs say max for Images is 10 but not listing number of Overlays/Annotations it can support. Trying to generate a gradient path like so: But it seems the Apple Snapshot api only allows for 10 unique Overlay objects, is that true? Also, what's the max size of a Snapshot query url? Seems to stop working around 5,000 characters but Google allows for 8000+
Replies
1
Boosts
1
Views
1.1k
Activity
Jun ’23
Swift AppleMap MKOverlayRenderer Image Zoom In Bug
Hi I need Help I do control Apple Map I want overlay image on map I use MKOverlayRenderer and this function override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) and then success overlay but map zoom level 2.0 over than image broken if not use CGContext.rotate then image are not broken but use rotate then image are broken class IndoorInfoOverlay: NSObject, MKOverlay { let coordinate: CLLocationCoordinate2D let boundingMapRect: MKMapRect init(indoorInfo: IndoorInfo) { boundingMapRect = indoorInfo.overlayBoundingMapRect coordinate = indoorInfo.midCoordinate } } class IndoorInfoOverlayView: MKOverlayRenderer { var overlayImage: UIImage var parent: IndoorMapView init(overlay: MKOverlay, overlayImage: UIImage,_ parent: IndoorMapView) { self.overlayImage = overlayImage self.parent = parent super.init(overlay: overlay) } override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) { guard let imageReference = overlayImage.cgImage else { return } let bearing = degreesToRadians(360 - (Double(self.parent.floorData!.FLOOR_BEARING) ?? 0)) let rect = self.rect(for: overlay.boundingMapRect) context.scaleBy(x: 1.0, y: -1.0) context.translateBy(x: 0.0, y: -rect.size.height) if self.parent.floorData != nil { context.rotate(by: bearing) } context.draw(imageReference, in: rect, byTiling: false) } private func degreesToRadians(_ x:Double) -> Double { return (Double.pi * x / 180.0) } }````
Replies
1
Boosts
1
Views
1k
Activity
Dec ’22
Testing running an app that has Mapview.
I get the following while testing an app from Xcode and using my iPhone. [UserSession] maps short session requested but session sharing is not enabled Does anybody know why this occurs and what solution to fix the issue?
Replies
4
Boosts
3
Views
1.8k
Activity
Oct ’22
iOS 13、iOS 12 crashed on MapKit - com.apple.MapKit.SnapshotService
App crashed when open MapView Dispatch queue: com.apple.mapdisplay.dispatch.labelTileDecodeQueue (4)#0 (null) in __pthread_kill () #1 (null) in pthread_kill$VARIANT$armv81 () #2 (null) in abort () #3 (null) in std::__1::wstring_convert<std::__1::codecvt_utf8_utf16<char16_t, 1114111ul, (std::__1::codecvt_mode)0>, char16_t, geo::StdAllocator<char16_t, mdm::Allocator>, geo::StdAllocator<char, mdm::Allocator> >::from_bytes+ 3001860 (char const*, char const*) () #4 (null) in md::TextDataStringInfo::TextDataStringInfo+ 2992704 (std::__1::basic_string<char, std::__1::char_traits<char>, geo::StdAllocator<char, mdm::Allocator> > const*, std::__1::basic_string<char, std::__1::char_traits<char>, geo::StdAllocator<char, mdm::Allocator> > const*, gss::Country) () #5 (null) in md::LabelFeature::updateTextVector+ 5040644 () () #6 (null) in md::LabelFeature::setStyle+ 5042596 (std::__1::shared_ptr<gss::StylesheetQuery<gss::PropertyID> > const*, std::__1::shared_ptr<md::LabelStyle> const*, unsigned long, bool, unsigned int, bool) () #7 (null) in md::LabelFeatureStyler::styleLabelFeatures+ 3010884 (std::__1::vector<md::LabelFeatureStylerItem, geo::StdAllocator<md::LabelFeatureStylerItem, mdm::Allocator> >&, bool, bool, geo::TaskQueue*) () #8 (null) in md::LabelFeaturePool::addRoadFeatures+ 5520880 (GEOVectorTile*, GEOMultiSectionFeature*, unsigned long, gm::Box<double, 2> const&, std::__1::shared_ptr<md::LabelManager> const&, std::__1::set<std::__1::weak_ptr<md::RoadLabelFeature>, std::__1::owner_less<std::__1::weak_ptr<md::RoadLabelFeature> >, geo::StdAllocator<std::__1::weak_ptr<md::RoadLabelFeature>, mdm::Allocator> >&, bool) () #9 (null) in md::LabelTile::LabelTile+ 1251832 (geo::MercatorTile const&, GEOVectorTile*, md::LabelTileType, std::__1::shared_ptr<md::LabelManager> const&, bool, md::mun::MuninMetadata*) () #10 (null) in md::LabelLayerDataSource::createLayerData+ 1254684 (mdc::LayerDataRequestKey const&, geo::linear_map<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > >, std::__1::equal_to<unsigned short>, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > >, std::__1::vector<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > >, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > > > > const&, long long) const () #11 (null) in mdc::LayerDataSource::updateLayerData+ 6246072 (unsigned long, mdc::LayerDataRequestKey const&, geo::linear_map<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > >, std::__1::equal_to<unsigned short>, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > >, std::__1::vector<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > >, std::__1::allocator<std::__1::pair<unsigned short, std::__1::unordered_map<mdc::ResourceKey, std::__1::shared_ptr<mdc::Resource>, mdc::ResourceKeyHash, std::__1::equal_to<mdc::ResourceKey>, std::__1::allocator<std::__1::pair<mdc::ResourceKey const, std::__1::shared_ptr<mdc::Resource> > > > > > > > const&, long long) () #12 (null) in std::__1::__function::__func<mdc::LayerDataSource::processLayerDataRequests(mdc::ResourceManager*, geo::TaskGroup*, long long)::$_5, std::__1::allocator<mdc::LayerDataSource::processLayerDataRequests(mdc::ResourceManager*, geo::TaskGroup*, long long)::$_5>, void ()>::operator()+ 6261080 () () #13 (null) in invocation function for block in geo::TaskQueue::queueAsyncTask+ 5745220 (std::__1::shared_ptr<geo::Task>, NSObject<OS_dispatch_group>*) () #14 (null) in _dispatch_call_block_and_release () #15 (null) in _dispatch_client_callout () #16 (null) in _dispatch_lane_serial_drain$VARIANT$armv81 () #17 (null) in _dispatch_lane_invoke$VARIANT$armv81 () #18 (null) in _dispatch_workloop_invoke$VARIANT$armv81 () #19 (null) in _dispatch_workloop_worker_thread () #20 (null) in _pthread_wqthread () #21 (null) in start_wqthread ()
Replies
3
Boosts
0
Views
1.2k
Activity
Sep ’22
MapKit - Snapshop - URL: How to sign the signature
Hello everyone, I try to use the URL to generate a snapshot. Team ID and Key ID could be easily added. But how do I sign the signature? With what tool or website? I tried to sign it with openssl and several tool thar should be able to sign SHA-256 https://snapshot.apple-mapkit.com/api/v1/snapshot?center=apple+park&teamId=TEAM_ID&keyId=KEY_ID&signature=THE_SIGNATURE_HERE Kind regards, Jens
Replies
0
Boosts
0
Views
1k
Activity
Mar ’22
Maps & Location
How do you change the city and zip code for an address listed incorrectly on the Maps app?
Replies
0
Boosts
0
Views
732
Activity
Feb ’22
Now Available: Image Annotations on Maps Web Snapshots
Available today, you can now use custom images for annotations on Maps Web Snapshots. The full list of available annotation styles for Maps Web Snapshots is now: dot (a small circle) balloon (default balloon-style annotation) large (a selected balloon) *NEW* img (your own custom image) To use: Specify the images that you want to use in the imgs array. Each item in imgs should be an Image - https://developer.apple.com/documentation/snapshots/image JSON object, which lets you specify parameters like url, height, and width. Set markerstyle=img on your Annotation - https://developer.apple.com/documentation/snapshots/annotation object. Use imgIdx to choose an image within imgs for this annotation. To get the full story on creating static map images to use on websites, in email, and more, check out the Maps Web Snapshots - https://developer.apple.com/documentation/snapshots documentation.
Replies
3
Boosts
0
Views
1.7k
Activity
Nov ’21