{"id":2816082,"date":"2025-06-05T11:08:41","date_gmt":"2025-06-05T18:08:41","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2816082"},"modified":"2025-06-09T14:07:59","modified_gmt":"2025-06-09T21:07:59","slug":"the-science-of-where-i-am-displaying-device-location","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location","title":{"rendered":"The Science of Where I Am &#8211; Displaying Device Location with the Native Maps SDKs"},"author":372172,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[738191,22941,37121],"tags":[758061,28091,28101,779582,35001],"industry":[],"product":[768902,768912,36601],"class_list":["post-2816082","blog","type-blog","status-publish","format-standard","hentry","category-developers","category-mapping","category-real-time","tag-device-location","tag-gnss","tag-gps","tag-kalman-filter","tag-mobile-development","product-sdk-kotlin","product-sdk-swift","product-developers"],"acf":{"authors":[{"ID":372172,"user_firstname":"Trevor","user_lastname":"Draeseke","nickname":"Trevor Draeseke","user_nicename":"tdraeseke","display_name":"Trevor Draeseke","user_email":"tdraeseke@esri.com","user_url":"","user_registered":"2025-05-29 23:20:40","user_description":"I'm a Product Engineer specializing in the ArcGIS Maps SDK for Kotlin at Esri. My passion for mapping and geographic information systems began during my tenure as a maritime archaeologist, where I first recognized the power of spatial data on understanding our world--past and present!","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/plenary-213x200.jpeg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"short_description":"Learn about the considerations involved when displaying device location in a geospatial application with the Native Maps SDKs.","flexible_content":[{"acf_fc_layout":"content","content":"<p>For many mobile geospatial applications, showing device location on a map in real(ish) time is crucial. Location provides critical spatial context, so the app can present only the most relevant map information on screen. But we can take that little blue dot for granted! How accurate is it? What do we mean by <em>accurate<\/em>? Spatially accurate? Temporally accurate? These two types of accuracy require trade-offs from one another! And what about hardware or algorithms &#8211; can we use them to improve accuracy? It\u2019s worth taking a few moments to think about accuracy and device location in our mobile apps, all with the ultimate goal of creating the best result for our users.<\/p>\n<p>What follows is a deep dive into the considerations necessary when displaying device location in a geospatial application. These examples are written using the ArcGIS Maps SDK for Kotlin (for Android mobile app development), but many of the same considerations apply to other ArcGIS Maps SDK for Native Apps platforms and devices (such as iOS mobile app development using the Swift Maps SDK).<\/p>\n<h2>The simplest way to show device location<\/h2>\n<p>Let\u2019s start with what we get out of the box with the Kotlin Maps SDK. There is a sample available which demonstrates how to <a href=\"https:\/\/github.com\/Esri\/arcgis-maps-sdk-kotlin-samples\/tree\/main\/samples\/show-device-location\">Show device location<\/a>, which is as simple as getting a reference to the <a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view\/-map-view\/index.html\">MapView<\/a>\u2019s <a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view\/-location-display\/index.html\">LocationDisplay<\/a> and calling&#8230;<\/p>\n"},{"acf_fc_layout":"blockquote","content":"<pre><code>\r\nLocationDisplay.dataSource.start() <span style=\"color: #6a737d\">\r\n\/\/ Uses the SystemLocationDataSource() by default<\/span>\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<p>This is the most straightforward way to show that humble blue dot on the screen, and already has some very helpful features built in. The dot will show as blue, if the current position is from a recent update, or it will show as a grey <a href=\"https:\/\/developers.arcgis.com\/kotlin\/api-reference\/arcgis-maps-kotlin\/com.arcgismaps.mapping.view\/-location-display\/acquiring-symbol.html\">acquiring symbol<\/a> if the location is out of date (effectively marking the last known position).<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2816332,"id":2816332,"title":"gps blue","filename":"gps-blue-e1748888787600.png","filesize":92206,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-blue-e1748888787600.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\/gps-blue","alt":"A blue dot denoting position on a map","author":"372172","description":"","caption":"The blue symbol denotes a location from a recent update ","name":"gps-blue","status":"inherit","uploaded_to":2816082,"date":"2025-05-30 21:19:24","modified":"2025-06-02 18:11:55","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":600,"height":600,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-blue-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-blue-e1748888787600.png","medium-width":261,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-blue-e1748888787600.png","medium_large-width":600,"medium_large-height":600,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-blue-e1748888787600.png","large-width":600,"large-height":600,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-blue-e1748888787600.png","1536x1536-width":600,"1536x1536-height":600,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-blue-e1748888787600.png","2048x2048-width":600,"2048x2048-height":600,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-blue-465x465.png","card_image-width":465,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-blue-e1748888787600.png","wide_image-width":600,"wide_image-height":600}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"image","image":{"ID":2816342,"id":2816342,"title":"gps grey","filename":"gps-grey-e1748888824871.png","filesize":87838,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-grey-e1748888824871.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\/gps-grey","alt":"A grey dot denoting last known position on a map","author":"372172","description":"","caption":"The grey symbol denotes the position at the last known update (if it\u2019s not recent).","name":"gps-grey","status":"inherit","uploaded_to":2816082,"date":"2025-05-30 21:19:27","modified":"2025-06-09 21:06:13","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":600,"height":600,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-grey-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-grey-e1748888824871.png","medium-width":261,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-grey-e1748888824871.png","medium_large-width":600,"medium_large-height":600,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-grey-e1748888824871.png","large-width":600,"large-height":600,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-grey-e1748888824871.png","1536x1536-width":600,"1536x1536-height":600,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-grey-e1748888824871.png","2048x2048-width":600,"2048x2048-height":600,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-grey-465x465.png","card_image-width":465,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-grey-e1748888824871.png","wide_image-width":600,"wide_image-height":600}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>It will also show a blue circle which expands and contracts around the location symbol, which represents the accuracy of the location. Effectively it\u2019s stating there\u2019s a 68.26% chance (within one standard deviation on a normal distribution) that the actual location is within this circle.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2816372,"id":2816372,"title":"gps accuracy","filename":"gps-accuracy-e1748888841809.png","filesize":94677,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-accuracy-e1748888841809.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\/gps-accuracy","alt":"A blue dot denoting position on a map surrounded by a blue ring denoting accuracy","author":"372172","description":"","caption":"Accuracy visualized on the map.","name":"gps-accuracy","status":"inherit","uploaded_to":2816082,"date":"2025-05-30 21:23:38","modified":"2025-06-02 18:15:51","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":600,"height":600,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-accuracy-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-accuracy-e1748888841809.png","medium-width":261,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-accuracy-e1748888841809.png","medium_large-width":600,"medium_large-height":600,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-accuracy-e1748888841809.png","large-width":600,"large-height":600,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-accuracy-e1748888841809.png","1536x1536-width":600,"1536x1536-height":600,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-accuracy-e1748888841809.png","2048x2048-width":600,"2048x2048-height":600,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-accuracy-465x465.png","card_image-width":465,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/05\/gps-accuracy-e1748888841809.png","wide_image-width":600,"wide_image-height":600}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>There are also a range of <a href=\"https:\/\/developers.arcgis.com\/kotlin\/device-location\/#autopan-modes\">autopan<\/a> modes to handle location movement within the map view.<\/p>\n<p>For most use cases this API is sufficient. The API can make its own assessment of accuracy, which will be affected by the number of satellites in the GNSS network available in the open sky. When I say \u201copen sky\u201d here, I mean that accurate determination of device position is significantly worsened when the device is under the cover of dense trees, in a valley, or in a city canyon between tall buildings. Why is that?<\/p>\n<h2>How GPS (GNSS) works<\/h2>\n<p>GPS (Global Positioning System) is a type of Global Navigation Satellite System (GNSS)\u2014a catch all term for these types of systems. GPS was developed by the US Department of Defence in the 1970s. There are other satellite systems, namely GLONASS (Russian), Galileo (EU), Beidou (China) and up-and-coming networks QZSS (Japan) and IRNSS (India). When your device is trying to determine its location, it picks up data from several of these satellite constellations. How does it work? Well, those satellites follow fixed orbits around the earth and are equipped with atomic clocks that are continuously broadcasting \u201cI was at this position, at this time\u201d. To learn more about visualizing satellite locations, check out the <a href=\"https:\/\/www.esri.com\/en-us\/software-engineering\/blog\/articles\/positions-of-gps-satellites-in-3d\">Positions of GPS Satellites in 3D<\/a> post on the Esri Software Engineering Blog.<\/p>\n<p>A GPS receiver on your device takes that information and calculates the difference between the timestamp in the broadcast received and the time right now. From that time difference (and because radio waves travel at a known speed, the speed of light) the distance from the satellite to the receiver can be calculated. But this distance alone isn\u2019t of much use. I like to think of it like this: the only thing you\u2019ve proven with that single measurement is that your position can be anywhere on the surface of a sphere whose radius is the calculated distance.<\/p>\n<p>However, if we were to get a second measurement, then you could be anywhere on a circle created by intersecting two spheres\u2014now we\u2019re getting somewhere. Add another measurement and we\u2019re getting closer to what we need, two points on that circle.<\/p>\n"},{"acf_fc_layout":"content","content":"<p>Four spheres become harder to visualize, but effectively as we gather known measurements from more and more satellites the confidence of the position increases. So, if we cast our mind back to some of the challenges that affect determining a good position (where the satellites are obstructed in some way), you can start to imagine why the accuracy fluctuates.<\/p>\n<p>Next, let\u2019s go through some of the ways we can improve positional accuracy\u2014apply some science to figuring out \u201cwhere I am\u201d. We\u2019ll look at other out-of-the-box solutions (available to Android users, in this instance), how we can use data and things we know about the system to improve positional accuracy, and finally, a look at how we can use some algorithms to help us out.<\/p>\n<h3>Correcting for low accuracy with other out of the box solutions<\/h3>\n<p>Given the number of sensors available on an Android device, it makes sense to try to use as many of those sensors as possible to improve location. The <a href=\"https:\/\/developers.google.com\/location-context\/fused-location-provider\">Fused Location Provider<\/a>, available in Google Play services, combines other sources of location data, like Wi-Fi and cell mobile towers\u2014both of which are (relatively) fixed in the landscape. Which means location data can be derived in the same way as the satellite examples above. The API may also use other sensors on the device like the accelerometer and gyroscope.<\/p>\n<p>To use this in the Kotlin Maps SDK, implement your own <code>CustomLocationDataSource.LocationProvider<\/code>and emit into its heading and location flows the positions received from a <code>FusedLocationProvider<\/code>as demonstrated in the sample <a href=\"https:\/\/github.com\/Esri\/arcgis-maps-sdk-kotlin-samples\/tree\/main\/samples\/show-device-location-using-fused-location-data-source\">Show device location with fused location provider<\/a>.<\/p>\n<p>If your use case requires positioning indoors, perhaps in aid of navigation through an airport or shopping mall, the Native Maps SDKs also support indoor positioning. Using an array of Bluetooth sensors, the API works a lot like a GPS system\u2014using trilateration to position the device based on input from multiple fixed Bluetooth emitters.<\/p>\n<p>Ok, these were some pretty technical (and black box) solutions. Let\u2019s think about your options if you know something about the system you\u2019re trying to work with.<\/p>\n<h3>Using what we know to improve location accuracy<\/h3>\n<p>While the location APIs discussed above can be applied to most use cases, if we know how we expect our location-dependent application to be used, we can take steps to improve our location. If our app is for vehicle navigation, we can make assumptions that those vehicles will be on the road network. If you have good data about the road network, you can correct for location by snapping locations onto the road network. In the Kotlin Maps SDK that&#8217;s done with a <code>RouteTracker<\/code>like this:<\/p>\n"},{"acf_fc_layout":"blockquote","content":"<pre><code>\r\n<span style=\"color: #6a737d\">\/\/ Define a route tracker which follows the given route result<\/span>\r\n<span style=\"color: #d73a49\">val<\/span> routeTracker = RouteTracker(\r\n    routeResult = routeResult,\r\n    routeIndex = <span style=\"color: #005cc5\">0<\/span>,\r\n    skipCoincidentStops = <span style=\"color: #005cc5\">true<\/span>\r\n)\r\n\r\n<span style=\"color: #6a737d\">\/\/ Create a RouteTrackerLocationDataSource which uses the route tracker<\/span>\r\n<span style=\"color: #d73a49\">val<\/span> routeTrackerLocationDataSource = RouteTrackerLocationDataSource(\r\n    routeTracker = routeTracker,\r\n    locationDataSource = someLocationDataSource\r\n)\r\n\r\n<span style=\"color: #6a737d\">\/\/ Start a new coroutine<\/span>\r\n viewModelScope.launch {\r\n    <span style=\"color: #6a737d\">\/\/ Start the route tracker location data source<\/span>\r\n    routeTrackerLocationDataSource.start()\r\n     <span style=\"color: #6a737d\">\/\/ Use location updates to track location on the route tracker<\/span>\r\n    someLocationDataSource.locationChanged.collect { location -&gt;\r\n        routeTracker.trackLocation(location)\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"image","image":{"ID":2820612,"id":2820612,"title":"route tracker","filename":"route-tracker.gif","filesize":9732210,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/route-tracker.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\/route-tracker","alt":"A location display snaps to a blue route line based on nearby location updates","author":"372172","description":"","caption":"The blue line represents a solved route. Notice how nearby location updates (marked with red Xs) influence the position of the blue location display--specifically how the location display snaps to the route on a road.","name":"route-tracker","status":"inherit","uploaded_to":2816082,"date":"2025-06-04 16:49:06","modified":"2025-06-04 16:51:34","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":400,"height":400,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/route-tracker-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/route-tracker.gif","medium-width":261,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/route-tracker.gif","medium_large-width":400,"medium_large-height":400,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/route-tracker.gif","large-width":400,"large-height":400,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/route-tracker.gif","1536x1536-width":400,"1536x1536-height":400,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/route-tracker.gif","2048x2048-width":400,"2048x2048-height":400,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/route-tracker.gif","card_image-width":400,"card_image-height":400,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/route-tracker.gif","wide_image-width":400,"wide_image-height":400}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Alternatively, if position is more important than having the most up-to-date locations, you could consider averaging some readings over time. For example, consider taking 5 readings in a row (let\u2019s say over 5 seconds), averaging those positions, and then emitting those into your location display flow once every 5 seconds. This would be less temporally accurate (positions delayed by up to 5 seconds), while likely being more spatially accurate. An example use case is if the device is being held in one place while a field worker records data. Averaging the location would improve accuracy of the recorded data. However, averaging locations would be unhelpful in a use case where the device is moving quickly and with rapid changes of direction.<\/p>\n<p>Before I wrap up this exploration of device location, let\u2019s take one final deep dive into a more nuanced area &#8211; how to use an algorithm to help improve location accuracy by predicting upcoming location updates and balancing those predicted location updates with locations from sensor measurements.<\/p>\n<h3>Using a Kalman filter<\/h3>\n<p>Kalman filters estimate the state of a system using past observations and current measurements. One of its earliest historical claims to fame was its use in the navigational computer of the Apollo program\u2019s moon lander. It is a type of sensor fusion algorithm, meaning it takes input from multiple sources to give a weighted average result that can self-tune. When balancing between predictions that seem good and measurements that seem bad, the algorithm will put more weight on the predictions and vice versa. This metric is called the Kalman gain. Most GPS chips already have a Kalman filter or similar algorithm applied to dampen noise, so what follows is illustrative of the type of effect in can have on location updates.<\/p>\n<p>In the case shown below using the Kotlin Maps SDK (<a href=\"https:\/\/github.com\/TADraeseke\/filter-location-with-kalman-filter-kotlin\">and available from this GitHub repo<\/a>), this implementation of a Kalman filter uses the velocity and heading of each location measurement to predict the next position, and a weighted average between that predicted point and the one measured from the GPS. In the image below, the track shows the predicted location and the green track shows the measured location. The blue is a weighted average of the two using the Kalman gain. Notice how the predicted location is generally quite accurate while the device is moving at a predictable speed and heading. However, on the sharp turn below, you can see the predicted path overshoot the measured right-hand turn. This is a case where the location data is reporting high measurement accuracy against a relatively lower predicted accuracy.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2820702,"id":2820702,"title":"Kalman filter","filename":"kalman-filter-final-shrunk.gif","filesize":877949,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-final-shrunk.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\/kalman-filter-final-shrunk","alt":"Three tracks show location, one measured, one predicted with a Kalman filter and one an average of the two","author":"372172","description":"","caption":"A location data source using a Kalman filter implemented in the Kotlin Maps SDK.","name":"kalman-filter-final-shrunk","status":"inherit","uploaded_to":2816082,"date":"2025-06-04 17:08:48","modified":"2025-06-04 17:09:34","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":400,"height":431,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-final-shrunk-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-final-shrunk.gif","medium-width":242,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-final-shrunk.gif","medium_large-width":400,"medium_large-height":431,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-final-shrunk.gif","large-width":400,"large-height":431,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-final-shrunk.gif","1536x1536-width":400,"1536x1536-height":431,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-final-shrunk.gif","2048x2048-width":400,"2048x2048-height":431,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-final-shrunk.gif","card_image-width":400,"card_image-height":431,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-final-shrunk.gif","wide_image-width":400,"wide_image-height":431}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>This algorithm really comes into its own when noise (inaccuracy) in one or other of the predicted or measured locations is high, it will tune towards the one believed to be more accurate. A place you might see this effect in your daily life is driving through a long tunnel with a GPS navigation app running. During your time in the tunnel your GPS receiver won\u2019t be receiving satellite information, but it will likely be using a Kalman filter (or similar algorithm) to continue moving your position through the tunnel based on your speed when entering.<\/p>\n<h3>The journey doesn\u2019t end here<\/h3>\n<p>Improving device location accuracy can mean using different tools and out-of-the-box APIs already available from the ArcGIS Maps SDK for Kotlin or Native Android APIs. It could also involve improving the location information you get by optimizing for the use case. Balancing spatial and temporal accuracy, snapping to a known transport network, averaging measured locations, and more advanced algorithms like Kalman filters can all help improve the reliability of positioning that humble blue dot in your apps.<\/p>\n<h3>Summary<\/h3>\n<p>I hope these ideas have intrigued you and will inspire you to check out the <a href=\"https:\/\/developers.arcgis.com\/kotlin\/get-started\/\">ArcGIS Maps SDK for Kotlin<\/a>.<\/p>\n<p>To get started building an app that includes live location, check out the Kotlin Maps SDK tutorial <a href=\"https:\/\/developers.arcgis.com\/kotlin\/device-location\/tutorials\/display-device-location\/\">Display device location<\/a>.<\/p>\n<p>For more advanced implementations, checkout our other Kotlin Maps SDKs samples including how to use the <a href=\"https:\/\/github.com\/Esri\/arcgis-maps-sdk-kotlin-samples\/tree\/main\/samples\/show-device-location-using-fused-location-data-source\">fused location provider<\/a>, how to process <a href=\"https:\/\/github.com\/Esri\/arcgis-maps-sdk-kotlin-samples\/tree\/main\/samples\/display-device-location-with-nmea-data-sources\">location from NMEA sentences<\/a> and how to use <a href=\"https:\/\/github.com\/Esri\/arcgis-maps-sdk-kotlin-samples\/tree\/main\/samples\/show-device-location-using-indoor-positioning\">indoor positioning<\/a>.<\/p>\n<p>If you\u2019d like to see the code for the Kalman filter I shared above, the link to the GitHub repo is available <a href=\"https:\/\/github.com\/TADraeseke\/filter-location-with-kalman-filter-kotlin\">here<\/a>.<\/p>\n"}],"related_articles":[{"ID":1946112,"post_author":"309352","post_date":"2023-06-20 10:38:08","post_date_gmt":"2023-06-20 17:38:08","post_content":"","post_title":"Mapping complex data with multipart geometries using the ArcGIS Maps SDKs for Native Apps","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"mapping-complex-data-with-multipart-geometries-using-the-arcgis-maps-sdks-for-native-apps","to_ping":"","pinged":"","post_modified":"2023-06-20 10:39:32","post_modified_gmt":"2023-06-20 17:39:32","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1946112","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":2789732,"post_author":"8722","post_date":"2025-05-13 10:05:27","post_date_gmt":"2025-05-13 17:05:27","post_content":"","post_title":"How to create an ArcGIS Maps SDK for Qt Android App using CMake","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"how-to-create-an-arcgis-maps-sdk-for-qt-android-app-using-cmake","to_ping":"","pinged":"","post_modified":"2025-05-13 15:20:30","post_modified_gmt":"2025-05-13 22:20:30","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2789732","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":2749742,"post_author":"4091","post_date":"2025-04-09 06:19:10","post_date_gmt":"2025-04-09 13:19:10","post_content":"","post_title":"What's new in ArcGIS Maps SDKs for Native Apps 200.7","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"whats-new-in-arcgis-maps-sdks-for-native-apps-200-7","to_ping":"","pinged":"","post_modified":"2025-05-19 06:01:16","post_modified_gmt":"2025-05-19 13:01:16","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2749742","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"show_article_image":false,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/kalman-filter-banner.png","wide_image":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Science of Where I Am - Displaying Device Location<\/title>\n<meta name=\"description\" content=\"Learn about the considerations involved when displaying device location in a geospatial application with the Native Maps SDKs.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Science of Where I Am - Displaying Device Location with the Native Maps SDKs\" \/>\n<meta property=\"og:description\" content=\"Learn about the considerations involved when displaying device location in a geospatial application with the Native Maps SDKs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-09T21:07:59+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\"},\"author\":{\"name\":\"Trevor Draeseke\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/7556520ffe0247d5414a83d2c00f1346\"},\"headline\":\"The Science of Where I Am &#8211; Displaying Device Location with the Native Maps SDKs\",\"datePublished\":\"2025-06-05T18:08:41+00:00\",\"dateModified\":\"2025-06-09T21:07:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\"},\"wordCount\":15,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"device location\",\"GNSS\",\"GPS\",\"kalman filter\",\"mobile development\"],\"articleSection\":[\"Developers\",\"Mapping\",\"Real-Time Visualization &amp; Analytics\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\",\"name\":\"The Science of Where I Am - Displaying Device Location\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2025-06-05T18:08:41+00:00\",\"dateModified\":\"2025-06-09T21:07:59+00:00\",\"description\":\"Learn about the considerations involved when displaying device location in a geospatial application with the Native Maps SDKs.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Science of Where I Am &#8211; Displaying Device Location with the Native Maps SDKs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/7556520ffe0247d5414a83d2c00f1346\",\"name\":\"Trevor Draeseke\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/plenary-213x200.jpeg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/plenary-213x200.jpeg\",\"caption\":\"Trevor Draeseke\"},\"description\":\"I'm a Product Engineer specializing in the ArcGIS Maps SDK for Kotlin at Esri. My passion for mapping and geographic information systems began during my tenure as a maritime archaeologist, where I first recognized the power of spatial data on understanding our world--past and present!\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/tdraeseke\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The Science of Where I Am - Displaying Device Location","description":"Learn about the considerations involved when displaying device location in a geospatial application with the Native Maps SDKs.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location","og_locale":"en_US","og_type":"article","og_title":"The Science of Where I Am - Displaying Device Location with the Native Maps SDKs","og_description":"Learn about the considerations involved when displaying device location in a geospatial application with the Native Maps SDKs.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2025-06-09T21:07:59+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","twitter_misc":{"Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location"},"author":{"name":"Trevor Draeseke","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/7556520ffe0247d5414a83d2c00f1346"},"headline":"The Science of Where I Am &#8211; Displaying Device Location with the Native Maps SDKs","datePublished":"2025-06-05T18:08:41+00:00","dateModified":"2025-06-09T21:07:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location"},"wordCount":15,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["device location","GNSS","GPS","kalman filter","mobile development"],"articleSection":["Developers","Mapping","Real-Time Visualization &amp; Analytics"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location","name":"The Science of Where I Am - Displaying Device Location","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2025-06-05T18:08:41+00:00","dateModified":"2025-06-09T21:07:59+00:00","description":"Learn about the considerations involved when displaying device location in a geospatial application with the Native Maps SDKs.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-kotlin\/developers\/the-science-of-where-i-am-displaying-device-location#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"The Science of Where I Am &#8211; Displaying Device Location with the Native Maps SDKs"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/7556520ffe0247d5414a83d2c00f1346","name":"Trevor Draeseke","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/plenary-213x200.jpeg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/06\/plenary-213x200.jpeg","caption":"Trevor Draeseke"},"description":"I'm a Product Engineer specializing in the ArcGIS Maps SDK for Kotlin at Esri. My passion for mapping and geographic information systems began during my tenure as a maritime archaeologist, where I first recognized the power of spatial data on understanding our world--past and present!","url":"https:\/\/www.esri.com\/arcgis-blog\/author\/tdraeseke"}]}},"text_date":"June 5, 2025","author_name":"Trevor Draeseke","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/tdraeseke","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/08\/Newsroom-Keyart-Wide-1920-x-1080.jpg","primary_product":"ArcGIS Maps SDK for Kotlin","tag_data":[{"term_id":758061,"name":"device location","slug":"device-location","term_group":0,"term_taxonomy_id":758061,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":28091,"name":"GNSS","slug":"gnss","term_group":0,"term_taxonomy_id":28091,"taxonomy":"post_tag","description":"","parent":0,"count":27,"filter":"raw"},{"term_id":28101,"name":"GPS","slug":"gps","term_group":0,"term_taxonomy_id":28101,"taxonomy":"post_tag","description":"","parent":0,"count":38,"filter":"raw"},{"term_id":779582,"name":"kalman filter","slug":"kalman-filter","term_group":0,"term_taxonomy_id":779582,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":35001,"name":"mobile development","slug":"mobile-development","term_group":0,"term_taxonomy_id":35001,"taxonomy":"post_tag","description":"","parent":0,"count":8,"filter":"raw"}],"category_data":[{"term_id":738191,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":738191,"taxonomy":"category","description":"","parent":0,"count":426,"filter":"raw"},{"term_id":22941,"name":"Mapping","slug":"mapping","term_group":0,"term_taxonomy_id":22941,"taxonomy":"category","description":"","parent":0,"count":2698,"filter":"raw"},{"term_id":37121,"name":"Real-Time Visualization &amp; Analytics","slug":"real-time","term_group":0,"term_taxonomy_id":37121,"taxonomy":"category","description":"","parent":0,"count":166,"filter":"raw"}],"product_data":[{"term_id":768902,"name":"ArcGIS Maps SDK for Kotlin","slug":"sdk-kotlin","term_group":0,"term_taxonomy_id":768902,"taxonomy":"product","description":"","parent":36601,"count":34,"filter":"raw"},{"term_id":768912,"name":"ArcGIS Maps SDK for Swift","slug":"sdk-swift","term_group":0,"term_taxonomy_id":768912,"taxonomy":"product","description":"","parent":36601,"count":33,"filter":"raw"},{"term_id":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":765,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=sdk-kotlin","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2816082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/372172"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2816082"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2816082\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2816082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2816082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2816082"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2816082"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2816082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}