Desktop GIS for visualizing, analyzing, and managing captured GPS data. QGIS is the current primary tool; ArcGIS Pro integration is planned.
Version: QGIS 4.0.2 (Final) on macOS
Project file: ~/Sync/farm/emlid-exports/brownsville-property.qgz
Primary data source: PostGIS on CT100 (farmdb). QGIS connects directly via the PostGIS connector โ host 192.168.8.100, port 5432, database farmdb, user farmuser, SSL disabled. All points and geometries live there; GIS state stays single-source-of-truth instead of drifting between a GeoPackage copy and the DB.
GeoPackage (
brownsville-points.gpkg) is retired as the primary format (May 2026). It still exists as a backup snapshot of points but isn’t kept in sync โ for live data use the PostGIS connection. ArcGIS Pro instructions further down still cover the GPKG path for portability.
The QGIS project is generated by a Python script (brownsville-property.py or setup-project.py for the console version) and includes:
- ESRI World Imagery satellite basemap
- All GPS points from
all-points.csv, loaded as a delimited text layer (EPSG:4326) - Categorized symbology by feature code:
| Code | Symbol | Color | Label |
|---|---|---|---|
p |
Circle | Green (#22c55e) | Plant |
i |
Square | Gray (#94a3b8) | Infrastructure |
u |
Diamond | Orange (#f97316) | Underground |
n |
Triangle | Blue (#3b82f6) | Note |
- White labels with black buffer showing feature names
- Zoomed to point extent with ~100m padding
Regenerating the project:
From the QGIS Python Console (Plugins โ Python Console โ Show Editor):
exec(open(os.path.expanduser('~/Sync/farm/emlid-exports/setup-project.py')).read())
Or standalone from Terminal:
/Applications/QGIS-final-4_0_2.app/Contents/MacOS/bin/python3 \
~/Sync/farm/emlid-exports/brownsville-property.py
Adding new sessions: After running the processing pipeline, update all-points.csv with the new session data, then reload the layer in QGIS (right-click layer โ Reload). The symbology and labels persist.
ArcGIS Pro can work with the same data sources. The key consideration is coordinate system alignment and data format.
Importing GPS Data
From CSV (all-points.csv):
- Open ArcGIS Pro โ Insert โ New Map
- Map tab โ Add Data โ XY Table to Point
- Browse to
~/Sync/farm/emlid-exports/processed/all-points.csv - Set X Field =
lon, Y Field =lat, Z Field =elev_m - Coordinate System = GCS_WGS_1984 (EPSG:4326)
- Click Run
From GeoPackage:
- Catalog pane โ right-click Databases โ Add Database
- Browse to
brownsville-points.gpkg - Drag the points layer onto the map
Coordinate System Notes
- Emlid data is in WGS84 geographic (lat/lon, EPSG:4326). ArcGIS Pro will project on-the-fly for display.
- For measurement accuracy, project to Ohio State Plane South (EPSG:3735, US feet) or UTM Zone 17N (EPSG:32617, meters).
- Heights are ellipsoidal, not orthometric. Apply GEOID18 via the Transformation tool if you need MSL elevations.
- To convert: Geoprocessing โ Project โ set output coordinate system and check “Geographic Transformations” to include the geoid.
Symbology
To replicate the QGIS categorized symbology:
- Right-click the points layer โ Symbology
- Change from Single Symbol to Unique Values
- Field =
code - Add values:
p(green circle),i(gray square),u(orange diamond),n(blue triangle) - Apply
Labeling
- Right-click layer โ Label Properties
- Label Field =
feature_name - Set halo (white text, 1.5pt black buffer) for readability over satellite imagery
Basemap
ArcGIS Pro includes built-in satellite imagery:
- Map tab โ Basemap โ Imagery (or Imagery Hybrid for labels)
- This is higher resolution than the ESRI XYZ tile service used in QGIS
Future: ArcGIS Field Maps
ArcGIS Field Maps on iOS cannot directly connect to the RS3 (not MFi-certified). Two potential workarounds:
- Bluetooth GPS forwarding โ third-party apps that relay NMEA from the RS3 to the iOS location stack (unreliable, not recommended)
- Post-process in ArcGIS Pro โ continue using Emlid Flow for field capture, import to ArcGIS Pro for analysis. This is the recommended approach.
- Android tablet โ Field Maps on Android can connect to the RS3 via mock location. QField is another option.
Future pipeline: all-points.csv โ PostGIS on CT100 farmdb โ queryable via Farm MCP tools, QGIS, and ArcGIS Pro.
Planned tables:
gis_pointsโ all raw GPS captures with geometryplantingsโ plants with species FK, planting date, zoneinfrastructureโ above-ground featuresundergroundโ buried utilities (critical for future excavation)
Planned Farm MCP spatial tools:
nearest_features(lat, lon, radius_m)โ find what’s nearbyquery_in_radius(lat, lon, radius_m, code)โ filter by feature typeunderground_near(lat, lon, radius_m)โ specifically for avoiding buried lines