From 58cf707513d919db872e41fe56d2600725366033 Mon Sep 17 00:00:00 2001 From: Nathan Seidle Date: Thu, 12 Sep 2024 15:03:59 -0600 Subject: [PATCH] Docs: Add to iOS GIS apps --- docs/gis_software_android.md | 229 +++++++++++++++++- docs/gis_software_ios.md | 74 +++++- ...TK Diamond Maps - GNSS Source Selected.png | Bin 0 -> 67197 bytes ...parkFun RTK Diamond Maps - GNSS Source.png | Bin 0 -> 41994 bytes ...parkFun RTK Diamond Maps - Home Screen.png | Bin 0 -> 7495 bytes ...kFun RTK Diamond Maps - NTRIP Settings.png | Bin 0 -> 49916 bytes .../SparkFun RTK Diamond Maps - RTK Fix.png | Bin 0 -> 205730 bytes ...rkFun RTK Diamond Maps - Settings Menu.png | Bin 0 -> 52526 bytes .../SparkFun RTK Field Maps - Main.png | Bin 0 -> 89440 bytes .../SparkFun RTK Field Maps - RTK Fix.png | Bin 0 -> 214164 bytes ...Fun RTK GNSS Master - Correction Input.png | Bin 0 -> 46487 bytes ...aster - Correction Source Data Flowing.png | Bin 0 -> 27294 bytes ...K GNSS Master - Correction Source List.png | Bin 0 -> 28264 bytes .../SparkFun RTK GNSS Master - Main.png | Bin 0 -> 40183 bytes ...arkFun RTK GNSS Master - Mock Location.png | Bin 0 -> 55572 bytes ...n RTK GNSS Master - NTRIP Client Input.png | Bin 0 -> 44591 bytes ...n RTK GNSS Master - Receiver Selection.png | Bin 0 -> 30886 bytes ...bure - Getting Data with Mock Location.png | Bin 0 -> 61076 bytes .../Lefebure/SparkFun RTK Lefebure - Main.png | Bin 0 -> 30387 bytes ...n RTK Lefebure - NTRIP Client Settings.png | Bin 0 -> 34708 bytes ...SparkFun RTK Lefebure - NTRIP Settings.png | Bin 0 -> 33060 bytes ...Lefebure - Receiver Settings Bluetooth.png | Bin 0 -> 56267 bytes ...rkFun RTK Lefebure - Receiver Settings.png | Bin 0 -> 33030 bytes ...rkFun RTK Mock Location - Build Number.png | Bin 0 -> 58956 bytes ... RTK Mock Location - Developer Options.png | Bin 0 -> 50003 bytes ...ck Location - Select Mock Location App.png | Bin 0 -> 71667 bytes .../SparkFun RTK Mock Location - Settings.png | Bin 0 -> 7065 bytes ...here - PointPerfect Coverage Map Small.png | Bin 0 -> 56462 bytes ...Everywhere - PointPerfect Coverage Map.png | Bin 0 -> 101701 bytes ... - PointPerfect Localized Distribution.png | Bin 0 -> 367359 bytes ...arkFun RTK QuickCapture - BioBlitz Map.png | Bin 0 -> 70979 bytes .../SparkFun RTK QuickCapture - BioBlitz.png | Bin 0 -> 59107 bytes ...parkFun RTK QuickCapture - Main Window.png | Bin 0 -> 199944 bytes ...kFun RTK QuickCapture - Select Project.png | Bin 0 -> 82144 bytes ...un RTK QuickCapture - WiFi Credentials.png | Bin 0 -> 15642 bytes .../SparkFun RTK QuickCapture - Workspace.png | Bin 0 -> 38678 bytes ...parkFun RTK QuickCapture - Add Project.png | Bin 0 -> 69971 bytes ...un RTK QuickCapture - BioBlitz Project.png | Bin 0 -> 54822 bytes ...un RTK QuickCapture - Main Add Project.png | Bin 0 -> 44370 bytes ...parkFun RTK QuickCapture - Main Screen.png | Bin 0 -> 39947 bytes .../iOS/SparkFun RTK QuickCapture - Map.png | Bin 0 -> 76832 bytes ...ture - Settings Menu Location Provider.png | Bin 0 -> 23348 bytes ...rkFun RTK QuickCapture - Settings Menu.png | Bin 0 -> 17291 bytes .../SparkFun RTK QuickCapture - Splash.png | Bin 0 -> 186830 bytes .../SparkFun RTK QuickCapture - TCP Added.png | Bin 0 -> 16319 bytes ...arkFun RTK QuickCapture - TCP Settings.png | Bin 0 -> 12661 bytes ...K QuickCapture iOS - Enable PVT Server.png | Bin 0 -> 1672 bytes ...kFun RTK QuickCapture iOS - IP Address.png | Bin 0 -> 57354 bytes ...n RTK QuickCapture iOS - WiFi Settings.png | Bin 0 -> 3638 bytes ...SurPad - Communication NTRIP Connected.png | Bin 0 -> 24531 bytes .../SparkFun RTK - SurPad - Communication.png | Bin 0 -> 24381 bytes .../SparkFun RTK - SurPad - Data Link.png | Bin 0 -> 19394 bytes .../SparkFun RTK - SurPad - Home Screen.png | Bin 0 -> 35170 bytes ...arkFun RTK - SurPad - Map with RTK Fix.png | Bin 0 -> 76882 bytes .../SparkFun RTK - SurPad - Point Survey.png | Bin 0 -> 34030 bytes ...arkFun RTK Survey123 - Location Status.png | Bin 0 -> 50576 bytes .../SparkFun RTK Survey123 - Main.png | Bin 0 -> 54631 bytes .../SparkFun RTK Survey123 - Map.png | Bin 0 -> 52371 bytes .../SparkFun RTK Survey123 - Splash.png | Bin 0 -> 211407 bytes .../Terminal/SparkFun RTK Network Menu.png | Bin 0 -> 1670 bytes .../SparkFun RTK WiFi Menu Terminal.png | Bin 7822 -> 2425 bytes .../SparkFun RTK iOS - Hotspot Settings.png | Bin 0 -> 69575 bytes docs/{menu_network.md => menu_tcp_udp.md} | 0 mkdocs.yml | 2 +- 64 files changed, 298 insertions(+), 7 deletions(-) create mode 100644 docs/img/DiamondMaps/SparkFun RTK Diamond Maps - GNSS Source Selected.png create mode 100644 docs/img/DiamondMaps/SparkFun RTK Diamond Maps - GNSS Source.png create mode 100644 docs/img/DiamondMaps/SparkFun RTK Diamond Maps - Home Screen.png create mode 100644 docs/img/DiamondMaps/SparkFun RTK Diamond Maps - NTRIP Settings.png create mode 100644 docs/img/DiamondMaps/SparkFun RTK Diamond Maps - RTK Fix.png create mode 100644 docs/img/DiamondMaps/SparkFun RTK Diamond Maps - Settings Menu.png create mode 100644 docs/img/FieldMaps/SparkFun RTK Field Maps - Main.png create mode 100644 docs/img/FieldMaps/SparkFun RTK Field Maps - RTK Fix.png create mode 100644 docs/img/GNSSMaster/SparkFun RTK GNSS Master - Correction Input.png create mode 100644 docs/img/GNSSMaster/SparkFun RTK GNSS Master - Correction Source Data Flowing.png create mode 100644 docs/img/GNSSMaster/SparkFun RTK GNSS Master - Correction Source List.png create mode 100644 docs/img/GNSSMaster/SparkFun RTK GNSS Master - Main.png create mode 100644 docs/img/GNSSMaster/SparkFun RTK GNSS Master - Mock Location.png create mode 100644 docs/img/GNSSMaster/SparkFun RTK GNSS Master - NTRIP Client Input.png create mode 100644 docs/img/GNSSMaster/SparkFun RTK GNSS Master - Receiver Selection.png create mode 100644 docs/img/Lefebure/SparkFun RTK Lefebure - Getting Data with Mock Location.png create mode 100644 docs/img/Lefebure/SparkFun RTK Lefebure - Main.png create mode 100644 docs/img/Lefebure/SparkFun RTK Lefebure - NTRIP Client Settings.png create mode 100644 docs/img/Lefebure/SparkFun RTK Lefebure - NTRIP Settings.png create mode 100644 docs/img/Lefebure/SparkFun RTK Lefebure - Receiver Settings Bluetooth.png create mode 100644 docs/img/Lefebure/SparkFun RTK Lefebure - Receiver Settings.png create mode 100644 docs/img/MockLocation/SparkFun RTK Mock Location - Build Number.png create mode 100644 docs/img/MockLocation/SparkFun RTK Mock Location - Developer Options.png create mode 100644 docs/img/MockLocation/SparkFun RTK Mock Location - Select Mock Location App.png create mode 100644 docs/img/MockLocation/SparkFun RTK Mock Location - Settings.png create mode 100644 docs/img/PointPerfect/SparkFun RTK Everywhere - PointPerfect Coverage Map Small.png create mode 100644 docs/img/PointPerfect/SparkFun RTK Everywhere - PointPerfect Coverage Map.png create mode 100644 docs/img/PointPerfect/SparkFun RTK Everywhere - PointPerfect Localized Distribution.png create mode 100644 docs/img/QuickCapture/SparkFun RTK QuickCapture - BioBlitz Map.png create mode 100644 docs/img/QuickCapture/SparkFun RTK QuickCapture - BioBlitz.png create mode 100644 docs/img/QuickCapture/SparkFun RTK QuickCapture - Main Window.png create mode 100644 docs/img/QuickCapture/SparkFun RTK QuickCapture - Select Project.png create mode 100644 docs/img/QuickCapture/SparkFun RTK QuickCapture - WiFi Credentials.png create mode 100644 docs/img/QuickCapture/SparkFun RTK QuickCapture - Workspace.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - Add Project.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - BioBlitz Project.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - Main Add Project.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - Main Screen.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - Map.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - Settings Menu Location Provider.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - Settings Menu.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - Splash.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - TCP Added.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture - TCP Settings.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture iOS - Enable PVT Server.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture iOS - IP Address.png create mode 100644 docs/img/QuickCapture/iOS/SparkFun RTK QuickCapture iOS - WiFi Settings.png create mode 100644 docs/img/SurPad/SparkFun RTK - SurPad - Communication NTRIP Connected.png create mode 100644 docs/img/SurPad/SparkFun RTK - SurPad - Communication.png create mode 100644 docs/img/SurPad/SparkFun RTK - SurPad - Data Link.png create mode 100644 docs/img/SurPad/SparkFun RTK - SurPad - Home Screen.png create mode 100644 docs/img/SurPad/SparkFun RTK - SurPad - Map with RTK Fix.png create mode 100644 docs/img/SurPad/SparkFun RTK - SurPad - Point Survey.png create mode 100644 docs/img/Survey123/SparkFun RTK Survey123 - Location Status.png create mode 100644 docs/img/Survey123/SparkFun RTK Survey123 - Main.png create mode 100644 docs/img/Survey123/SparkFun RTK Survey123 - Map.png create mode 100644 docs/img/Survey123/SparkFun RTK Survey123 - Splash.png create mode 100644 docs/img/Terminal/SparkFun RTK Network Menu.png create mode 100644 docs/img/iOS/SparkFun RTK iOS - Hotspot Settings.png rename docs/{menu_network.md => menu_tcp_udp.md} (100%) diff --git a/docs/gis_software_android.md b/docs/gis_software_android.md index 26dce335b..c12cb7e39 100644 --- a/docs/gis_software_android.md +++ b/docs/gis_software_android.md @@ -1,8 +1,109 @@ # Android -Torch: ![Feature Supported](img/Icons/GreenDot.png) +Surveyor: ![Feature Supported](img/Icons/GreenDot.png) / Express: ![Feature Supported](img/Icons/GreenDot.png) / Express Plus: ![Feature Supported](img/Icons/GreenDot.png) / Facet: ![Feature Supported](img/Icons/GreenDot.png) / Facet L-Band: ![Feature Supported](img/Icons/GreenDot.png) / Reference Station: ![Feature Supported](img/Icons/GreenDot.png) -While we recommend [SW Maps for Android](https://docs.sparkfun.com/SparkFun_RTK_Firmware/gis_software_android/#sw-maps), there are a variety of 3rd party apps available for GIS and surveying. We will cover a few examples below that should give you an idea of how to get the incoming NMEA data into the software of your choice. +While we recommend [SW Maps for Android](gis_software_android/#sw-maps), there are a variety of 3rd party apps available for GIS and surveying for [Android](gis_software_android.md), [iOS](gis_software_ios.md), and [Windows](gis_software_windows.md). We will cover a few examples below that should give you an idea of how to get the incoming NMEA data into the software of your choice. + +## ArcGIS Field Maps + +[ArcGIS Field Maps](https://play.google.com/store/apps/details?id=com.esri.fieldmaps&hl=en_US) by Esri is a popular GIS app. Unfortunately it does not have a built in NTRIP Client to allow high precision corrections down to the RTK device. To enable high-precision, a [mock location](connecting_bluetooth.md/#enable-mock-location) and an intermediary app such as [GNSS Master](gis_software_android.md/#gnss-master) or [Lefebure](gis_software_android.md/#lefebure) is needed. + +Once a [mock location](connecting_bluetooth.md/#enable-mock-location) provider is setup, open Field Maps. +![Field Maps main menu]() + +Select **World Imagery**. + +![ArcGIS Field Maps with 12mm accuracy]() + +*ArcGIS Field Maps with 12mm accuracy* + +Field Maps will use the device's internal location as its default location provider. With GNSS Master or Lefebure providing the mock location to the phone, Field Maps will have a super precise GNSS location and data collection can begin. + +## ArcGIS QuickCapture + +[ArcGIS QuickCapture](https://play.google.com/store/apps/details?id=com.esri.arcgisquickcapture&hl=en_US) by Esri is a popular GIS app. Unfortunately it does not allow Bluetooth connections to 3rd party RTK devices. To enable a connection to a SparkFun RTK device, a [mock location](connecting_bluetooth.md/#enable-mock-location) and an intermediary app such as [GNSS Master](gis_software_android.md/#gnss-master) or [Lefebure](gis_software_android.md/#lefebure) is needed. + +Once a [mock location](connecting_bluetooth.md/#enable-mock-location) provider is setup, open QuickCapture. + +![QuickCapture Main Window]() + +For the purposes of this demonstration, click *Continue without signing in*. + +![Add project button]() + +Select the **+** then **Browse Projects**. + +![Select BioBlitz]() + +Select a project. + +![BioBlitz options]() + +From the BioBlitz project screen we can see we have a GPS accuracy of less than 1 ft. The RTK device has RTK fix and is providing extremely accurate (better than 20mm or 1") positional data. + +Click the map icon in the upper right. + +![BioBlitz Map]() + +The location of the receiver is shown on a map. With GNSS Master or Lefebure providing the mock location to the phone, QuickCapture will have a very precise GNSS location and data collection can begin. + +## ArcGIS Survey123 + +[ArcGIS Survey123](https://play.google.com/store/apps/details?id=com.esri.survey123&hl=en_US) by Esri is a popular GIS app. Unfortunately it does not allow Bluetooth connections to 3rd party RTK devices. To enable a connection to a SparkFun RTK device, a [mock location](connecting_bluetooth.md/#enable-mock-location) and an intermediary app such as [GNSS Master](gis_software_android.md/#gnss-master) or [Lefebure](gis_software_android.md/#lefebure) is needed. + +Once a [mock location](connecting_bluetooth.md/#enable-mock-location) provider is setup, open Survey123. + +![Survey123 Splash]() + +For the purposes of this demonstration, click *Continue without signing in*. + +![Main window]() + +Select the satellite icon in the upper right corner. + +![Location status showing RTK Fix]() + +If the mock location provider app is running, you should see the Lat/Lon/Alt from the RTK device. In the above image, RTK Fix is achieved with 0.033ft (10mm) accuracy. Click on the map icon. + +![Survey123 Map]() + +The location of the receiver is shown on a map. With GNSS Master or Lefebure providing the mock location to the phone, Survey123 will have a very precise GNSS location and data collection can begin. + +## Diamond Maps + +[Diamond Maps](https://diamondmaps.com/) is a great solution for utilities and municipalities. $20/month GIS software with many great features. Get the Android app [here](https://play.google.com/store/apps/details?id=com.diamondmaps.OfflineApp&hl=en_US). + +Be sure your device is [paired over Bluetooth](connecting_bluetooth.md#android). + +![Home Screen]() + +From the Home Screen, click on the 'hamburger' settings button in the top left corner. + +![Settings Menu]() + +Select **GPS Status**. + +![Click GPS Source]() + +Click on the **Select a GPS Source** box and select the RTK device that was previously paired with. + +![GPS details]() + +Once a receiver is selected, its status will be shown in the GPS Setup window. Additionally, an NTRIP Client is available for corrections. + +**NTRIP Client** + +If you’re using a serial radio to connect a Base to a Rover for your correction data, or if you're using the RTK Facet L-Band with built-in corrections, you can skip this part. + +![NTRIP Settings]() + +From this window, an NTRIP Client can be configured. Enter your NTRIP Caster information then click on **START**. Click *Close* to exit out to the main window. + +![RTK Fix at SparkFun]() + +*0.03ft accuracy shown in green* + +Closing the GPS Source window will show the map as well as the relative accuracy in feet. ## Field Genius @@ -74,6 +175,78 @@ Select 'Done' then from the main menu select 'Survey' to begin using the device. Now you can begin using the SparkFun RTK device with Field Genius. +## GNSS Master + +[GNSS Master](https://play.google.com/store/apps/details?id=com.gnssmaster&hl=en_US) is a great utility when a given GIS app does not have an NTRIP Client or a way to connect over Bluetooth. GNSS Master connects to a RTK device over Bluetooth (or Bluetooth BLE) as well as any correction source (NTRIP, PointPerfect, even USB Serial), and then acts as the phone's location using [Mock Location](connecting_bluetooth.md/#enable-mock-location). + +**Note:** Most GIS apps will not need GNSS Master or Mock Location enabled and this section can be skipped. + +Read how to [Enable Mock Location](connecting_bluetooth.md/#enable-mock-location). + +![GNSS Master main menu]() + +From the GNSS Master main screen, select **GNSS Receiver Connection**. + +![GNSS Receiver Selection]() + +Pick the RTK device to connect to from the list, then click *Connect*. The **Data Rate** should increase indicating data flowing from the RTK device to the GNSS Master app. Click the back button to return to the main screen. + +![Correction Input]() + +Select **Correction Input** to setup an NTRIP Client. + +![Corrections List]() + +This is one of the powerful features of GNSS Master - multiple connections can be entered. This is helpful if you regularly switch between locations or NTRIP Casters and your GIS software only allows entry of a single NTRIP source. GNSS Master supports corrections from NTRIP Casters but also PointPerfect and a direct serial connection to a GNSS receiver. This can be really helpful in advanced setups. + +![NTRIP Client information]() + +Enter your NTRIP Client information then click **SAVE**. + +![Data from Caster]() + +Once connected the *Data Rate* should increase above 0 bytes per second. Return to the home screen by hitting the back button. + +![Enable Mock Location]() + +Enable mock location. If GNSS Master throws an error, re-enable GNSS Master as your [Mock Location provider](connecting_bluetooth.md/#enable-mock-location) in Developer Options. + +Once enabled, any GIS app that selects 'Internal' or 'Phone Location' as its source will instead be fed the high precision NMEA being generated by the RTK device connected over Bluetooth. + +## Lefebure + +[Lefebure NTRIP Client](https://play.google.com/store/apps/details?id=com.lefebure.ntripclient&hl=en_US) is the *original* app for getting correction from an NTRIP caster and down over Bluetooth. It's an oldie but a goodie. + +**Note:** Most GIS apps will not need Lefebure or Mock Location enabled and this section can be skipped. + +The problem is that if Lefebure is connected to the RTK device providing RTCM corrections over Bluetooth, then other GIS applications cannot use the same Bluetooth connection at the same time. That's where mock locations save the day. Lefebure can be setup to take over or 'mock' the GPS location being reported by the phone. Nearly all GIS apps can use the phone's GPS location. So if the phone's location is magically super precise, then Lefebure can be the NTRIP Client and data provide, and your GIS app is none the wiser, and uses the phone's location. + +Read how to [Enable Mock Location](connecting_bluetooth.md/#enable-mock-location). + +![LEfebure settings]() + +Once mock locations are enabled, click on the *Settings* gear in the top left corner. + +![NTRIP Settings]() + +If needed, an NTRIP Client can be setup to provide corrections over Bluetooth to the RTK device. + +![NTRIP Client Settings]() + +Enter the Caster information and hit the back button. + +![Receive Settings]() + +Select *Receiver Settings*. + +![Bluetooth and Mock location enable]() + +Select the RTK device that has been paired over Bluetooth. Also enable Mock Locations. Hit the back button to return to the main screen. + +![alt text]() + +Press the **Connect** button. The app will connect to the NTRIP Caster. Now, any GIS app that selects 'Internal' or 'Phone Location' as its source will instead be fed the high precision NMEA being generated by the RTK device connected over Bluetooth. + ## QField ![Opening page of QField](img/QField/SparkFun%20RTK%20QField%20-%20Open%20Project.png) @@ -213,6 +386,56 @@ Known Issues: To verify the NMEA sentences are being delivered correctly, Survey Master has a built-in tool. Select the Device->Rover->More->'H-Terminal'. +## SurPad + +[SurPad](https://surpadapp.com/) is an Android app available as a free trial for 30-days. It's loaded as an APK (rather than through Google Play). + +Be sure your RTK device has been [paired over Bluetooth](connecting_bluetooth.md#android) to your phone. + +![SurPad Home Screen]() + +*SurPad Home Screen* + +Create a project and get to the home screen. Shown above, click on the GNSS receiver icon. + +![SurPad connecting over Bluetooth]() + +*SurPad connecting over Bluetooth* + +Set the **Device manufacturer** to *Other*, **Device type** to *RTK(NMEA0183)*, and **Communication Mode** to *Bluetooth*. Select the SparkFun RTK device that you would like to connect to on the **Paired Devices** list and then click *Connect*. + +Once connected to the device a *Debug* button will appear. This is one of the nice features of SurPad: Running debug will allow you to inspect the NMEA coming across the link. + +Once done, press the back arrow (top left corner) to return to the home screen. + +![SurPad Point Survey map]() + +*SurPad Point Survey map* + +Above: From the home screen press the **Survey** button at the bottom, then **Point Survey** to bring up the map. + +In the top left corner, press the green hamburger + cell phone icon. This will open the NTRIP settings. + +![SurPad Data Link NTRIP Configuration]() + +*SurPad Data Link NTRIP Configuration* + +Change the **Connect Mode** from *TCP Client* to *NTRIP*. If you are unable to edit or change the **Connect Mode** from TCP Client be sure the TCP Client is stopped by pressing the *Stop* button in the lower left corner (located in the same spot as the highlighted *Start*). + +![SurPad NTRIP Connection]() + +*SurPad NTRIP Connection* + +Enter the information for your NTRIP caster. In the above example, we are connected to the SparkFun base station on RTK2Go. For RTK2Go you will need to enter a valid email address for a user name but a password is not required. + +Click on *Start* and you should see the 'Receive data' progress bar (highlighted above) increase each second indicating a connection. Once complete, press 'Apply' to return to the map. + +![SurPad with RTK Fix]() + +*SurPad with RTK Fix* + +Above: After a few moments, the RTK device should move to RTK Float, then RTK Fix. You can see the age of the RTCM data in the upper bar, along with the horizontal (23mm) and vertical (31mm) accuracy estimates. Now you can begin taking points. + ## SurvPC Be sure your device is [paired over Bluetooth](connecting_bluetooth.md#windows). @@ -337,8 +560,6 @@ Enter your NTRIP Caster credentials and click connect. You will see bytes begin Once you have a full RTK fix you'll notice the location bubble in SW Maps turns green. Just for fun, rock your rover monopole back and forth on a fixed point. You'll see your location accurately reflected in SW Maps. Millimeter location precision is a truly staggering thing. - - ## Vespucci [Vespucci](https://play.google.com/store/apps/details?id=de.blau.android&hl=en_US&gl=US) is an Open Street Map editor for Android. diff --git a/docs/gis_software_ios.md b/docs/gis_software_ios.md index b5c721ed9..4c41a186e 100644 --- a/docs/gis_software_ios.md +++ b/docs/gis_software_ios.md @@ -1,11 +1,81 @@ # iOS -Torch: ![Feature Supported](img/Icons/GreenDot.png) +Surveyor: ![Feature Supported](img/Icons/GreenDot.png) / Express: ![Feature Supported](img/Icons/GreenDot.png) / Express Plus: ![Feature Supported](img/Icons/GreenDot.png) / Facet: ![Feature Supported](img/Icons/GreenDot.png) / Facet L-Band: ![Feature Supported](img/Icons/GreenDot.png) / Reference Station: ![Feature Supported](img/Icons/GreenDot.png) -There are a variety of 3rd party apps available for GIS and surveying. We will cover a few examples below that should give you an idea of how to get the incoming NMEA data into the software of your choice. +There are a variety of 3rd party apps available for GIS and surveying for [Android](gis_software_android.md), [iOS](gis_software_ios.md), and [Windows](gis_software_windows.md). We will cover a few examples below that should give you an idea of how to get the incoming NMEA data into the software of your choice. The software options for Apple iOS are much more limited because Apple products do not support Bluetooth SPP. That's ok! The SparkFun RTK products support additional connection options including TCP and Bluetooth Low Energy (BLE). +## ArcGIS Field Maps + +For reasons unknown, Esri removed TCP support from Field Maps for iOS and is therefore not usable by SparkFun RTK devices at this time. + +If you must use iOS, checkout [SW Maps](gis_software_ios.md/#sw-maps), [ArcGIS QuickCapture](gis_software_ios.md/#arcgis-quickcapture), or [ArcGIS Survey123](gis_software_ios.md/#arcgis-survey123). + +[Field Maps for Android](gis_software_android.md/#arcgis-field-maps) is supported. +## ArcGIS QuickCapture + +![ArcGIS QuickCapture splash screen]() + +[ArcGIS QuickCapture](https://apps.apple.com/us/app/arcgis-quickcapture/id1451433781) is a popular offering from Esri that works well with SparkFun RTK products. + +ArcGIS QuickCapture connects to the RTK device over TCP. In other words, the RTK device needs to be connected to the same WiFi network as the device running QuickCapture. Generally, this is an iPhone or iPad operating as a hotspot. + +**Note:** The iOS hotspot defaults to 5.5GHz. This must be changed to 2.4GHz. Please see [Hotspot Settings](gis_software_ios.md/#hotspot-settings). + +![WiFi network setup via Web Config]() + +![Adding WiFi network to settings]() + +The RTK device must use WiFi to connect to the iPhone or iPad. In the above image, the device will attempt to connect to *iPhone* (a cell phone hotspot) when WiFi is needed. + +![PVT Server Enabled on port 2948]() + + +Next, the RTK device must be configured as a *PVT Server*. The default port of 2948 works well. See [TCP/UDP Menu](menu_tcp_udp.md) for more information. + +![RTK device showing IP address]() + +Once the RTK device connects to the WiFi hotspot, its IP address can be found in the [System Menu](menu_system.md). This is the number that needs to be entered into QuickCapture. You can now proceed to the QuickCapture app to set up the software connection. + +![Main screen]() + +From the main screen, press the hamburger icon in the top left corner. + +![Settings button]() + +Press the **Settings** button. + +![Location Provider button]() + +Select the **Location Provider** option. + +Select **Via Network**. + +![TCP Network Information]() + +Enter the IP address and port previously obtained from the RTK device and click **ADD**. + +![List of providers showing TCP connection]() + +That provider should now be shown connected. + +![Browse project button]() + +From the main screen, click on the plus in the lower left corner and then **BROWSE PROJECTS**. + +![List of projects]() + +For this example, add the BioBlitz project. + +![GPS Accuracy and map in BioBlitz project]() + +Above, we can see the GPS accuracy is better than 1ft. Click on the map icon in the top right corner. + +![QuickCapture map]() + +From the map view, we can see our location with very high accuracy. We can now begin gathering point information with millimeter accuracy. + ## ArcGIS Survey123 ![ArcGIS Survey123 Home Screen]() diff --git a/docs/img/DiamondMaps/SparkFun RTK Diamond Maps - GNSS Source Selected.png b/docs/img/DiamondMaps/SparkFun RTK Diamond Maps - GNSS Source Selected.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d15f2b65fc544e8c32f99d0a0cd9fdca4b8cf5 GIT binary patch literal 67197 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