{"id":2009252,"date":"2023-07-03T03:47:02","date_gmt":"2023-07-03T10:47:02","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2009252"},"modified":"2023-08-29T07:46:33","modified_gmt":"2023-08-29T14:46:33","slug":"how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks","title":{"rendered":"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks"},"author":30781,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[738191],"tags":[769082,771082,538822,762452,771072],"industry":[],"product":[769162],"class_list":["post-2009252","blog","type-blog","status-publish","format-standard","hentry","category-developers","tag-arcgis-maps-sdk-for-java","tag-embedded","tag-iot","tag-offline-data","tag-raspberry-pi","product-sdk-java"],"acf":{"authors":[{"ID":30781,"user_firstname":"Mark","user_lastname":"Baird","nickname":"mbaird","user_nicename":"mbaird","display_name":"Mark Baird","user_email":"mbaird@esri.com","user_url":"https:\/\/github.com\/mbcoder\/","user_registered":"2020-04-29 09:59:19","user_description":"Mark Baird is the engineering lead for the ArcGIS Maps SDK for Java product. He has worked with GIS for 25 years in both consultancy roles and more recently in product development. This has involved working in many industry areas including environmental science, ecology, insurance risk analysis, public safety and situation awareness systems.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/Mugshot-466x465.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"short_description":"An introduction to IoT data collection using the ArcGIS Maps SDK for Java","flexible_content":[{"acf_fc_layout":"content","content":"<p>This blog is the first in a series of articles which aim to demonstrate how the <a href=\"https:\/\/community.esri.com\/t5\/arcgis-maps-sdks-native-blog\/arcgis-maps-sdk-for-java-with-support-for-arm64\/ba-p\/1304914\" target=\"_blank\" rel=\"noopener\">beta release<\/a> of the <a href=\"https:\/\/developers.arcgis.com\/java\/\" target=\"_blank\" rel=\"noopener\">ArcGIS Maps SDK for Java<\/a> (with ARM Linux support) can be used for IoT data recording apps.<\/p>\n<p>The libraries used in this article are available on request by emailing <a href=\"mailto:ARM64LinuxNative@esri.com\" target=\"_blank\" rel=\"noopener\">ARM64LinuxNative@esri.com<\/a>.<\/p>\n<p><strong>Introduction<\/strong><\/p>\n<p>In this blog, I\u2019ll walk through how \u00a0to make an inexpensive GPS data logger using a Raspberry Pi to collect location updates every 10 seconds, and write them to a hosted data service on the <a href=\"https:\/\/www.esri.com\/en-us\/arcgis\/products\/arcgis-platform\/overview\" target=\"_blank\" rel=\"noopener\">ArcGIS platform<\/a>. Potential uses of this kind of hardware could include vehicle or other mobile asset tracking; \u00a0you could even make your own fitness or pet tracker.<\/p>\n<p>I\u2019m using the Raspberry Pi platform for this blog post series as they are particularly well suited for IoT projects.\u00a0 The Raspberry Pi has a good range of hardware extensions (such as GPS units, weather sensors, cameras) and software libraries making it easy to prototype a wide variety of data collection applications.<\/p>\n<p>I used the following kit in this example:<\/p>\n<ul>\n<li>Raspberry Pi 3 Model B<\/li>\n<li>20000mAh portable power bank<\/li>\n<li>USB GPS Unit<\/li>\n<\/ul>\n<p>This is a picture of my setup just prior to popping into my rucksack for testing on a short bike ride.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2009282,"id":2009282,"title":"GPS Logger","filename":"GPS-Logger.png","filesize":1341935,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/GPS-Logger.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\/gps-logger","alt":"GPS data logger components","author":"30781","description":"","caption":"Components used in GPS logger","name":"gps-logger","status":"inherit","uploaded_to":2009252,"date":"2023-06-30 15:42:59","modified":"2023-07-03 12:33:59","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":787,"height":773,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/GPS-Logger-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/GPS-Logger.png","medium-width":266,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/GPS-Logger.png","medium_large-width":768,"medium_large-height":754,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/GPS-Logger.png","large-width":787,"large-height":773,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/GPS-Logger.png","1536x1536-width":787,"1536x1536-height":773,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/GPS-Logger.png","2048x2048-width":787,"2048x2048-height":773,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/GPS-Logger-473x465.png","card_image-width":473,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/GPS-Logger.png","wide_image-width":787,"wide_image-height":773}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>The source code for this project is located in my <a href=\"https:\/\/github.com\/mbcoder\/gps-logger\" target=\"_blank\" rel=\"noopener\">gps-logger<\/a> git project where I have also included some basic setup <a href=\"https:\/\/github.com\/mbcoder\/gps-logger\/blob\/main\/Raspberry%20Pi%20Setup.md\" target=\"_blank\" rel=\"noopener\">instructions<\/a> for the Raspberry Pi.<\/p>\n<p><strong>Collecting data with unreliable network connectivity<\/strong><\/p>\n<p>One of the challenges you may come across in any IoT data collection app is an unreliable network connection. Although the data you want to record needs to be stored on a server for viewing or analysing (in my case for this blog, a <a href=\"https:\/\/developers.arcgis.com\/documentation\/glossary\/feature-service\/\" target=\"_blank\" rel=\"noopener\">feature service<\/a> hosted on the ArcGIS platform),\u00a0the \u00a0equipment you are using may not always have a reliable network connection to write data into the data storage service.<\/p>\n<p>For example, when I turn on the Raspberry Pi outside my house it connects to the network, but as soon as I cycle down the road collecting GPS tracks that connection soon goes away.\u00a0 This problem is easily overcome however using the offline data capabilities of the Java Maps SDK.\u00a0 Basically, my application uses the offline capabilities as follows:<\/p>\n<ul>\n<li>Whilst connected to the network, it gets an <a href=\"https:\/\/developers.arcgis.com\/documentation\/glossary\/geodatabase\/\" target=\"_blank\" rel=\"noopener\">offline geodatabase<\/a> from the feature service.<\/li>\n<li>The app uses the offline geodatabase for recording the GPS tracks without the need for a network connection.<\/li>\n<li>Once I\u2019ve got a network connection, I can sync the data I\u2019ve collected to the feature service.<\/li>\n<\/ul>\n<p>For the purposes of demonstrating this app, I have created a feature service which is used by the application.\u00a0 You should however be aware if you record GPS tracks in this service, they will be visible by anyone, and the data will be regularly deleted.\u00a0 For a production application or your own private testing, you should create your own feature service in an ArcGIS Online account. \u00a0More information can be found about offline data viewing and collection workflows <a href=\"https:\/\/developers.arcgis.com\/java\/offline-maps-scenes-and-data\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p><strong>Reading data from the Raspberry Pi<\/strong><\/p>\n<p>In all the IoT data collection projects I\u2019m going to share, I will be reading data from hardware devices connected to the Raspberry Pi.\u00a0 As I\u2019m using the ArcGIS Maps SDK for Java as the bases for my projects, I have been using an open-source library called <a href=\"https:\/\/pi4j.com\/\" target=\"_blank\" rel=\"noopener\">Pi4J<\/a>.\u00a0 \u00a0The library provides a Java API which gives you easy access to the Raspberry Pi hardware such as the serial port, camera, GPIO and I2C interfaces.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2009302,"id":2009302,"title":"RPi","filename":"RPi.png","filesize":2890755,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/RPi.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\/rpi","alt":"Raspberry Pi PCB","author":"30781","description":"","caption":"Raspberry Pi PCB","name":"rpi","status":"inherit","uploaded_to":2009252,"date":"2023-06-30 15:45:21","modified":"2023-07-03 12:34:35","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":1336,"height":1006,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/RPi-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/RPi.png","medium-width":347,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/RPi.png","medium_large-width":768,"medium_large-height":578,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/RPi.png","large-width":1336,"large-height":1006,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/RPi.png","1536x1536-width":1336,"1536x1536-height":1006,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/RPi.png","2048x2048-width":1336,"2048x2048-height":1006,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/RPi-618x465.png","card_image-width":618,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/RPi.png","wide_image-width":1336,"wide_image-height":1006}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><strong>Processing raw GPS data<\/strong><\/p>\n<p>The data which comes from a GPS device such as the USB GPS I\u2019m using in this project comes in the form of NMEA (National Maritime Electronics Association) sentences.\u00a0 These sentences contain position, velocity and time information which can be decoded\u00a0and used\u00a0to show location and direction on a map application.\u00a0 The text below shows an example of some NMEA data from a GPS:<\/p>\n<div>\n<pre style=\"background: #ffffff;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em;margin: 0;line-height: 125%\">$GPGSV<span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">3<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">3<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">12<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">09<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">12<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">255<\/span><span style=\"color: #333333\">,,<\/span><span style=\"color: #0000dd;font-weight: bold\">20<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">12<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">068<\/span><span style=\"color: #333333\">,,<\/span><span style=\"color: #0000dd;font-weight: bold\">23<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">08<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">070<\/span><span style=\"color: #333333\">,,<\/span><span style=\"color: #0000dd;font-weight: bold\">10<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">03<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">099<\/span><span style=\"color: #333333\">,*<\/span><span style=\"color: #0000dd;font-weight: bold\">71<\/span>\r\n$GPRMC<span style=\"color: #333333\">,<\/span><span style=\"color: #6600ee;font-weight: bold\">185842.918<\/span><span style=\"color: #333333\">,<\/span>V<span style=\"color: #333333\">,,,,,,,<\/span><span style=\"color: #0000dd;font-weight: bold\">010321<\/span><span style=\"color: #333333\">,,,<\/span>N<span style=\"color: #333333\">*<\/span><span style=\"color: #0000dd;font-weight: bold\">4<\/span>E\r\n$GPGGA<span style=\"color: #333333\">,<\/span><span style=\"color: #6600ee;font-weight: bold\">185843.918<\/span><span style=\"color: #333333\">,,,,,<\/span><span style=\"color: #0000dd;font-weight: bold\">0<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">00<\/span><span style=\"color: #333333\">,,,<\/span>M<span style=\"color: #333333\">,<\/span><span style=\"color: #6600ee;font-weight: bold\">0.0<\/span><span style=\"color: #333333\">,<\/span>M<span style=\"color: #333333\">,,<\/span><span style=\"color: #0000dd;font-weight: bold\">0000<\/span><span style=\"color: #333333\">*<\/span><span style=\"color: #0000dd;font-weight: bold\">55<\/span>\r\n$GPGSA<span style=\"color: #333333\">,<\/span>A<span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">1<\/span><span style=\"color: #333333\">,,,,,,,,,,,,,,,*<\/span><span style=\"color: #0000dd;font-weight: bold\">1<\/span>E\r\n$GPRMC<span style=\"color: #333333\">,<\/span><span style=\"color: #6600ee;font-weight: bold\">185843.918<\/span><span style=\"color: #333333\">,<\/span>V<span style=\"color: #333333\">,,,,,,,<\/span><span style=\"color: #0000dd;font-weight: bold\">010321<\/span><span style=\"color: #333333\">,,,<\/span>N<span style=\"color: #333333\">*<\/span><span style=\"color: #0000dd;font-weight: bold\">4<\/span>F\r\n$GPGGA<span style=\"color: #333333\">,<\/span><span style=\"color: #6600ee;font-weight: bold\">185844.915<\/span><span style=\"color: #333333\">,,,,,<\/span><span style=\"color: #0000dd;font-weight: bold\">0<\/span><span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">00<\/span><span style=\"color: #333333\">,,,<\/span>M<span style=\"color: #333333\">,<\/span><span style=\"color: #6600ee;font-weight: bold\">0.0<\/span><span style=\"color: #333333\">,<\/span>M<span style=\"color: #333333\">,,<\/span><span style=\"color: #0000dd;font-weight: bold\">0000<\/span><span style=\"color: #333333\">*<\/span><span style=\"color: #0000dd;font-weight: bold\">5<\/span>F\r\n$GPGSA<span style=\"color: #333333\">,<\/span>A<span style=\"color: #333333\">,<\/span><span style=\"color: #0000dd;font-weight: bold\">1<\/span><span style=\"color: #333333\">,,,,,,,,,,,,,,,*<\/span><span style=\"color: #0000dd;font-weight: bold\">1<\/span>E\r\n$GPRMC<span style=\"color: #333333\">,<\/span><span style=\"color: #6600ee;font-weight: bold\">185844.915<\/span><span style=\"color: #333333\">,<\/span>V<span style=\"color: #333333\">,,,,,,,<\/span><span style=\"color: #0000dd;font-weight: bold\">010321<\/span><span style=\"color: #333333\">,,,<\/span>N<span style=\"color: #333333\">*<\/span><span style=\"color: #0000dd;font-weight: bold\">45<\/span>\r\n<\/pre>\n<\/div>\n<p>I\u2019ve used the Pi4J library to listen to the GPS serial data and once you are listening into this stream of data coming from your GPS device, we\u2019ve made it easy for you to parse the sentences and turn them into location updates.\u00a0 The Java Maps SDK has a class called the <a href=\"https:\/\/developers.arcgis.com\/java\/api-reference\/reference\/com.esri.arcgisruntime\/com\/esri\/arcgisruntime\/location\/NmeaLocationDataSource.html\" target=\"_blank\" rel=\"noopener\"><strong>NmeaLocationDataSource<\/strong><\/a> which has a <strong>pushData<\/strong> method which you need to call every time you get new data from the GPS unit.<\/p>\n<p>Now you are pushing NMEA sentences into the <a href=\"https:\/\/developers.arcgis.com\/java\/api-reference\/reference\/com.esri.arcgisruntime\/com\/esri\/arcgisruntime\/location\/NmeaLocationDataSource.html\" target=\"_blank\" rel=\"noopener\"><strong>NmeaLocationDataSource<\/strong><\/a> instance, you can set up a listener on the class which will fire every time you get a new position update.\u00a0 In the code below, I\u2019m creating a new feature which can be written into my offline geodatabase which is recording my GPS track:<\/p>\n<div>\n<pre style=\"background: #ffffff;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em;margin: 0;line-height: 125%\">nmeaLocationDataSource<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">addLocationChangedListener<\/span><span style=\"color: #333333\">(<\/span>listener <span style=\"color: #333333\">-&gt;<\/span> <span style=\"color: #333333\">{<\/span>\r\n\r\n    <span style=\"color: #888888\">\/\/ create default attributes for the feature<\/span>\r\n    Map<span style=\"color: #333333\">&lt;<\/span>String<span style=\"color: #333333\">,<\/span> Object<span style=\"color: #333333\">&gt;<\/span> attributes <span style=\"color: #333333\">=<\/span> <span style=\"color: #008800;font-weight: bold\">new<\/span> HashMap<span style=\"color: #333333\">&lt;&gt;();<\/span>\r\n    attributes<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">put<\/span><span style=\"color: #333333\">(<\/span><span style=\"background-color: #fff0f0\">\"TrackID\"<\/span><span style=\"color: #333333\">,<\/span> <span style=\"background-color: #fff0f0\">\"GPS Test\"<\/span><span style=\"color: #333333\">);<\/span>\r\n    attributes<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">put<\/span><span style=\"color: #333333\">(<\/span><span style=\"background-color: #fff0f0\">\"Speed\"<\/span><span style=\"color: #333333\">,<\/span> listener<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">getLocation<\/span><span style=\"color: #333333\">().<\/span><span style=\"color: #0000cc\">getVelocity<\/span><span style=\"color: #333333\">());<\/span>\r\n    attributes<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">put<\/span><span style=\"color: #333333\">(<\/span><span style=\"background-color: #fff0f0\">\"Heading\"<\/span><span style=\"color: #333333\">,<\/span> listener<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">getLocation<\/span><span style=\"color: #333333\">().<\/span><span style=\"color: #0000cc\">getCourse<\/span><span style=\"color: #333333\">());<\/span>\r\n\r\n    Point latestPoint <span style=\"color: #333333\">=<\/span> <span style=\"color: #008800;font-weight: bold\">new<\/span> Point<span style=\"color: #333333\">(<\/span>listener<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">getLocation<\/span><span style=\"color: #333333\">().<\/span><span style=\"color: #0000cc\">getPosition<\/span><span style=\"color: #333333\">().<\/span><span style=\"color: #0000cc\">getX<\/span><span style=\"color: #333333\">(),<\/span> listener<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">getLocation<\/span><span style=\"color: #333333\">().<\/span><span style=\"color: #0000cc\">getPosition<\/span><span style=\"color: #333333\">().<\/span><span style=\"color: #0000cc\">getY<\/span><span style=\"color: #333333\">(),<\/span> listener<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">getLocation<\/span><span style=\"color: #333333\">().<\/span><span style=\"color: #0000cc\">getPosition<\/span><span style=\"color: #333333\">().<\/span><span style=\"color: #0000cc\">getSpatialReference<\/span><span style=\"color: #333333\">());<\/span>\r\n\r\n    <span style=\"color: #888888\">\/\/ update the latest position feature<\/span>\r\n    latestPosition <span style=\"color: #333333\">=<\/span> table<span style=\"color: #333333\">.<\/span><span style=\"color: #0000cc\">createFeature<\/span><span style=\"color: #333333\">(<\/span>attributes<span style=\"color: #333333\">,<\/span> latestPoint<span style=\"color: #333333\">);<\/span>\r\n\r\n    <span style=\"color: #888888\">\/\/ set flag to say there is a position update<\/span>\r\n    featureUpdated <span style=\"color: #333333\">=<\/span> <span style=\"color: #008800;font-weight: bold\">true<\/span><span style=\"color: #333333\">;<\/span>\r\n<span style=\"color: #333333\">});<\/span>\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p><strong>Application code overview<\/strong><\/p>\n<p>Although the use case I\u2019m demonstrating here would typically be implemented as a headless application which automatically starts up when the Raspberry Pi boots up, to make things easier to understand I\u2019ve implemented the app based on a simple JavaFX UI where you can manually trigger the following operations:<\/p>\n<ul>\n<li>Getting an offline geodatabase for collecting data with no network<\/li>\n<li>Opening the offline geodatabase<\/li>\n<li>Reading the serial port to collect NMEA data and process to get position data.<\/li>\n<li>Recording the GPS data to the offline geodatabase<\/li>\n<li>Syncing GPS data collected back to the feature service.<\/li>\n<\/ul>\n<p>The video below shows how I use the GPS logger to record a short bike ride.<\/p>\n"},{"acf_fc_layout":"youtube","start_time":"0","end_time":"","youtube_video_url":"<iframe title=\"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/-3daLq7dO1c?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>"},{"acf_fc_layout":"content","content":"<p>The information I\u2019m recording in the feature service is only basic point data recorded every 10 seconds along the route, but there are lots of possibilities for processing and enhancing the data recorded. For example, \u00a0I could extend this workflow to find out more information such as:<\/p>\n<ul>\n<li>Route length<\/li>\n<li>Elevation profile<\/li>\n<li>Min, Max and average speed<\/li>\n<\/ul>\n"},{"acf_fc_layout":"storymap","title":"","description":"","static":false,"storymap_url":"<a href=\"https:\/\/runtime.maps.arcgis.com\/apps\/instant\/basic\/index.html?appid=1e4ee70b8d774ee6a513dfbe39ce5f11\">https:\/\/runtime.maps.arcgis.com\/apps\/instant\/basic\/index.html?appid=1e4ee70b8d774ee6a513dfbe39ce5f11<\/a>"},{"acf_fc_layout":"content","content":"<p>The data collected in the feature service used in this app can be viewed this <a href=\"https:\/\/runtime.maps.arcgis.com\/apps\/mapviewer\/index.html?webmap=24b35adb8c8246868aa78187fc983b5a\" target=\"_blank\" rel=\"noopener\">webmap<\/a>.<\/p>\n<p><strong>Summary<\/strong><\/p>\n<p>In this blog post, we\u2019ve looked at a use of the beta release of the ArcGIS Maps SDK for Java where we\u2019ve set up an IoT device for collecting GPS location data and written this back into a feature service on the ArcGIS platform where the data can be viewed and further analysed.\u00a0 \u00a0We\u2019ve also explored how to collect data in an environment where network connectivity is unreliable by using our offline data collection techniques.<\/p>\n<p>In the next blog posts, which showcase ideas for IoT using a Raspberry Pi, I will be adding the following project ideas:<\/p>\n<ul>\n<li>GPS logger with camera upgrade<\/li>\n<li><a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/java-maps-sdk-raspberry-pi-weather-station\/\" target=\"_blank\" rel=\"noopener\">Weather station<\/a><\/li>\n<\/ul>\n"},{"acf_fc_layout":"image","image":{"ID":2009452,"id":2009452,"title":"IoT Sensors","filename":"IoT-Sensors.png","filesize":897251,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/IoT-Sensors.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\/iot-sensors","alt":"Raspberry Pi sensors","author":"30781","description":"","caption":"Raspberry Pi sensors","name":"iot-sensors","status":"inherit","uploaded_to":2009252,"date":"2023-06-30 16:32:52","modified":"2023-07-03 12:35:06","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":933,"height":513,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/IoT-Sensors-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/IoT-Sensors.png","medium-width":464,"medium-height":255,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/IoT-Sensors.png","medium_large-width":768,"medium_large-height":422,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/IoT-Sensors.png","large-width":933,"large-height":513,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/IoT-Sensors.png","1536x1536-width":933,"1536x1536-height":513,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/IoT-Sensors.png","2048x2048-width":933,"2048x2048-height":513,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/IoT-Sensors-826x454.png","card_image-width":826,"card_image-height":454,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/IoT-Sensors.png","wide_image-width":933,"wide_image-height":513}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>If you would like to try these projects out for yourself, please contact us on <a href=\"mailto:ARM64LinuxNative@esri.com\" target=\"_blank\" rel=\"noopener\">ARM64LinuxNative@esri.com<\/a> for access to the beta release of the ArcGIS Maps SDK for Java with Arm Linux support.<\/p>\n<p>Please consider following <a href=\"https:\/\/twitter.com\/EsriDevs\" target=\"_blank\" rel=\"noopener\">@EsriDevs<\/a> on Twitter or subscribing to <a href=\"https:\/\/community.esri.com\/t5\/arcgis-maps-sdks-for-native-apps\/ct-p\/arcgis-runtime-sdks\" target=\"_blank\" rel=\"noopener\">Esri Community<\/a> for the latest updates on our products.<\/p>\n<p><em>Note: Raspberry Pi is a trademark of Raspberry Pi Ltd.<\/em><\/p>\n"},{"acf_fc_layout":"content","content":"<p>I do wonder if we could use a smaller Raspberry Pi Zero for tracking the adventures of Sprocket, the co-author of this blog post!<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2009462,"id":2009462,"title":"Sprocket the cat","filename":"Sprocket-the-cat.png","filesize":575976,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/Sprocket-the-cat.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\/sprocket-the-cat","alt":"Sprocket the cat","author":"30781","description":"","caption":"Sprocket the cat","name":"sprocket-the-cat","status":"inherit","uploaded_to":2009252,"date":"2023-06-30 16:34:54","modified":"2023-07-03 14:20:23","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":515,"height":621,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/Sprocket-the-cat-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/Sprocket-the-cat.png","medium-width":216,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/Sprocket-the-cat.png","medium_large-width":515,"medium_large-height":621,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/Sprocket-the-cat.png","large-width":515,"large-height":621,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/Sprocket-the-cat.png","1536x1536-width":515,"1536x1536-height":621,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/Sprocket-the-cat.png","2048x2048-width":515,"2048x2048-height":621,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/Sprocket-the-cat-386x465.png","card_image-width":386,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/06\/Sprocket-the-cat.png","wide_image-width":515,"wide_image-height":621}},"image_position":"center","orientation":"horizontal","hyperlink":""}],"related_articles":"","card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/07\/PI-826.jpg","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/07\/PI-1920.jpg"},"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>How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks<\/title>\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-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\" \/>\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=\"2023-08-29T14:46:33+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\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-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\"},\"author\":{\"name\":\"Mark Baird\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/403e5f28824843bb88f7a5b3f7974531\"},\"headline\":\"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks\",\"datePublished\":\"2023-07-03T10:47:02+00:00\",\"dateModified\":\"2023-08-29T14:46:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\"},\"wordCount\":17,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"arcgis maps sdk for java\",\"Embedded\",\"IoT\",\"offline data\",\"Raspberry Pi\"],\"articleSection\":[\"Developers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\",\"name\":\"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2023-07-03T10:47:02+00:00\",\"dateModified\":\"2023-08-29T14:46:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks\"}]},{\"@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\/403e5f28824843bb88f7a5b3f7974531\",\"name\":\"Mark Baird\",\"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\/2023\/08\/Mugshot-466x465.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/Mugshot-466x465.png\",\"caption\":\"Mark Baird\"},\"description\":\"Mark Baird is the engineering lead for the ArcGIS Maps SDK for Java product. He has worked with GIS for 25 years in both consultancy roles and more recently in product development. This has involved working in many industry areas including environmental science, ecology, insurance risk analysis, public safety and situation awareness systems.\",\"sameAs\":[\"https:\/\/github.com\/mbcoder\/\",\"https:\/\/www.linkedin.com\/in\/mark-baird-5565786\/\",\"https:\/\/studio.youtube.com\/channel\/UC4WdKUaIqjVKNomMycQuOHw\/videos\/upload?filter=&sort=columnTypedatesortOrderDESCENDING\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/mbaird\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks","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-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks","og_locale":"en_US","og_type":"article","og_title":"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2023-08-29T14:46:33+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks"},"author":{"name":"Mark Baird","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/403e5f28824843bb88f7a5b3f7974531"},"headline":"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks","datePublished":"2023-07-03T10:47:02+00:00","dateModified":"2023-08-29T14:46:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks"},"wordCount":17,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["arcgis maps sdk for java","Embedded","IoT","offline data","Raspberry Pi"],"articleSection":["Developers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks","name":"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2023-07-03T10:47:02+00:00","dateModified":"2023-08-29T14:46:33+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/sdk-java\/developers\/how-to-use-the-arcgis-maps-sdk-for-java-in-a-raspberry-pi-for-recording-gps-tracks#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"How to use the ArcGIS Maps SDK for Java in a Raspberry Pi for recording GPS tracks"}]},{"@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\/403e5f28824843bb88f7a5b3f7974531","name":"Mark Baird","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\/2023\/08\/Mugshot-466x465.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/08\/Mugshot-466x465.png","caption":"Mark Baird"},"description":"Mark Baird is the engineering lead for the ArcGIS Maps SDK for Java product. He has worked with GIS for 25 years in both consultancy roles and more recently in product development. This has involved working in many industry areas including environmental science, ecology, insurance risk analysis, public safety and situation awareness systems.","sameAs":["https:\/\/github.com\/mbcoder\/","https:\/\/www.linkedin.com\/in\/mark-baird-5565786\/","https:\/\/studio.youtube.com\/channel\/UC4WdKUaIqjVKNomMycQuOHw\/videos\/upload?filter=&sort=columnTypedatesortOrderDESCENDING"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/mbaird"}]}},"text_date":"July 3, 2023","author_name":"Mark Baird","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/mbaird","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2023\/07\/PI-1920.jpg","primary_product":"ArcGIS Maps SDK for Java","tag_data":[{"term_id":769082,"name":"arcgis maps sdk for java","slug":"arcgis-maps-sdk-for-java","term_group":0,"term_taxonomy_id":769082,"taxonomy":"post_tag","description":"","parent":0,"count":3,"filter":"raw"},{"term_id":771082,"name":"Embedded","slug":"embedded","term_group":0,"term_taxonomy_id":771082,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":538822,"name":"IoT","slug":"iot","term_group":0,"term_taxonomy_id":538822,"taxonomy":"post_tag","description":"","parent":0,"count":7,"filter":"raw"},{"term_id":762452,"name":"offline data","slug":"offline-data","term_group":0,"term_taxonomy_id":762452,"taxonomy":"post_tag","description":"","parent":0,"count":3,"filter":"raw"},{"term_id":771072,"name":"Raspberry Pi","slug":"raspberry-pi","term_group":0,"term_taxonomy_id":771072,"taxonomy":"post_tag","description":"","parent":0,"count":2,"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"}],"product_data":[{"term_id":769162,"name":"ArcGIS Maps SDK for Java","slug":"sdk-java","term_group":0,"term_taxonomy_id":769162,"taxonomy":"product","description":"","parent":36601,"count":24,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=sdk-java","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2009252","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\/30781"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2009252"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2009252\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2009252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2009252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2009252"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2009252"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2009252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}