<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mobile App Workflows Archives - Soarvo</title>
	<atom:link href="https://soarvo.com/article-categories/mobile-app-workflows/feed/" rel="self" type="application/rss+xml" />
	<link>https://soarvo.com/article-categories/mobile-app-workflows/</link>
	<description>Liberate your geospatial data</description>
	<lastBuildDate>Wed, 22 Apr 2026 11:49:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://soarvo.com/wp-content/uploads/2024/07/soarvo-logo_favicon-150x150.png</url>
	<title>Mobile App Workflows Archives - Soarvo</title>
	<link>https://soarvo.com/article-categories/mobile-app-workflows/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Position Averaging for Feature Geometry</title>
		<link>https://soarvo.com/knowledge-base/position-averaging-for-feature-geometry/</link>
		
		<dc:creator><![CDATA[Richard Gauchwin]]></dc:creator>
		<pubDate>Wed, 07 Jan 2026 11:17:59 +0000</pubDate>
				<guid isPermaLink="false">https://soarvo.com/?post_type=ht_kb&#038;p=7271</guid>

					<description><![CDATA[<p>Position Averaging for Feature Geometry Prerequisites: Basic knowledge of how to use the Soarvo mobile application. Basic knowledge of how to use the Soarvo web portal. App Version:0.0.42+ When this feature is enabled and when the geometry of a point feature is updated to the current users position (or the current users device position is [&#8230;]</p>
<p>The post <a href="https://soarvo.com/knowledge-base/position-averaging-for-feature-geometry/">Position Averaging for Feature Geometry</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Position Averaging for Feature Geometry</h2>



<p><em>Prerequisites</em>: <br>Basic knowledge of how to use the Soarvo mobile application. <br>Basic knowledge of how to use the Soarvo web portal.</p>



<p><strong><em>App Version:</em><br>0.0.42+</strong></p>



<p>When this feature is enabled and when the geometry of a point feature is updated to the current users position (or the current users device position is used as nodes for linear or area geometry) an average of the users position is taken over a configurable amount of time. That is then used instead of just the current users position. <strong>This feature is enabled on a per feature type basis</strong>.</p>



<p>To enable this functionality <strong>you should have two numerical attributes in a feature type with the name &#8216;_POSITION_AVERAGING_TIME_FRAME&#8217; and &#8216;_POSITION_AVERAGING_MAX_ACC&#8217;</strong>. _POSITION_AVERAGING_TIME_FRAME controls how the time period that the average occurs over (in seconds). _POSITION_AVERAGING_MAX_ACC controls the minimum horizontal accuracy (in meters) that qualifies a users position to be used in the averaging calculation.</p>



<p>_POSITION_AVERAGING_MAX_ACC  is an optional attribute, if it is not present in the feature type then the maximum accuracy for a position to be used in the average calculation is 9999m.<br><br>For example if _POSITION_AVERAGING_TIME_FRAME is set to 30 and _POSITION_AVERAGING_MAX_ACC is set to 5 then the averaging occurs over 30 seconds and will only use user positions where the accuracy is 5m or below. </p>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="827" height="950" src="https://soarvo.com/wp-content/uploads/2025/05/image-1.png" alt="" class="wp-image-6821" style="width:438px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2025/05/image-1.png 827w, https://soarvo.com/wp-content/uploads/2025/05/image-1-261x300.png 261w, https://soarvo.com/wp-content/uploads/2025/05/image-1-768x882.png 768w, https://soarvo.com/wp-content/uploads/2025/05/image-1-44x50.png 44w" sizes="(max-width: 827px) 100vw, 827px" /></figure>



<p>Once the attributes have been added to the required feature type you will need to sync down the updated feature types on the Soarvo mobile application. You can do this either via &#8216;pull to refresh&#8217; in the feature list for a given location, or via &#8216;pull to refresh&#8217; in the feature type list which appears when you tap the green &#8216;add new feature&#8217; floating action button. The below video shows how it functions on the Soarvo mobile application for a point feature &#8211; it also demonstrates how the position averaging only happens when the users position is used, it does not affect tapping on the map to manually change the features geometry.</p>



<figure clas="wp-block-video"><video height="750" controls src="https://soarvo.com/wp-contenploads/2025/05/positionaveraging-1.mp4"></video></figure>



<h3 class="wp-block-heading">Example Video</h3>



<p></p>



<p></p>
<p>The post <a href="https://soarvo.com/knowledge-base/position-averaging-for-feature-geometry/">Position Averaging for Feature Geometry</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Manhole + Pipe Snapping</title>
		<link>https://soarvo.com/knowledge-base/manhole-pipe-snapping/</link>
		
		<dc:creator><![CDATA[Richard Gauchwin]]></dc:creator>
		<pubDate>Wed, 07 Jan 2026 11:32:25 +0000</pubDate>
				<guid isPermaLink="false">https://soarvo.com/?post_type=ht_kb&#038;p=7275</guid>

					<description><![CDATA[<p>Manhole + Pipe Snapping Prerequisites: Basic knowledge of how to use the Soarvo mobile application. Basic knowledge of how to use the Soarvo web portal and setup feature types.Knowledge of how to apply codes (previously called default codes in K-Capture) to attributes following the &#8216;App Codes for Attribute Settings Document&#8217; below. App Version:0.0.98+ App Codes [&#8230;]</p>
<p>The post <a href="https://soarvo.com/knowledge-base/manhole-pipe-snapping/">Manhole + Pipe Snapping</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Manhole + Pipe Snapping </h2>



<p><em>Prerequisites</em>: <br>Basic knowledge of how to use the Soarvo mobile application. <br>Basic knowledge of how to use the Soarvo web portal and setup feature types.<br>Knowledge of how to apply codes (previously called default codes in K-Capture) to attributes following the &#8216;App Codes for Attribute Settings Document&#8217; below.</p>



<p><strong><em>App Version:</em><br>0.0.98+</strong><br><br><em>App Codes for Attribute Settings Document:</em><br><a href="https://github.com/KorecGroup/soarvo-mobile-flutter-public-docs/blob/0.0.98/default-codes-doc.md">https://github.com/KorecGroup/soarvo-mobile-flutter-public-docs/blob/0.0.98/default-codes-doc.md</a></p>



<p>Manhole + pipe snapping refers to the functionality, previously available in K-Capture, for a linear feature (ie a pipe) to snap its start and end nodes to point features (ie manholes), and pull attribute values from the snapped point features into the linear feature for calculations &#8211; and more. When you also change the geometry or update one of the snapped point features, it should recalculate the attributes of the snapped linear feature and update its geometry to the new snapped point feature position.</p>



<p>The feature types for both the linear and point features requires a specific setup to activate this.</p>



<h3 class="wp-block-heading">Point Feature Type Setup</h3>



<p>If you want to activate the functionality which recalculates the snapped linear features geometry and attributes when you create / edit a given feature of this feature type then you <strong>need to add an attribute to the point feature type with a name of <code>_recalc_snaps</code></strong><code> </code>like in the below screenshot. You can hide this attribute from the feature type form via the attribute setting value of <strong>!MODIFIER-HIDE</strong>.</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="852" height="982" src="https://soarvo.com/wp-content/uploads/2025/05/image-2.png" alt="" class="wp-image-7068" style="width:448px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2025/05/image-2.png 852w, https://soarvo.com/wp-content/uploads/2025/05/image-2-260x300.png 260w, https://soarvo.com/wp-content/uploads/2025/05/image-2-768x885.png 768w, https://soarvo.com/wp-content/uploads/2025/05/image-2-43x50.png 43w" sizes="(max-width: 852px) 100vw, 852px" /></figure>



<h3 class="wp-block-heading">Linear Feature Type Setup</h3>



<p>You can use the <strong>!SNAPPEDSTART(AttributeNameHere)</strong> and <strong>!SNAPPEDEND(AttributeNameHere)</strong> to pull out attribute values from the point features which are snapped to the respective start and end of the linear feature. Where &#8216;AttributeNameHere&#8217; is the name of the attribute from the point feature. For example, if you wanted to pull out the value of the &#8216;COVER_LEV&#8217; attribute from the manhole point features you would create attributes in the linear pipe feature type as below.</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="846" height="968" src="https://soarvo.com/wp-content/uploads/2025/05/image-3.png" alt="" class="wp-image-7069" style="width:474px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2025/05/image-3.png 846w, https://soarvo.com/wp-content/uploads/2025/05/image-3-262x300.png 262w, https://soarvo.com/wp-content/uploads/2025/05/image-3-768x879.png 768w, https://soarvo.com/wp-content/uploads/2025/05/image-3-44x50.png 44w" sizes="(max-width: 846px) 100vw, 846px" /></figure>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="823" height="952" src="https://soarvo.com/wp-content/uploads/2025/05/image-4.png" alt="" class="wp-image-7070" style="width:477px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2025/05/image-4.png 823w, https://soarvo.com/wp-content/uploads/2025/05/image-4-259x300.png 259w, https://soarvo.com/wp-content/uploads/2025/05/image-4-768x888.png 768w, https://soarvo.com/wp-content/uploads/2025/05/image-4-43x50.png 43w" sizes="(max-width: 823px) 100vw, 823px" /></figure>



<p>You can then calculate the difference between these values using the !CALC syntax for the attribute settings in an other attribute in the pipe feature type like below. The attribute names &#8216;DownstreamCoverLevel&#8217; and &#8216;UpstreamCoverLevel&#8217; are prefixed with a $ character to make them reactive, meaning whenever the &#8216;DownstreamCoverLevel&#8217; or &#8216;UpstreamCoverLevel&#8217; attributes are changed then this calculation is reran.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="832" height="952" src="https://soarvo.com/wp-content/uploads/2025/05/image-5.png" alt="" class="wp-image-7071" style="width:483px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2025/05/image-5.png 832w, https://soarvo.com/wp-content/uploads/2025/05/image-5-262x300.png 262w, https://soarvo.com/wp-content/uploads/2025/05/image-5-768x879.png 768w, https://soarvo.com/wp-content/uploads/2025/05/image-5-44x50.png 44w" sizes="(max-width: 832px) 100vw, 832px" /></figure>



<h3 class="wp-block-heading">Example Video</h3>



<p>With the feature types setup you should be able to follow the video below, in this two point features already exist with a &#8216;COVER_LEV&#8217; attribute value. The video demonstrates creating a linear feature between them and then changing the position and COVER_LEV of one of the snapped point features.</p>



<figure class="wp-block-video"><video height="750" controls src="https://soarvo.com/wp-content/uploads/2025/11/snapping-demo.mp4"></video></figure>
<p>The post <a href="https://soarvo.com/knowledge-base/manhole-pipe-snapping/">Manhole + Pipe Snapping</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>RD8000+ Integration</title>
		<link>https://soarvo.com/knowledge-base/rd8000-integration/</link>
		
		<dc:creator><![CDATA[Richard Gauchwin]]></dc:creator>
		<pubDate>Wed, 07 Jan 2026 11:34:18 +0000</pubDate>
				<guid isPermaLink="false">https://soarvo.com/?post_type=ht_kb&#038;p=7272</guid>

					<description><![CDATA[<p>Prerequisites: Basic knowledge of how to use the Soarvo mobile application. Basic knowledge of how to use the Soarvo web portal and setup feature types.Basic knowledge of operating and setting up an RD8K unit. App Version:0.0.112+ This functionality is available on ANDROID ONLY. Soarvo Mobile has direct integration with Radio Detection&#8217;s RD8K Bluetooth units for [&#8230;]</p>
<p>The post <a href="https://soarvo.com/knowledge-base/rd8000-integration/">RD8000+ Integration</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-video"><video height="300" controls src="https://soarvo.com/wp-content/uploads/2025/12/bluetooth-gps-receiver-guide-editted.mp4"></video></figure>



<p><em>Prerequisites</em>: <br>Basic knowledge of how to use the Soarvo mobile application. <br>Basic knowledge of how to use the Soarvo web portal and setup feature types.<br>Basic knowledge of operating and setting up an RD8K unit.<br></p>



<p><strong><em>App Version:</em><br>0.0.112+</strong><br><br><strong>This functionality is available on ANDROID ONLY.</strong></p>



<p>Soarvo Mobile has direct integration with Radio Detection&#8217;s RD8K Bluetooth units for cable and pipe based measurements.</p>



<h3 class="wp-block-heading">Pairing the RD8K Unit to a Android Device</h3>



<p>You will need to first follow the manual for whichever RD8K unit you have for pairing to your Android device first. The videos below show how this is done for a RD8200 unit, but should be similar for RD8100 units also.</p>



<video height="450" controls src="https://soarvo.com/wp-content/uploads/2025/12/pairing-rd8k.mp4"></video>



<p>In summary, the important aspects for pairing the RD8K unit are:</p>



<ul class="wp-block-list">
<li>Ensure Bluetooth communication is enabled via setting the &#8216;COM&#8217; option to &#8216;on&#8217;</li>



<li>Ensure the protocol (PROT in the RD8K UI) is ASCII. Where this is done can change depending on the unit version. <strong>The ASCII protocol version should also be set to &#8216;2&#8217; if available</strong></li>



<li>If the &#8216;PHONE&#8217; option is available, ensure it is set to &#8216;ANRD&#8217;</li>



<li>Ensure the RD8K unit is paired to the android device via Bluetooth. The name of the bluetooth device is different depending on the unit and is separate from the RTK Locator built into some RD8K units. So consult the manual for your units Bluetooth name</li>
</ul>



<p>The video below shows how to change the &#8216;COM&#8217; option to &#8216;on&#8217;.</p>



<video height="450" controls src="https://soarvo.com/wp-content/uploads/2026/01/RD8K_COM-2.mp4"></video>



<p>If Bluetooth communication has been successfully enabled, you should see a Bluetooth icon on the RD8K units display, which is highlighted in the below screenshot.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="730" height="645" src="https://soarvo.com/wp-content/uploads/2026/01/image.png" alt="" class="wp-image-7425" style="width:393px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image.png 730w, https://soarvo.com/wp-content/uploads/2026/01/image-300x265.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-50x44.png 50w" sizes="(max-width: 730px) 100vw, 730px" /></figure>



<p>The video below shows how to change the &#8216;PROT&#8217; option, which should be set to ASCII, ASCII version to &#8216;2&#8217;.</p>



<video height="450" controls src="https://soarvo.com/wp-content/uploads/2026/01/RD8K_ASCII-2.mp4"></video>



<h3 class="wp-block-heading">Setting up Soarvo Mobile to Receive RD8K Readings</h3>



<p>Once the RD8K is paired and setup properly &#8211; you then need to configure Soarvo Mobile to receive readings from the unit. The below video shows how you can do this via the &#8216;External Devices&#8217; section in the GPS management page.</p>



<video height="450" controls src="https://soarvo.com/wp-content/uploads/2025/12/rd8k_get_measurement.mp4"></video>



<p>In summary, the important aspects of the above video are:</p>



<ul class="wp-block-list">
<li>The feature type selected in the &#8216;RD8K Feature Type&#8217; configuration field is the feature type that is used to auto start a feature when you&#8217;re in the location features overview page, and are not recording a feature. If no feature type is selected, then a feature type with a name of &#8216;RD8K&#8217; is attempted to be used.</li>



<li>Once the RD8K connection is enabled in the app, this connection is auto attempted on each boot up of the app. So you should not have to keep re-enabling it.</li>
</ul>



<h3 class="wp-block-heading">Recording RD8K Data in a Feature </h3>



<p>You can take and send a measurement from the RD8K unit by clicking the button highlighted by the green circle in the image below. The Bluetooth icon on the RD8K units display panel will begin flashing, if an error does occur this will be displayed on the bottom left of the units display panel with an error code &#8211; which can be checked against the manual.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="587" height="603" src="https://soarvo.com/wp-content/uploads/2025/05/image-8.png" alt="" class="wp-image-7156" style="aspect-ratio:0.9735020501741546;width:385px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2025/05/image-8.png 587w, https://soarvo.com/wp-content/uploads/2025/05/image-8-292x300.png 292w, https://soarvo.com/wp-content/uploads/2025/05/image-8-50x50.png 50w" sizes="(max-width: 587px) 100vw, 587px" /></figure>



<p>As you can see in the video in the above section, the full data string from the RD8K unit is auto added to the &#8216;FullData&#8217; attribute. This is useful to see the raw data from the unit. You can get this by adding an attribute with a default code of &#8216;!RD8K&#8217; to the feature type selected in the &#8216;RD8K Feature Type&#8217;, like in the below screenshot.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="853" height="797" src="https://soarvo.com/wp-content/uploads/2025/05/image-6.png" alt="" class="wp-image-7132" style="aspect-ratio:1.0702788578117814;width:489px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2025/05/image-6.png 853w, https://soarvo.com/wp-content/uploads/2025/05/image-6-300x280.png 300w, https://soarvo.com/wp-content/uploads/2025/05/image-6-768x718.png 768w, https://soarvo.com/wp-content/uploads/2025/05/image-6-50x47.png 50w" sizes="(max-width: 853px) 100vw, 853px" /></figure>



<p>To instead just use a single value from the RD8K measurement (such as the depth) data you will need to know its index in the data which is comma separated. Then you can setup an attribute with a default code of &#8216;!RD8K(n)&#8217; where n is the position of the value within the RD8K data (which is a 1 based index). For instance, if I want to pull out the 13th value from the data then I would setup an attribute like in the below screenshot.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="825" height="763" src="https://soarvo.com/wp-content/uploads/2025/05/image-7.png" alt="" class="wp-image-7133" style="aspect-ratio:1.081263726980909;width:488px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2025/05/image-7.png 825w, https://soarvo.com/wp-content/uploads/2025/05/image-7-300x277.png 300w, https://soarvo.com/wp-content/uploads/2025/05/image-7-768x710.png 768w, https://soarvo.com/wp-content/uploads/2025/05/image-7-50x46.png 50w" sizes="(max-width: 825px) 100vw, 825px" /></figure>



<h3 class="wp-block-heading">RD8K Positions as Line/Polygon Nodes</h3>



<p>If you&#8217;re recording a linear or area feature and record a measurement on the RD8K unit then your current position is added as a node to the linear or area feature. If the project contains a &#8216;RD8KNode&#8217; point feature type then a point feature for each node measurement is also created. You can also use !RD8K default codes within the RD8KNode feature types attributes.</p>



<h3 class="wp-block-heading">RD8K Bluetooth GPS Receiver as a Position Source</h3>



<p>Some RD8K units come with a Bluetooth GPS receiver which can receive RTK corrections. The Bluetooth GPS receiver is usually a separate Bluetooth device from the RD8K locator. You will need to pair this Bluetooth GPS receiver with your android device, the manual for your RD8K unit will contain instructions for this. </p>



<p>After pairing &#8211; you should be able to follow the &#8216;Bluetooth GPS Receiver as a Position Source&#8217; section in this page to then use this as a position source in Soarvo Mobile and send RTK corrections to the receiver (if required). </p>



<p><strong>Please ensure you only use RTCM 3.x enabled mountpoints if your RD8K unit is the RD8200SG unit and want to use RTK corrections.</strong></p>



<p>for the RD8200SG unit, there will be a flashing green light on the unit when the position is of RTK float quality. This changes to a solid green when the position is of RTK fixed quality.</p>
<p>The post <a href="https://soarvo.com/knowledge-base/rd8000-integration/">RD8000+ Integration</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mobile App Data Entry Shortcuts</title>
		<link>https://soarvo.com/knowledge-base/mobile-app-data-entry-shortcuts/</link>
		
		<dc:creator><![CDATA[Richard Gauchwin]]></dc:creator>
		<pubDate>Wed, 07 Jan 2026 11:43:44 +0000</pubDate>
				<guid isPermaLink="false">https://soarvo.com/?post_type=ht_kb&#038;p=7278</guid>

					<description><![CDATA[<p>Below is the data entry shortcuts documentation for version 0.0.180 of the Soarvo Mobile app. You can view the documentation for a specific version (either a previous one, or a version that might be in iOS TestFlight or the beta track in the Android Play Store) by using the link https://github.com/KorecGroup/soarvo-mobile-flutter-public-docs/blob/{VERSIONHERE}/default-codes-doc.md. Just replace {VERSIONHERE} with [&#8230;]</p>
<p>The post <a href="https://soarvo.com/knowledge-base/mobile-app-data-entry-shortcuts/">Mobile App Data Entry Shortcuts</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Below is the <strong>data entry shortcuts documentation for version 0.0.180 of the Soarvo Mobile app</strong>. You can view the documentation for a specific version (either a previous one, or a version that might be in iOS TestFlight or the beta track in the Android Play Store) by using the link <strong>https://github.com/KorecGroup/soarvo-mobile-flutter-public-docs/blob/{VERSIONHERE}/default-codes-doc.md</strong>. Just replace {VERSIONHERE} with the version of the app you want to check &#8211; e.g <a href="https://github.com/KorecGroup/soarvo-mobile-flutter-public-docs/blob/0.0.121/default-codes-doc.md">https://github.com/KorecGroup/soarvo-mobile-flutter-public-docs/blob/0.0.121/default-codes-doc.md</a></p>



<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang xml:lang>
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>input</title>
  <style>

code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}

ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
  <style type="text/css">.table-wrapper {width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }.table-wrapper table {width: 100%;border-collapse: collapse;font-size: .8rem;}.table-wrapper th,.table-wrapper td {text-align: left;white-space: wrap;}</style>
</head>
<body>
<h2 id="radio-group-option-with-default-codes">Radio Group Option with
Default Codes</h2>
<p>Radio group attributes can have default codes added as an option (you
can also add default codes as a nested option). The default codes are
processed when the attribute is opened and the processed value is added
to the list of values the user can select. Not all default codes are
supported in radio group options. The supported codes are:</p>
<ul>
<li>Feature Created Default Codes</li>
<li>Calculation Based Default Codes</li>
</ul>
<h2 id="radio-group-and-checkbox-group-default-codes">Radio Group and
Checkbox Group Default Codes</h2>
<p>For radio group and checkbox group attributes, you set the default
code of the attribute by prefixing the first value in its list of
options with &#39;DEFAULTCODE-&#39;, for example if the first option is
DEFAULTCODE-!MODIFIER-SHOWWHEN $CATCompetency == &#39;No&#39; then the default
code for that attribute would set to !MODIFIER-SHOWWHEN $CATCompetency
== &#39;No&#39;.</p>
<h2 id="feature-type-metadata-settings">Feature Type Metadata
Settings</h2>
<p>Feature Types can include <strong>metadata settings
attributes</strong> which act like <em>settings</em> for that Feature
Type and control specific pieces of functionality. These are typically
attributes whose names are prefixed with an underscore (e.g.
<code>_ON_SAVE_ACTIONS</code>).</p>
<p>This list is <strong>not comprehensive</strong>. The SOARVO
knowledgebase contains dedicated pages for some functionality (for
example, auto-recording linear/area nodes) which document the required
metadata settings attributes for those workflows. The table below is
only for metadata settings that don&#39;t require their own dedicated
page.</p>
<h2 id="feature-type-metadata-settings-1">Feature Type Metadata
Settings</h2>
<p>Feature Types can include <strong>metadata settings
attributes</strong> which act like <em>settings</em> for that Feature
Type and control specific pieces of functionality. These are typically
attributes whose names are prefixed with an underscore (e.g.
<code>_ON_SAVE_ACTIONS</code>).</p>
<p>This list is <strong>not comprehensive</strong>. The SOARVO
knowledgebase contains dedicated pages for some functionality (for
example, auto-recording linear/area nodes) which document the required
metadata settings attributes for those workflows. The table below is
only for metadata settings that don&#39;t require their own dedicated
page.</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Value</th>
<th>Description</th>
<th>Example value</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>_AUTO_ACCEPT</code></td>
<td>If present in the feature type (there is no actual value needed, the
attribute just needs to be in the feature type), the app will
automatically save the newly recorded feature after the attributes are
filled via default codes and all the attributes have a value. This is
only available for point features. Useful for rapid capture
workflows.</td>
<td>&#8220;</td>
</tr>
<tr>
<td><code>_ON_SAVE_ACTIONS</code></td>
<td>Comma-separated actions to run after a feature is saved (e.g. play a
success sound and/or vibrate). Often stored as a hidden ShortText
attribute.</td>
<td><code>!MODIFIER-HIDE;successJingle,vibrate</code></td>
</tr>
<tr>
<td><code>_COPY_PARENT_GEOM</code></td>
<td>If present in the feature type (there is no actual value needed, the
attribute just needs to be in the feature type), then if a newly created
feature has a parent and they are both points then the child will copy
the parent geometry.</td>
<td>&#8220;</td>
</tr>
</tbody>
</table>
</div>
<h2 id="feature-created-default-codes">Feature Created Default
Codes</h2>
<p>These default codes are calculated and set only when a feature is
created.</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Example</th>
<th>Tags</th>
</tr>
</thead>
<tbody>
<tr>
<td>!TS</td>
<td>Current timestamp, with date and time in the format dd-MMM-yyyy
HH:mm:ss (e.g. 01-Jan-2025 14:30:00)</td>
<td>!TS</td>
<td>date, time</td>
</tr>
<tr>
<td>!D</td>
<td>Current date, in the format dd-MMM-yyyy (e.g. 01-Jan-2025)</td>
<td>!D</td>
<td>date</td>
</tr>
<tr>
<td>!TIME</td>
<td>Current time, in the format HH:mm:ss (e.g. 14:30:00)</td>
<td>!TIME</td>
<td>time</td>
</tr>
<tr>
<td>!LAT</td>
<td>Latitude of the user position in degrees</td>
<td>!LAT</td>
<td>coordinates, latitude</td>
</tr>
<tr>
<td>!LNG</td>
<td>Latitude of the user position in degrees</td>
<td>!LNG</td>
<td>coordinates, longitude</td>
</tr>
<tr>
<td>!ALT</td>
<td>Altitude of the user position in meters</td>
<td>!ALT</td>
<td>coordinates, altitude</td>
</tr>
<tr>
<td>!X</td>
<td>X coordinate of the user position in the coordinate system defined
by the project the feature belongs to</td>
<td>!X</td>
<td>coordinates, easting</td>
</tr>
<tr>
<td>!Y</td>
<td>Y coordinate of the user position in the coordinate system defined
by the project the feature belongs to</td>
<td>!Y</td>
<td>coordinates, northing</td>
</tr>
<tr>
<td>!Z</td>
<td>Z coordinate of the user position in the coordinate system defined
by the project the feature belongs to</td>
<td>!Z</td>
<td>coordinates, elevation</td>
</tr>
<tr>
<td>!ACC</td>
<td>Accuracy of the user position in meters</td>
<td>!ACC</td>
<td>coordinates, accuracy</td>
</tr>
<tr>
<td>!SATS</td>
<td>Number of satellites used for the user position</td>
<td>!SATS</td>
<td>coordinates, satellites</td>
</tr>
<tr>
<td>!HDOP</td>
<td>Horizontal dilution of precision of the user position</td>
<td>!HDOP</td>
<td>coordinates, hdop</td>
</tr>
<tr>
<td>!USER</td>
<td>User name of the user creating the feature</td>
<td>!USER</td>
<td>user, name</td>
</tr>
<tr>
<td>!QA</td>
<td>Quality assurance status of the user position, it&#39;s the position
accuracy followed by the unit. E.g 1.3m</td>
<td>!QA</td>
<td>coordinates, qa</td>
</tr>
<tr>
<td>!AUTOINC</td>
<td>Increment the attribute value by the specified amount (or by 1 as a
default). The attribute must be a number.</td>
<td>!AUTOINC, !AUTOINC(5)</td>
<td>attributes, increment, number</td>
</tr>
<tr>
<td>!READGLOBALCACHE</td>
<td>Read a value from the global cache, the cache item is scoped to the
user.</td>
<td>!READGLOBALCACHE(key)</td>
<td>cache, global, read</td>
</tr>
<tr>
<td>!WRITEGLOBALCACHE</td>
<td>Writes the attributes current value to the global cache, the cache
item is scoped to the user.</td>
<td>!WRITEGLOBALCACHE(key, value)</td>
<td>cache, global, write</td>
</tr>
<tr>
<td>!READPROJECTCACHE</td>
<td>Read a value from the project scoped cache, the cache item is scoped
to the user and project.</td>
<td>!READPROJECTCACHE(key)</td>
<td>cache, project, read</td>
</tr>
<tr>
<td>!WRITEPROJECTCACHE</td>
<td>Writes the attributes current value to the project scoped cache, the
cache item is scoped to the user and project.</td>
<td>!WRITEPROJECTCACHE(key)</td>
<td>cache, project, write</td>
</tr>
<tr>
<td>!READLOCATIONCACHE</td>
<td>Read a value from the location scoped cache, the cache item is
scoped to the user and location.</td>
<td>!READLOCATIONCACHE(key)</td>
<td>cache, location, read</td>
</tr>
<tr>
<td>!RESTORE</td>
<td>Writes the attributes current value to the location scoped cache,
the cache item is scoped to the user and location. Is a shorthand for
!READLOCATIONCACHE where the key is the attribute id.</td>
<td>!RESTORE</td>
<td>restore, location, read</td>
</tr>
<tr>
<td>!WRITELOCATIONCACHE</td>
<td>Writes the attributes current value to the location scoped cache,
the cache item is scoped to the user and location.</td>
<td>!WRITELOCATIONCACHE(key)</td>
<td>cache, location, write</td>
</tr>
<tr>
<td>!FROMCSV</td>
<td>Processes the current attributes value as a CSV and parses out
values. The indexes for the value are 1 based.</td>
<td>!FROMCSV(1) !FROMCSV(1,3,4)</td>
<td>CSV</td>
</tr>
<tr>
<td>!RD8K</td>
<td>Process a recorded RD8K measurement. !RD8K will load the full
measurement NMEA string. !RD8K(n) will extract the nth value from the
measurements NMEA string. On saving the feature, the RD8K measurement
will be removed from the cache.</td>
<td>!RD8K, !RD8K(3)</td>
<td>RD8K, NMEA</td>
</tr>
<tr>
<td>!LOCATIONNAME</td>
<td>Name of the current location the feature is being created in</td>
<td>!LOCATIONNAME</td>
<td>location, name, location name</td>
</tr>
<tr>
<td>!PROJECTNAME</td>
<td>Name of the current project the feature is being created in</td>
<td>!PROJECTNAME</td>
<td>project, name, project name</td>
</tr>
</tbody>
</table>
</div>
<h2 id="feature-saved-default-codes">Feature Saved Default Codes</h2>
<p>These default codes are calculated and set only when a feature is
saved.</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Example</th>
<th>Tags</th>
</tr>
</thead>
<tbody>
<tr>
<td>!ONSAVEWRITEGLOBALCACHE</td>
<td>Writes the attributes current value to the global cache, the cache
item is scoped to the user.</td>
<td>!ONSAVEWRITEGLOBALCACHE(key, value)</td>
<td>cache, global, write</td>
</tr>
<tr>
<td>!ONSAVEWRITEPROJECTCACHE</td>
<td>Writes the attributes current value to the project scoped cache, the
cache item is scoped to the user and project.</td>
<td>!ONSAVEWRITEPROJECTCACHE(key)</td>
<td>cache, project, write</td>
</tr>
<tr>
<td>!ONSAVEWRITELOCATIONCACHE</td>
<td>Writes the attributes current value to the location scoped cache,
the cache item is scoped to the user and location.</td>
<td>!ONSAVEWRITELOCATIONCACHE(key)</td>
<td>cache, location, write</td>
</tr>
<tr>
<td>!STORE</td>
<td>Writes the attributes current value to the location scoped cache,
the cache item is scoped to the user and location. Shorthand for
!ONSAVEWRITELOCATIONCACHE, where the key is the attribute id.</td>
<td>!STORE</td>
<td>cache, store</td>
</tr>
<tr>
<td>!RD8K</td>
<td>Process a recorded RD8K measurement. !RD8K will load the full
measurement NMEA string. !RD8K(n) will extract the nth value from the
measurements NMEA string. On saving the feature, the RD8K measurement
will be removed from the cache.</td>
<td>!RD8K, !RD8K(3)</td>
<td>RD8K, NMEA</td>
</tr>
</tbody>
</table>
</div>
<h2 id="feature-opened-default-codes">Feature Opened Default Codes</h2>
<p>These default codes are calculated and set when a feature is opened
(so created/edited).</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Example</th>
<th>Tags</th>
</tr>
</thead>
<tbody>
<tr>
<td>!ONOPENTS</td>
<td>Current timestamp, with date and time in the format dd-MMM-yyyy
HH:mm:ss (e.g. 01-Jan-2025 14:30:00)</td>
<td>!TS</td>
<td>date, time</td>
</tr>
<tr>
<td>!ONOPEND</td>
<td>Current date, in the format dd-MMM-yyyy (e.g. 01-Jan-2025)</td>
<td>!D</td>
<td>date</td>
</tr>
<tr>
<td>!ONOPENTIME</td>
<td>Current time, in the format HH:mm:ss (e.g. 14:30:00)</td>
<td>!TIME</td>
<td>time</td>
</tr>
<tr>
<td>!ONOPENWRITEGLOBALCACHE</td>
<td>Writes the attributes current value to the global cache, the cache
item is scoped to the user.</td>
<td>!ONOPENWRITEGLOBALCACHE(key, value)</td>
<td>cache, global, write</td>
</tr>
<tr>
<td>!ONOPENWRITEPROJECTCACHE</td>
<td>Writes the attributes current value to the project scoped cache, the
cache item is scoped to the user and project.</td>
<td>!ONOPENWRITEPROJECTCACHE(key)</td>
<td>cache, project, write</td>
</tr>
<tr>
<td>!ONOPENWRITELOCATIONCACHE</td>
<td>Writes the attributes current value to the location scoped cache,
the cache item is scoped to the user and location.</td>
<td>!ONOPENWRITELOCATIONCACHE(key)</td>
<td>cache, location, write</td>
</tr>
<tr>
<td>!ONOPENGETLOCATIONNAME</td>
<td>Gets the name of the location the feature is in.</td>
<td>!ONOPENGETLOCATIONNAME</td>
<td>location, name, location name</td>
</tr>
<tr>
<td>!ONOPENGETPROJECTNAME</td>
<td>Gets the name of the current project the feature is in.</td>
<td>!ONOPENGETPROJECTNAME</td>
<td>project, name, project name</td>
</tr>
<tr>
<td>!CHNATTRIBUTE</td>
<td>Gets the value of an attribute from the alignment feature, the
parameter is the name of the attribute to get (e.g.
!CHNATTRIBUTE(Units)).</td>
<td>!CHNATTRIBUTE(AlignmentAttributeName)</td>
<td>chainage, alignment, attribute, field, attribute</td>
</tr>
<tr>
<td>!PARENTID</td>
<td>The ID of the parent feature, if the feature is a child feature</td>
<td>!PARENTID</td>
<td>feature, parent, id, child, child form</td>
</tr>
<tr>
<td>!INSPECTEDDISTANCE</td>
<td>Calculates the 2D distance from the user&#39;s current position to the
child feature&#39;s parent feature (if it exists).</td>
<td>!INSPECTEDDISTANCE</td>
<td>child, distance, inspection</td>
</tr>
</tbody>
</table>
</div>
<h2 id="geometry-based-default-codes">Geometry Based Default Codes</h2>
<p>These default codes are calculated and set when the geometry of a
feature is changed.</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Example</th>
<th>Tags</th>
</tr>
</thead>
<tbody>
<tr>
<td>!LEN</td>
<td>2D length of the geometry in meters</td>
<td>!LEN</td>
<td>geometry, length</td>
</tr>
<tr>
<td>!LEN3D</td>
<td>3D length of the geometry in meters</td>
<td>!LEN3D</td>
<td>geometry, length</td>
</tr>
<tr>
<td>!AREA</td>
<td>2D area of the geometry in square meters</td>
<td>!AREA</td>
<td>geometry, area</td>
</tr>
<tr>
<td>!FEATUREX</td>
<td>X coordinate of the geometry in the coordinate system defined by the
project the feature belongs to. Only available for point
geometries.</td>
<td>!FEATUREX</td>
<td>geometry, coordinates, point, easting</td>
</tr>
<tr>
<td>!FEATUREY</td>
<td>Y coordinate of the geometry in the coordinate system defined by the
project the feature belongs to. Only available for point
geometries.</td>
<td>!FEATUREY</td>
<td>geometry, coordinates, point, northing</td>
</tr>
<tr>
<td>!FEATUREZ</td>
<td>Z coordinate of the geometry in the coordinate system defined by the
project the feature belongs to. Only available for point
geometries.</td>
<td>!FEATUREZ</td>
<td>geometry, coordinates, point, elevation</td>
</tr>
<tr>
<td>!FEATURELAT</td>
<td>Latitude of the feature geometry. Only available for point
geometries.</td>
<td>!FEATURELAT</td>
<td>geometry, coordinates, point, latitude</td>
</tr>
<tr>
<td>!FEATURELNG</td>
<td>Longitude of the feature geometry. Only available for point
geometries.</td>
<td>!FEATURELNG</td>
<td>geometry, coordinates, point, longitude</td>
</tr>
<tr>
<td>!FEATUREALT</td>
<td>Altitude of the feature geometry. Only available for point
geometries.</td>
<td>!FEATUREALT</td>
<td>geometry, coordinates, point, altitude</td>
</tr>
<tr>
<td>!SNAPPEDSTART</td>
<td>Gets the attribute value from a point feature snapped to the start
of a linestring. Parameter 1 is the attribute name to get the value
from. The example would get the CONVER_LEV attribute from the point
feature snapped to the start of the linestring.</td>
<td>!SNAPPEDSTART(COVER_LEV)</td>
<td>pipe, snapping, start</td>
</tr>
<tr>
<td>!SNAPPEDEND</td>
<td>Gets the attribute value from a point feature snapped to the end of
a linestring. Parameter 1 is the attribute name to get the value from.
The example would get the CONVER_LEV attribute from the point feature
snapped to the end of the linestring.</td>
<td>!SNAPPEDEND(COVER_LEV)</td>
<td>pipe, snapping, end</td>
</tr>
<tr>
<td>!CHN</td>
<td>Chainage along the map alignment for the feature geometry. Only
available for point geometries.</td>
<td>!CHN</td>
<td>chainage, chain</td>
</tr>
<tr>
<td>!CHNOFFSET</td>
<td>Offset from the map alignment for the feature geometry. Only
available for point geometries.</td>
<td>!CHNOFFSET</td>
<td>chainage, offset</td>
</tr>
<tr>
<td>!CHNMIN</td>
<td>Minimum chainage along the map alignment for the feature geometry.
Available for point and linear geometries.</td>
<td>!CHNMIN</td>
<td>chainage, min</td>
</tr>
<tr>
<td>!CHNMAX</td>
<td>Maximum chainage along the map alignment for the feature geometry.
Available for point and linear geometries.</td>
<td>!CHNMAX</td>
<td>chainage, max</td>
</tr>
</tbody>
</table>
</div>
<h2 id="calculation-based-default-codes">Calculation Based Default
Codes</h2>
<p>These default codes are for calculation based fields, They run when
they are autonavigated over and when the form is opened.</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Example</th>
<th>Tags</th>
</tr>
</thead>
<tbody>
<tr>
<td>!CALC</td>
<td>Perform a calculation using the given expression. The expression can
include mathematical operations and field names. You can make the
calculation react to attribute updates by prefixing the attribute name
with $</td>
<td>!CALC 2 + 2, !CALC field1 * field2, !CALC field1 + 5, !CALC $field1
+ $field2</td>
<td>calculation, math, expression</td>
</tr>
<tr>
<td>!CALCW3WNOW</td>
<td>Get the users current position&#39;s What3Words address. This calc code
does not run when the feature type is opened &#8211; only when the attribute
is selected/autoselected.</td>
<td>!CALCW3WNOW</td>
<td>calculation, w3w, what3words, location</td>
</tr>
<tr>
<td>!CALCRPR</td>
<td>Calculates the RPR (Root Protection Radius), typically of a tree,
based on the number of stems and stem diameters provided. You must have
a &#39;StemCnt&#39; attribute indicating the number of stems, and &#39;StemDia1&#39;,
&#39;StemDia2&#39;, etc. attributes for each stem diameter in millimeters. The
calculated RPR is capped at a maximum of 15 meters. The average IR
(Instantaneous Radius) is also calculated and cached for use in other
features via the location cache.</td>
<td>!CALCRPR</td>
<td></td>
</tr>
</tbody>
</table>
</div>
<h2 id="modifier-default-codes">Modifier Default Codes</h2>
<p>These default codes modify properties of an attribute (mandatory,
hidden, read only etc) depending on a condition.</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Example</th>
<th>Tags</th>
</tr>
</thead>
<tbody>
<tr>
<td>!MODIFIER-FORCEPHOTOCAPTURE</td>
<td>Modifies a FileUpload attribute to be mandatory and visible if the
expression evaluates to true, otherwise it is hidden and not mandatory.
The example below makes the attribute mandatory and visible if the value
of the attribute with the code &#39;condition_field&#39; is &#39;needs_repair&#39;. The
dollar sign makes this reactive, so it will reevaluate when the value of
&#39;condition_field&#39; changes. The expression must evaluate to a boolean
value.</td>
<td>!MODIFIER-FORCEPHOTOCAPTURE $condition_field == &#39;needs_repair&#39;</td>
<td>modifier, photo, nested photo</td>
</tr>
<tr>
<td>!MODIFIER-SHOWWHEN</td>
<td>Modifies an attribute to be visible if the expression evaluates to
true, otherwise it is hidden. The example below makes the attribute
visible if the value of the attribute with the name &#39;status&#39; is set to
&#39;active&#39;. The dollar sign makes this reactive, so it will reevaluate
when the value of &#39;status&#39; changes. The expression must evaluate to a
boolean value. If the attribute is being hidden and it has a value, the
value will be removed.</td>
<td>!MODIFIER-SHOWWHEN $status == &#39;active&#39;</td>
<td>modifier, hidden</td>
</tr>
<tr>
<td>!MODIFIER-HIDEWHEN</td>
<td>Modifies an attribute to be hidden if the expression evaluates to
true, otherwise it is visible. The example below makes the attribute
hidden if the value of the attribute with the name &#39;status&#39; is set to
&#39;inactive&#39;. The dollar sign makes this reactive, so it will reevaluate
when the value of &#39;status&#39; changes. The expression must evaluate to a
boolean value. If the attribute is being hidden and it has a value, the
value will be removed.</td>
<td>!MODIFIER-HIDEWHEN $status == &#39;inactive&#39;</td>
<td>modifier, hidden</td>
</tr>
<tr>
<td>!MODIFIER-HIDE</td>
<td>Modifies an attribute to be hidden.</td>
<td>!MODIFIER-HIDE</td>
<td>modifier, hidden</td>
</tr>
<tr>
<td>!MODIFIER-READONLY</td>
<td>Modifies an attribute to be read only.</td>
<td>!MODIFIER-READ_ONLY</td>
<td>modifier, read-only</td>
</tr>
<tr>
<td>!MODIFIER-SHOWTHUMBNAIL</td>
<td>Modifies a FileUpload (if it&#39;s a sketch or photo) attribute to use a
thumbnail in the feature type attribute list.</td>
<td>!MODIFIER-THUMBNAIL</td>
<td>modifier, thumbnail, photo</td>
</tr>
</tbody>
</table>
</div>
<h2 id="sketch-attribute-default-codes">Sketch Attribute Default
Codes</h2>
<p>These default codes are used specifically with sketch attributes
(FileUpload attributes with a Drawing attribute setting) to load images
into the sketch canvas. The PNG images must be uploaded to a location
with the format like &#39;filename.png.system&#39;. But can then be accessed
across a project.</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Example</th>
<th>Tags</th>
</tr>
</thead>
<tbody>
<tr>
<td>!LOADIMAGE(filename)</td>
<td>Loads a specific image file directly into the sketch canvas, assumes
the extension is .png</td>
<td>!LOADIMAGE(photoname)</td>
<td>sketch, image, load</td>
</tr>
<tr>
<td>!LOADIMAGE([attributename])</td>
<td>Loads an image linked to an attribute value, where the attribute
name in square brackets is replaced with the actual attribute value.
Assumes the extension is .png</td>
<td>!LOADIMAGE([inspection_id])</td>
<td>sketch, image, load, dynamic</td>
</tr>
</tbody>
</table>
</div>
<h2 id="calc-expressions">!CALC Expressions</h2>
<p>!CALC uses Excel-like expressions to generate values from attributes
and functions. You can reference attributes by name, and make
expressions reactive by prefixing with a dollar sign (e.g. $field1).
It&#39;s impossible to list all the different things you can do with !CALC
expressions, if a !CALC expression fails to evaluate then an error
should be present in the logs. Here are some examples of different
things you can do with !CALC expressions:</p>
<h3 id="examples">Examples</h3>
<ul>
<li><code>!CALC $Field1 + 10</code></li>
<li><code>!CALC ($length * $width) / 2</code></li>
<li><code>!CALC $status == &#39;active&#39; ? &#39;Yes&#39; : &#39;No&#39;</code></li>
</ul>
<h3 id="utility-functions">Utility Functions</h3>
<p>Utility functions are helpers you can call inside expressions to
transform or combine values.</p>
<ul>
<li><strong>join(parts, separator)</strong> — Join a list into a string.
<ul>
<li>Example: <code>!CALC join([Field1, Field2], &#39;-&#39;)</code></li>
</ul></li>
<li><strong>number(value)</strong> — Parse a value to a number (returns
0 on failure).
<ul>
<li>Example: <code>!CALC number($Field1) + 10</code></li>
</ul></li>
<li><strong>numberOrNull(value)</strong> — Parse a value to a number
(returns null on failure).
<ul>
<li>Example: <code>!CALC numberOrNull($Field2)</code></li>
</ul></li>
</ul>
<h3 id="expressions-in-modifier-default-codes">Expressions in Modifier
Default Codes</h3>
<p>Modifier default codes use the same expression parser, so you can
write boolean expressions there too.</p>
<p>Examples:</p>
<ul>
<li><code>!MODIFIER-SHOWWHEN $status == &#39;active&#39;</code></li>
<li><code>!MODIFIER-HIDEWHEN number($riskScore) &gt; 10</code></li>
</ul>
</body>
</html>




<p></p>
<p>The post <a href="https://soarvo.com/knowledge-base/mobile-app-data-entry-shortcuts/">Mobile App Data Entry Shortcuts</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Secondary Features &#8211; Grid Generation</title>
		<link>https://soarvo.com/knowledge-base/secondary-features/</link>
		
		<dc:creator><![CDATA[Callum Houghton]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 16:07:00 +0000</pubDate>
				<guid isPermaLink="false">https://soarvo.com/?post_type=ht_kb&#038;p=7471</guid>

					<description><![CDATA[<p>Prerequisites:Basic knowledge of how to use the Soarvo mobile application. Basic knowledge of how to use the Soarvo web portal and setup feature types. App Version:0.0.121+ Secondary features are automatically created and linked to a parent feature. They are recreated when the parent is edited and are deleted if the parent is also deleted. You [&#8230;]</p>
<p>The post <a href="https://soarvo.com/knowledge-base/secondary-features/">Secondary Features &#8211; Grid Generation</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>Prerequisites</em>:<br>Basic knowledge of how to use the Soarvo mobile application. <br>Basic knowledge of how to use the Soarvo web portal and setup feature types.</p>



<p><strong><em>App Version:</em><br>0.0.121+</strong></p>



<p>Secondary features are automatically created and linked to a parent feature. They are recreated when the parent is edited and are deleted if the parent is also deleted.</p>



<p>You can create a secondary &#8216;GridLines&#8217; linear feature which is a secondary feature with x amount of columns and rows, variable spacing, and different baselines. Optionally, you can also create &#8216;GridLineIntersections&#8217; secondary point features, at the intersection of the GridLines secondary feature geometry &#8211; and &#8216;GridLineCentres&#8217; secondary point features at the centre of the squares of the GridLines linear feature, which is used for annotating the squares.<br><br>&#8216;GridLineCentres&#8217; and &#8216;GridLineIntersections&#8217; are optional, if you do not create these feature types then they won&#8217;t be generated &#8211; but the &#8216;GridLines&#8217; secondary feature will and must be created.</p>



<h2 class="wp-block-heading">Grid Generation &#8211; Parent Secondary Feature Type Setup</h2>



<p><strong>You must setup a parent feature type for all of the GridLines based secondary features. The parent should have a linear geometry type.</strong> This parent linear feature type must have the following setup on it:<br><br>A short text attribute of name &#8216;_secondary_feature&#8217; with a default value of &#8216;GridLines&#8217; like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="805" height="603" src="https://soarvo.com/wp-content/uploads/2026/01/image-1.png" alt="" class="wp-image-7475" style="aspect-ratio:1.3350020859407592;width:403px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-1.png 805w, https://soarvo.com/wp-content/uploads/2026/01/image-1-300x225.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-1-768x575.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-1-50x37.png 50w" sizes="(max-width: 805px) 100vw, 805px" /></figure>



<p>A numerical attribute named &#8216;Rows&#8217;, a numerical attribute named &#8216;Cols&#8217;, and a numerical attribute named &#8216;Spacing&#8217;. It also needs a radio group attribute with the options &#8216;Centred&#8217;, &#8216;Left&#8217;, &#8216;Base&#8217; for the baseline, as shown below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="757" height="725" src="https://soarvo.com/wp-content/uploads/2026/01/image-2.png" alt="" class="wp-image-7476" style="aspect-ratio:1.0441511940169212;width:398px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-2.png 757w, https://soarvo.com/wp-content/uploads/2026/01/image-2-300x287.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-2-50x48.png 50w" sizes="(max-width: 757px) 100vw, 757px" /></figure>



<p>At the end, your parent secondary feature, which when a feature of this type is created will create all of the GridLines based features, should look like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="792" height="772" src="https://soarvo.com/wp-content/uploads/2026/01/image-3.png" alt="" class="wp-image-7477" style="aspect-ratio:1.0259299146715268;width:413px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-3.png 792w, https://soarvo.com/wp-content/uploads/2026/01/image-3-300x292.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-3-768x749.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-3-50x50.png 50w" sizes="(max-width: 792px) 100vw, 792px" /></figure>



<h2 class="wp-block-heading">Grid Generation &#8211; &#8216;GridLines&#8217; Feature Type Setup</h2>



<p><strong>You must setup a linear feature type of the name &#8216;GridLines&#8217; in a given project</strong>. That should be all the setup that is required, you can optionally style this feature type how you wish.</p>



<h2 class="wp-block-heading">Grid Generation &#8211; &#8216;GridLinesIntersections&#8217; Feature Type Setup (OPTIONAL)</h2>



<p><strong>You must setup a point feature type of the name &#8216;GridLineIntersections&#8217; in a given project</strong>. That should be all the setup that is required, you can optionally style this feature type how you wish.</p>



<h2 class="wp-block-heading">Grid Generation &#8216;GridLinesCentres&#8217; Feature Type Setup (OPTIONAL)</h2>



<p><strong>You must setup a point feature type of the name &#8216;GridLinesCentres&#8217; in a given project</strong>. You then must create a short text attribute of the name &#8216;SQUARE_LABEL&#8217;, so your feature type should look like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="798" height="557" src="https://soarvo.com/wp-content/uploads/2026/01/image-4.png" alt="" class="wp-image-7478" style="width:451px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-4.png 798w, https://soarvo.com/wp-content/uploads/2026/01/image-4-300x209.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-4-768x536.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-4-50x35.png 50w" sizes="(max-width: 798px) 100vw, 798px" /></figure>



<p>If you want labels to appear (e.g &#8216;A1, A2, A3&#8217; etc) you need to enable annotation for the &#8216;GridLineCentres&#8217; feature type. You can do this by clicking the top right &#8216;feature type style&#8217; button and then the bottom left &#8216;feature type annotation&#8217; button to bring up the feature type annotation setup. As shown below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="805" height="557" src="https://soarvo.com/wp-content/uploads/2026/01/image-5.png" alt="" class="wp-image-7480" style="aspect-ratio:1.4452661886749845;width:444px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-5.png 805w, https://soarvo.com/wp-content/uploads/2026/01/image-5-300x208.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-5-768x531.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-5-50x35.png 50w" sizes="(max-width: 805px) 100vw, 805px" /></figure>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="780" height="546" src="https://soarvo.com/wp-content/uploads/2026/01/image-7.png" alt="" class="wp-image-7482" style="width:443px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-7.png 780w, https://soarvo.com/wp-content/uploads/2026/01/image-7-300x210.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-7-768x538.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-7-50x35.png 50w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<p>Then, ensure the &#8216;Attribute&#8217; textbox is filled with &#8216;SQUARE_LABEL&#8217;. The other options you can choose whatever you wish. A good starting point is shown below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="747" height="962" src="https://soarvo.com/wp-content/uploads/2026/01/image-8.png" alt="" class="wp-image-7483" style="width:466px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-8.png 747w, https://soarvo.com/wp-content/uploads/2026/01/image-8-233x300.png 233w, https://soarvo.com/wp-content/uploads/2026/01/image-8-39x50.png 39w" sizes="(max-width: 747px) 100vw, 747px" /></figure>



<p>If you want to make the point icons themselves smaller, you can do this clicking the &#8216;feature type icon &#8216; button &#8211; which is highlighted below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="800" height="551" src="https://soarvo.com/wp-content/uploads/2026/01/image-10.png" alt="" class="wp-image-7485" style="width:472px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-10.png 800w, https://soarvo.com/wp-content/uploads/2026/01/image-10-300x207.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-10-768x529.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-10-50x34.png 50w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p>Ensure that &#8216;Simplified icon&#8217; is ticked, and then choose the largest or smallest circle styling option, like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="775" height="328" src="https://soarvo.com/wp-content/uploads/2026/01/image-11.png" alt="" class="wp-image-7486" style="width:573px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-11.png 775w, https://soarvo.com/wp-content/uploads/2026/01/image-11-300x127.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-11-768x325.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-11-50x21.png 50w" sizes="(max-width: 775px) 100vw, 775px" /></figure>



<h2 class="wp-block-heading">Grid Generation &#8211; Mobile Demo</h2>



<p>With all of the above setup done you should now be able to follow along with the video below, which shows the grid generation secondary feature workflow on the Soarvo Mobile app. In the video, the &#8216;GridLinesOrigin&#8217; is the parent feature type which all of the grid based secondary features and linked to a feature of that type. So when you delete the &#8216;GridLinesOrigin&#8217; feature then the grid based secondary features are deleted also.</p>



<video height="700" controls src="https://soarvo.com/wp-content/uploads/2026/01/gridlines.mp4"></video>
<p>The post <a href="https://soarvo.com/knowledge-base/secondary-features/">Secondary Features &#8211; Grid Generation</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Secondary Features &#8211; Parallel Lines</title>
		<link>https://soarvo.com/knowledge-base/secondary-features-parallel-lines/</link>
		
		<dc:creator><![CDATA[Callum Houghton]]></dc:creator>
		<pubDate>Wed, 28 Jan 2026 13:29:46 +0000</pubDate>
				<guid isPermaLink="false">https://soarvo.com/?post_type=ht_kb&#038;p=7506</guid>

					<description><![CDATA[<p>Prerequisites:Basic knowledge of how to use the Soarvo mobile application. Basic knowledge of how to use the Soarvo web portal and setup feature types. App Version:0.0.126+ Secondary features are automatically created and linked to a parent feature. They are recreated when the parent is edited and are deleted if the parent is also deleted. You [&#8230;]</p>
<p>The post <a href="https://soarvo.com/knowledge-base/secondary-features-parallel-lines/">Secondary Features &#8211; Parallel Lines</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>Prerequisites</em>:<br>Basic knowledge of how to use the Soarvo mobile application. <br>Basic knowledge of how to use the Soarvo web portal and setup feature types.</p>



<p><strong><em>App Version:</em><br>0.0.126+</strong></p>



<p>Secondary features are automatically created and linked to a parent feature. They are recreated when the parent is edited and are deleted if the parent is also deleted.</p>



<p>You can create n number of parallel line linear secondary features at an x offset from a parent linear feature. This is useful for automatically recording a set of cables that run parallel to each other.</p>



<h2 class="wp-block-heading">Parallel Lines Generation &#8211; Parent Secondary Feature Type Setup</h2>



<p><strong>You must setup a parent feature type for all of the parallel line based secondary features. The parent should have a linear geometry type.</strong> This parent linear feature type must have the following setup on it:</p>



<p>A short text attribute of name &#8216;_secondary_feature&#8217; with a default value of &#8216;ParallelLines&#8217; like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="782" height="577" src="https://soarvo.com/wp-content/uploads/2026/01/image-12.png" alt="" class="wp-image-7509" style="width:407px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-12.png 782w, https://soarvo.com/wp-content/uploads/2026/01/image-12-300x221.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-12-768x567.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-12-50x37.png 50w" sizes="(max-width: 782px) 100vw, 782px" /></figure>



<p>A short text attribute of name &#8216;_parallel_line_feature_type_name&#8217; with a <strong>default value that is the name of the feature type of the parallel lines you want to create</strong>. In the below screenshot the feature type of the parallel lines is &#8216;ParallelLine&#8217;:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="792" height="591" src="https://soarvo.com/wp-content/uploads/2026/01/image-13.png" alt="" class="wp-image-7510" style="width:420px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-13.png 792w, https://soarvo.com/wp-content/uploads/2026/01/image-13-300x224.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-13-768x573.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-13-50x37.png 50w" sizes="(max-width: 792px) 100vw, 792px" /></figure>



<p>A numerical attribute of name &#8216;ParallelLineSpacing&#8217; and a numerical attribute of name &#8216;NumOfParallelLines&#8217;.</p>



<p>A radio attribute of name &#8216;CapturedLineSide&#8217; with values &#8216;Left&#8217;, &#8216;Right, and &#8216;Middle&#8217;. Like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="782" height="800" src="https://soarvo.com/wp-content/uploads/2026/01/image-14.png" alt="" class="wp-image-7511" style="width:426px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-14.png 782w, https://soarvo.com/wp-content/uploads/2026/01/image-14-293x300.png 293w, https://soarvo.com/wp-content/uploads/2026/01/image-14-768x786.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-14-50x50.png 50w" sizes="(max-width: 782px) 100vw, 782px" /></figure>



<p>For the &#8216;CapturedLineSide&#8217; the values are summarised below.<br><br>&#8216;Left&#8217; means the parent feature is the left most linear geometry, so all child parallel lines generated are on the right of the parents geometry. As shown in the below screenshot:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="461" height="1024" src="https://soarvo.com/wp-content/uploads/2026/01/image-19-461x1024.png" alt="" class="wp-image-7517" style="aspect-ratio:0.4502020521178055;width:351px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-19-461x1024.png 461w, https://soarvo.com/wp-content/uploads/2026/01/image-19-135x300.png 135w, https://soarvo.com/wp-content/uploads/2026/01/image-19-768x1707.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-19-23x50.png 23w, https://soarvo.com/wp-content/uploads/2026/01/image-19-691x1536.png 691w, https://soarvo.com/wp-content/uploads/2026/01/image-19-922x2048.png 922w, https://soarvo.com/wp-content/uploads/2026/01/image-19.png 1080w" sizes="(max-width: 461px) 100vw, 461px" /></figure>



<p>&#8216;Right&#8217; means the parent feature is the right most linear geometry, so all child parallel lines are on the left of the parents geometry. As shown in the below screenshot:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="360" height="800" src="https://soarvo.com/wp-content/uploads/2026/01/image-18.png" alt="" class="wp-image-7516" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-18.png 360w, https://soarvo.com/wp-content/uploads/2026/01/image-18-135x300.png 135w, https://soarvo.com/wp-content/uploads/2026/01/image-18-23x50.png 23w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<p>Middle means the parent feature is the middle geometry, and will alternate the behaviour from &#8216;Left&#8217; to &#8216;Right&#8217; to &#8216;Left&#8217; to &#8216;Right&#8217; etc. As shown in the below screen:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="461" height="1024" src="https://soarvo.com/wp-content/uploads/2026/01/image-20-461x1024.png" alt="" class="wp-image-7518" style="aspect-ratio:0.4502045341591161;width:368px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-20-461x1024.png 461w, https://soarvo.com/wp-content/uploads/2026/01/image-20-135x300.png 135w, https://soarvo.com/wp-content/uploads/2026/01/image-20-768x1707.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-20-23x50.png 23w, https://soarvo.com/wp-content/uploads/2026/01/image-20-691x1536.png 691w, https://soarvo.com/wp-content/uploads/2026/01/image-20-922x2048.png 922w, https://soarvo.com/wp-content/uploads/2026/01/image-20.png 1080w" sizes="(max-width: 461px) 100vw, 461px" /></figure>



<p>At the end, your parent secondary feature, which when a feature of this type is created will create the parallel line features, should look like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="787" height="842" src="https://soarvo.com/wp-content/uploads/2026/01/image-15.png" alt="" class="wp-image-7512" style="width:435px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-15.png 787w, https://soarvo.com/wp-content/uploads/2026/01/image-15-280x300.png 280w, https://soarvo.com/wp-content/uploads/2026/01/image-15-768x822.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-15-47x50.png 47w" sizes="(max-width: 787px) 100vw, 787px" /></figure>



<p>The &#8216;CustomText&#8217; attribute is not required for the feature type setup &#8211; it is used later on in this documentation to show how you can copy over attribute values from the parent to its child parallel lines.</p>



<h2 class="wp-block-heading">Parallel Lines Generation &#8211; Child Parallel Lines Feature Type Setup</h2>



<p>The feature type name of the child parallel line feature type needs to be the same value as specified in the parents &#8216;_parallel_line_feature_type_name&#8217; attribute and must be linear geometry. </p>



<p>You can automatically have the parallel line features copy over values from its parent. <strong>If an attribute in the parallel lines child feature type has the same name as an attribute in the parent, then the value is copied to the child.</strong> So for example, if you wanted to copy the &#8216;CustomText&#8217; short text value from the parent to the child parallel line features then you would create a short text attribute with the name &#8216;CustomText&#8217; in the child feature type, like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="787" height="605" src="https://soarvo.com/wp-content/uploads/2026/01/image-16.png" alt="" class="wp-image-7513" style="aspect-ratio:1.3008902077151336;width:451px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/01/image-16.png 787w, https://soarvo.com/wp-content/uploads/2026/01/image-16-300x231.png 300w, https://soarvo.com/wp-content/uploads/2026/01/image-16-768x590.png 768w, https://soarvo.com/wp-content/uploads/2026/01/image-16-50x38.png 50w" sizes="(max-width: 787px) 100vw, 787px" /></figure>



<h2 class="wp-block-heading">Parallel Lines &#8211; Mobile Demo</h2>



<p>With all of the above setup done you should now be able to follow along with the video below, which shows the parallel line secondary feature workflow on the Soarvo Mobile app. In the video, the &#8216;ParallelLinesParent&#8217; is the parent feature type which has secondary features with parallel linear geometry. So when you delete the &#8216;ParallelLinesParent&#8217; feature then the &#8216;ParallelLine&#8217; secondary features are deleted also.</p>



<video height="700" controls src="https://soarvo.com/wp-content/uploads/2026/01/parallellines.mp4"></video>



<p></p>
<p>The post <a href="https://soarvo.com/knowledge-base/secondary-features-parallel-lines/">Secondary Features &#8211; Parallel Lines</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Secondary Features &#8211; Tree Inspections</title>
		<link>https://soarvo.com/knowledge-base/secondary-features-tree-inspections/</link>
		
		<dc:creator><![CDATA[Callum Houghton]]></dc:creator>
		<pubDate>Tue, 03 Feb 2026 10:53:20 +0000</pubDate>
				<guid isPermaLink="false">https://soarvo.com/?post_type=ht_kb&#038;p=7531</guid>

					<description><![CDATA[<p>Prerequisites:Basic knowledge of how to use the Soarvo mobile application. Basic knowledge of how to use the Soarvo web portal and setup feature types. App Version:0.0.130+ Secondary features are automatically created and linked to a parent feature. They are recreated when the parent is edited and are deleted if the parent is also deleted. You [&#8230;]</p>
<p>The post <a href="https://soarvo.com/knowledge-base/secondary-features-tree-inspections/">Secondary Features &#8211; Tree Inspections</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>Prerequisites</em>:<br>Basic knowledge of how to use the Soarvo mobile application. <br>Basic knowledge of how to use the Soarvo web portal and setup feature types.</p>



<p><strong><em>App Version:</em><br>0.0.130+</strong></p>



<p>Secondary features are automatically created and linked to a parent feature. They are recreated when the parent is edited and are deleted if the parent is also deleted.<br><br>You can create tree root protection zones and crown spreads as secondary features from a parent tree point, or hedge edge extents and centrelines from a parent hedge line. This is useful for automatically recording arboricultural survey data including the Root Protection Radius (RPR) (or alternatively known as Root Protection Area (RPA))  calculated from stem diameters, crown spreads (even or uneven), and hedge extents with configurable widths and surveyed sides.</p>



<h2 class="wp-block-heading">Tree Inspection &#8211; Parent Secondary Feature Type Setup</h2>



<p>You must setup a parent feature type for all tree inspection based secondary features.<strong> The parent should have a point geometry type for individual trees</strong>. This parent point feature type must have the following setup:</p>



<h3 class="wp-block-heading">Required Attributes</h3>



<ol class="wp-block-list">
<li>Secondary Feature Identifier<br>A short text attribute of name _secondary_feature with a default value of TreeInspection. Note, in the screenshots the default values are prefixed with !MODIFIER-HIDE;. This tells the app to hide this attribute from the UI and the semi-colon is a separator to chain &#8216;default values&#8217; together:</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="790" height="595" src="https://soarvo.com/wp-content/uploads/2026/02/image.png" alt="" class="wp-image-7537" style="width:470px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image.png 790w, https://soarvo.com/wp-content/uploads/2026/02/image-300x226.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-768x578.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-50x38.png 50w" sizes="(max-width: 790px) 100vw, 790px" /></figure>



<ol start="2" class="wp-block-list">
<li>Root Feature Type Name<br>A short text attribute of name _root_feature_type_name with a modifier default code of !MODIFIER-HIDE;TreeInspTestRoot (replace TreeInspTestRoot with your actual root feature type name):</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="791" height="586" src="https://soarvo.com/wp-content/uploads/2026/02/image-1.png" alt="" class="wp-image-7538" style="width:468px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-1.png 791w, https://soarvo.com/wp-content/uploads/2026/02/image-1-300x222.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-1-768x569.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-1-50x37.png 50w" sizes="(max-width: 791px) 100vw, 791px" /></figure>



<ol start="3" class="wp-block-list">
<li>Crown Feature Type Name<br>A short text attribute of name _crown_feature_type_name with a modifier default code of !MODIFIER-HIDE;TreeInspTestCrown (replace TreeInspTestCrown with your actual crown feature type name):</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="788" height="582" src="https://soarvo.com/wp-content/uploads/2026/02/image-2.png" alt="" class="wp-image-7539" style="width:475px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-2.png 788w, https://soarvo.com/wp-content/uploads/2026/02/image-2-300x222.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-2-768x567.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-2-50x37.png 50w" sizes="(max-width: 788px) 100vw, 788px" /></figure>



<ol start="4" class="wp-block-list">
<li>Stem Count<br>A numerical attribute named StemCnt (no decimals allowed) to record the number of tree stems:</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="765" height="772" src="https://soarvo.com/wp-content/uploads/2026/02/image-3.png" alt="" class="wp-image-7540" style="width:474px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-3.png 765w, https://soarvo.com/wp-content/uploads/2026/02/image-3-297x300.png 297w, https://soarvo.com/wp-content/uploads/2026/02/image-3-150x150.png 150w, https://soarvo.com/wp-content/uploads/2026/02/image-3-50x50.png 50w" sizes="(max-width: 765px) 100vw, 765px" /></figure>



<ol start="5" class="wp-block-list">
<li>Stem Diameters<br>Numerical attributes (with decimals allowed) for each stem diameter in millimeters:<br><br>StemDia1 with modifier code: <br>!MODIFIER-SHOWWHEN $StemCnt != null &amp;&amp; $StemCnt>0<br><br>StemDia2 with modifier code: <br>!MODIFIER-SHOWWHEN $StemCnt != null &amp;&amp; $StemCnt>1<br><br>StemDia3 with modifier code: <br>!MODIFIER-SHOWWHEN $StemCnt != null &amp;&amp; $StemCnt>2<br><br>StemDia4 with modifier code: <br>!MODIFIER-SHOWWHEN $StemCnt != null &amp;&amp; $StemCnt>3<br><br>StemDia5 with modifier code: <br>!MODIFIER-SHOWWHEN $StemCnt != null &amp;&amp; $StemCnt>4<br><br>StemDia6 with modifier code: <br>!MODIFIER-SHOWWHEN $StemCnt != null &amp;&amp; $StemCnt>5<br><br>These attributes will only show when the stem count is greater than the corresponding number. The screenshot below shows the &#8216;SteamDia1&#8217; attribute.</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="765" height="766" src="https://soarvo.com/wp-content/uploads/2026/02/image-4.png" alt="" class="wp-image-7541" style="aspect-ratio:0.9987214372356817;width:498px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-4.png 765w, https://soarvo.com/wp-content/uploads/2026/02/image-4-300x300.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-4-150x150.png 150w, https://soarvo.com/wp-content/uploads/2026/02/image-4-50x50.png 50w" sizes="(max-width: 765px) 100vw, 765px" /></figure>



<ol start="6" class="wp-block-list">
<li>Root Protection Radius (RPR)<br>A numerical attribute (with decimals allowed) named RootRadius with a default value of !CALCRPR:</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="762" height="741" src="https://soarvo.com/wp-content/uploads/2026/02/image-5.png" alt="" class="wp-image-7542" style="width:495px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-5.png 762w, https://soarvo.com/wp-content/uploads/2026/02/image-5-300x292.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-5-50x50.png 50w" sizes="(max-width: 762px) 100vw, 762px" /></figure>



<p>The !CALCRPR calculation automatically computes the Root Protection Radius, in metres, based on the number of stems and their diameters:</p>



<p><strong>For single stem trees</strong>: Uses StemDia1 * 12<br><strong>For 2-5 stems</strong>: Calculates based on the square root of the sum of squared diameters * 12<br><strong>For 6+ stems</strong>: Uses StemDia1 and StemCnt to calculate an average<br>T<strong>he result is capped at a maximum of 15 metres</strong></p>



<ol start="7" class="wp-block-list">
<li>Crown Spread Type<br>A radio group attribute named CrownSprd with two options:<br><br>even<br>uneven</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="762" height="792" src="https://soarvo.com/wp-content/uploads/2026/02/image-7.png" alt="" class="wp-image-7544" style="aspect-ratio:0.9621401570223902;width:497px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-7.png 762w, https://soarvo.com/wp-content/uploads/2026/02/image-7-289x300.png 289w, https://soarvo.com/wp-content/uploads/2026/02/image-7-48x50.png 48w" sizes="(max-width: 762px) 100vw, 762px" /></figure>



<ol start="8" class="wp-block-list">
<li>Uneven Spread Measurements<br>Numerical attributes (with decimals allowed) for directional crown spread measurements in metres, each with the modifier code<strong> !MODIFIER-SHOWWHEN $CrownSprd==&#8217;uneven&#8217;</strong>. The attribute names for these are:<br><br>NorthSprd<br>EastSprd<br>SouthSprd<br>WestSprd</li>
</ol>



<p>These attributes will only show when &#8220;uneven&#8221; is selected for CrownSprd. The screenshot below shows the &#8216;NorthSprd&#8217; attribute:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="760" height="761" src="https://soarvo.com/wp-content/uploads/2026/02/image-8.png" alt="" class="wp-image-7545" style="aspect-ratio:0.9987235128925198;width:494px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-8.png 760w, https://soarvo.com/wp-content/uploads/2026/02/image-8-300x300.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-8-150x150.png 150w, https://soarvo.com/wp-content/uploads/2026/02/image-8-50x50.png 50w" sizes="(max-width: 760px) 100vw, 760px" /></figure>



<ol start="9" class="wp-block-list">
<li>Even Spread Measurement<br>A numerical attribute (with decimals allowed) named EvenSprd with the modifier code <strong>!MODIFIER-SHOWWHEN $CrownSprd==&#8217;even&#8217;</strong></li>
</ol>



<p>This attribute will only show when &#8220;even&#8221; is selected for CrownSprd.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="767" height="770" src="https://soarvo.com/wp-content/uploads/2026/02/image-9.png" alt="" class="wp-image-7546" style="aspect-ratio:0.996116388839099;width:505px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-9.png 767w, https://soarvo.com/wp-content/uploads/2026/02/image-9-300x300.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-9-150x150.png 150w, https://soarvo.com/wp-content/uploads/2026/02/image-9-50x50.png 50w" sizes="(max-width: 767px) 100vw, 767px" /></figure>



<p>At the end, your parent tree inspection feature type should look like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="790" height="901" src="https://soarvo.com/wp-content/uploads/2026/02/image-10.png" alt="" class="wp-image-7547" style="aspect-ratio:0.8768449068473264;width:495px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-10.png 790w, https://soarvo.com/wp-content/uploads/2026/02/image-10-263x300.png 263w, https://soarvo.com/wp-content/uploads/2026/02/image-10-768x876.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-10-44x50.png 44w" sizes="(max-width: 790px) 100vw, 790px" /></figure>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="757" height="875" src="https://soarvo.com/wp-content/uploads/2026/02/image-11.png" alt="" class="wp-image-7548" style="aspect-ratio:0.8651754565975784;width:495px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-11.png 757w, https://soarvo.com/wp-content/uploads/2026/02/image-11-260x300.png 260w, https://soarvo.com/wp-content/uploads/2026/02/image-11-43x50.png 43w" sizes="(max-width: 757px) 100vw, 757px" /></figure>



<h2 class="wp-block-heading">Tree Inspection &#8211; Child Root Feature Type Setup</h2>



<p>You must setup a <strong>linear feature type</strong> with the name specified in your parent feature type&#8217;s _root_feature_type_name attribute (e.g., TreeInspTestRoot).</p>



<p>The root feature represents the root protection radius of the tree and is automatically generated as a circular line around the tree point based on the calculated RootRadius value.</p>



<ol class="wp-block-list">
<li>Create a linear (LineString) feature type with your chosen name</li>



<li>Optionally add any attributes that you want to copy from the parent feature (e.g. species information)</li>



<li>Style the feature type as desired to represent the root protection zone</li>
</ol>



<p>If the parent feature has matching attribute names, their values will be automatically copied to the root feature when it&#8217;s generated.</p>



<h2 class="wp-block-heading">Tree Inspection &#8211; Child Crown Feature Type Setup</h2>



<p>You must setup an <strong>area (polygon) feature type</strong> with the name specified in your parent feature type&#8217;s _crown_feature_type_name attribute (e.g., TreeInspTestCrown).</p>



<p>The crown feature represents the tree&#8217;s canopy spread and is automatically generated as either:</p>



<ul class="wp-block-list">
<li>A circular polygon (for even spread)</li>



<li>An elliptical polygon (for uneven spread with directional measurements)</li>
</ul>



<ol class="wp-block-list">
<li>Create a polygon (Area) feature type with your chosen name</li>



<li>Optionally add any attributes that you want to copy from the parent feature (e.g species information, etc)</li>



<li>Style the feature type as desired to represent the tree canopy</li>
</ol>



<p>If the parent feature has matching attribute names, their values will be automatically copied to the crown feature when it&#8217;s generated.</p>



<h2 class="wp-block-heading">Tree Inspection &#8211; Parent Hedge Feature Type Setup</h2>



<p>You must setup a parent feature type for hedge inspection based secondary features. <strong>The parent should have a linear geometry type for hedge lines.</strong> This parent linear feature type must have the following setup:</p>



<h3 class="wp-block-heading">Required Attributes</h3>



<ol class="wp-block-list">
<li>Secondary Feature Identifier<br>A short text attribute of name _secondary_feature with a default value of &#8216;!MODIFIER-HIDE;TreeInspection&#8217;:</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="782" height="578" src="https://soarvo.com/wp-content/uploads/2026/02/image-12.png" alt="" class="wp-image-7549" style="aspect-ratio:1.3529957718882129;width:486px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-12.png 782w, https://soarvo.com/wp-content/uploads/2026/02/image-12-300x222.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-12-768x568.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-12-50x37.png 50w" sizes="(max-width: 782px) 100vw, 782px" /></figure>



<ol start="2" class="wp-block-list">
<li>Hedge Edge Feature Type Name<br>A short text attribute of name _hedge_edge_feature_type_name with a modifier default code of !MODIFIER-HIDE;TreeInspTestHedgeEdge (replace with your actual hedge edge feature type name):</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="792" height="576" src="https://soarvo.com/wp-content/uploads/2026/02/image-13.png" alt="" class="wp-image-7550" style="width:487px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-13.png 792w, https://soarvo.com/wp-content/uploads/2026/02/image-13-300x218.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-13-768x559.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-13-50x36.png 50w" sizes="(max-width: 792px) 100vw, 792px" /></figure>



<ol start="3" class="wp-block-list">
<li>Hedge Centre Feature Type Name<br>A short text attribute of name _hedge_centre_feature_type_name with a modifier default code of !MODIFIER-HIDE;TreeInspTestHedgeCentre (replace with your actual hedge centre feature type name):</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="793" height="587" src="https://soarvo.com/wp-content/uploads/2026/02/image-14.png" alt="" class="wp-image-7551" style="width:492px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-14.png 793w, https://soarvo.com/wp-content/uploads/2026/02/image-14-300x222.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-14-768x568.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-14-50x37.png 50w" sizes="(max-width: 793px) 100vw, 793px" /></figure>



<ol start="4" class="wp-block-list">
<li>Hedge Width<br>A numerical attribute (with decimals allowed) named width to record the hedge width in metres:</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="760" height="751" src="https://soarvo.com/wp-content/uploads/2026/02/image-15.png" alt="" class="wp-image-7552" style="width:495px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-15.png 760w, https://soarvo.com/wp-content/uploads/2026/02/image-15-300x296.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-15-50x50.png 50w" sizes="(max-width: 760px) 100vw, 760px" /></figure>



<ol start="5" class="wp-block-list">
<li>Surveyed Side<br>A radio group attribute named Surveyed with three options:|<br><br>left<br>right<br>centre<br><br>This determines which side of the drawn line represents the surveyed edge of the hedge.</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="766" height="795" src="https://soarvo.com/wp-content/uploads/2026/02/image-16.png" alt="" class="wp-image-7553" style="width:482px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-16.png 766w, https://soarvo.com/wp-content/uploads/2026/02/image-16-289x300.png 289w, https://soarvo.com/wp-content/uploads/2026/02/image-16-48x50.png 48w" sizes="(max-width: 766px) 100vw, 766px" /></figure>



<p>At the end, your parent hedge inspection feature type should look like below:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="792" height="792" src="https://soarvo.com/wp-content/uploads/2026/02/image-17.png" alt="" class="wp-image-7554" style="width:482px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-17.png 792w, https://soarvo.com/wp-content/uploads/2026/02/image-17-300x300.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-17-150x150.png 150w, https://soarvo.com/wp-content/uploads/2026/02/image-17-768x768.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-17-50x50.png 50w" sizes="(max-width: 792px) 100vw, 792px" /></figure>



<h2 class="wp-block-heading">Tree Inspection &#8211; Child Hedge Centre Feature Type Setup</h2>



<p>You must setup a <strong>linear feature type</strong> with the name specified in your parent hedge feature type&#8217;s _hedge_centre_feature_type_name attribute (e.g., TreeInspTestHedgeCentre).</p>



<p>The hedge centre feature represents the centrelines of the hedge and is automatically generated based on the surveyed side and width:</p>



<p>For &#8220;left&#8221; surveyed: offset to the right by half the width<br>For &#8220;right&#8221; surveyed: offset to the left by half the width<br>For &#8220;centre&#8221; surveyed: uses the drawn line as-is</p>



<ol class="wp-block-list">
<li>Create a linear (LineString) feature type with your chosen name</li>



<li>Optionally add any attributes that you want to copy from the parent feature (e.g species information)</li>



<li>Style the feature type as desired to represent the hedge centerline</li>
</ol>



<p>If the parent feature has matching attribute names, their values will be automatically copied to the hedge centre feature when it&#8217;s generated.</p>



<h2 class="wp-block-heading">Tree Inspection &#8211; Child Hedge Edge Feature Type Setup</h2>



<p>You must setup an <strong>area (polygon) feature type</strong> with the name specified in your parent hedge feature type&#8217;s _hedge_edge_feature_type_name attribute (e.g., TreeInspTestHedgeEdge).</p>



<p>The hedge edge feature represents the full extent of the hedge and is automatically generated as a polygon buffer based on the surveyed side and width.</p>



<ol class="wp-block-list">
<li>Create a polygon (Area) feature type with your chosen name</li>



<li>Optionally add any attributes that you want to copy from the parent feature (e.g. species information)</li>



<li>Style the feature type as desired to represent the hedge extent</li>
</ol>



<p>If the parent feature has matching attribute names, their values will be automatically copied to the hedge edge feature when it&#8217;s generated.</p>



<h2 class="wp-block-heading">Tree Inspection &#8211; Mobile Demo</h2>



<p>With all of the above setup done you should now be able to create tree and hedge inspection features on the Soarvo Mobile app:</p>



<h3 class="wp-block-heading">Tree Inspection Workflow</h3>



<ol class="wp-block-list">
<li>Create a new feature using your tree inspection parent feature type</li>



<li>Record the position of the tree on the map</li>



<li>Fill in the stem count and stem diameters</li>



<li>The Root Protection Radius will be automatically calculated</li>



<li>Select crown spread type (even or uneven) and enter the spread measurements</li>



<li>Save the feature</li>



<li>The root (circular line) and crown features will be automatically generated</li>
</ol>



<video height="700" controls src="https://soarvo.com/wp-content/uploads/2026/02/treeinsp.mp4"></video>



<h3 class="wp-block-heading">Hedge Inspection Workflow</h3>



<ol class="wp-block-list">
<li>Create a new feature using your hedge inspection parent feature type</li>



<li>Record the linear geometry of the hedge on the map (from the surveyed side)</li>



<li>Fill in the hedge width</li>



<li>Select which side was surveyed (left, right, or centre)</li>



<li>Save the feature</li>



<li>The hedge edge and hedge centre features will be automatically generated</li>
</ol>



<video height="700" controls src="https://soarvo.com/wp-content/uploads/2026/02/hedge.mp4"></video>



<p>When you delete a parent tree or hedge inspection feature, all of its associated secondary features (root, crown, or hedge edge/centre) are automatically deleted as well.</p>
<p>The post <a href="https://soarvo.com/knowledge-base/secondary-features-tree-inspections/">Secondary Features &#8211; Tree Inspections</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Alignment and Chainage</title>
		<link>https://soarvo.com/knowledge-base/alignment-and-chainage/</link>
		
		<dc:creator><![CDATA[Callum Houghton]]></dc:creator>
		<pubDate>Mon, 09 Feb 2026 13:58:14 +0000</pubDate>
				<guid isPermaLink="false">https://soarvo.com/?post_type=ht_kb&#038;p=7578</guid>

					<description><![CDATA[<p>Prerequisites: Basic knowledge of how to use the Soarvo mobile application. Basic knowledge of how to use the Soarvo web portal.Knowledge of how to apply codes (previously called default codes in K-Capture) to attributes. App Version:0.0.134+ There are three elements of alignment and chainage that are implemented in the Soarvo mobile application: For all three [&#8230;]</p>
<p>The post <a href="https://soarvo.com/knowledge-base/alignment-and-chainage/">Alignment and Chainage</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>Prerequisites</em>: <br>Basic knowledge of how to use the Soarvo mobile application. <br>Basic knowledge of how to use the Soarvo web portal.<br>Knowledge of how to apply codes (previously called default codes in K-Capture) to attributes.</p>



<p><strong><em>App Version:</em><br>0.0.134+</strong></p>



<p>There are three elements of alignment and chainage that are implemented in the Soarvo mobile application:</p>



<ul class="wp-block-list">
<li>UI widget at the bottom of the map that displays the chainage and offset from your current position to the linear feature selected as the &#8216;alignment&#8217;. This is referred to as the &#8216;maps chainage and offset display&#8217; below</li>



<li>Styling of the linear feature marked as the &#8216;alignment&#8217; &#8211; it will have chainage markers along the length of the feature</li>



<li>Chainage and offset based calculations that are activated by specific codes in the default value field of an attribute</li>
</ul>



<p>For all three elements you must first select a linear feature, tap the three dots context menu on its sheet, and select &#8216;Use as Alignment&#8217;, like in the video below. You can also see how selecting a linear feature as the alignment enabled the the first two elements mentioned above.</p>



<video height="700" controls src="https://soarvo.com/wp-content/uploads/2026/02/alignment.mp4"></video>



<p>If you want the units of the maps chainage and offset display, chainage markers, and chainage and offset based calculations to be in the &#8216;miles and yards&#8217; format, e.g 1M 13Y, then you need to <strong>add a &#8216;Units&#8217; attribute to the feature type of the linear feature selected as the alignment.</strong> T<strong>hen set the value of this attribute to &#8216;MilesAndYards&#8217;.</strong> You can see in the image below this is setup as a radio group attribute. <strong>Metres is the default unit for all chainage and offset displays and calculations.</strong></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="689" src="https://soarvo.com/wp-content/uploads/2026/02/image-18-1024x689.png" alt="" class="wp-image-7579" style="width:641px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-18-1024x689.png 1024w, https://soarvo.com/wp-content/uploads/2026/02/image-18-300x202.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-18-768x517.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-18-50x34.png 50w, https://soarvo.com/wp-content/uploads/2026/02/image-18-1536x1034.png 1536w, https://soarvo.com/wp-content/uploads/2026/02/image-18-2048x1379.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>If the linear feature selected as alignment does not start at a chainage value of 0, then you can also specify this by creating a <strong>&#8216;StartChn&#8217; numeric attribute to the feature type of the linear feature selected as the alignment</strong>. All chainage and offset calculations, including the UI displays, will then take this into account.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="584" src="https://soarvo.com/wp-content/uploads/2026/02/image-19-1024x584.png" alt="" class="wp-image-7580" style="aspect-ratio:1.7520446223864765;width:646px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-19-1024x584.png 1024w, https://soarvo.com/wp-content/uploads/2026/02/image-19-300x171.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-19-768x438.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-19-50x29.png 50w, https://soarvo.com/wp-content/uploads/2026/02/image-19-1536x877.png 1536w, https://soarvo.com/wp-content/uploads/2026/02/image-19-2048x1169.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>If you want to stop using the linear feature as the alignment then tap the feature, tap the three dots context menu button, then tap &#8216;Remove as Alignment&#8217;.</p>



<h2 class="wp-block-heading">Chainage and Offset Calculations</h2>



<p>The various default value codes to calculate chainages and offsets are summarized below. </p>



<p><strong>The below default values are executed whenever the geometry of the feature is updated.</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>!CHN</td><td>Chainage along the map alignment for the feature geometry. Only available for point geometries.</td></tr><tr><td>!CHNOFFSET</td><td>Offset from the map alignment for the feature geometry. Only available for point geometries.</td></tr><tr><td>!CHNMIN</td><td>Minimum chainage along the map alignment for the feature geometry. Available for point and linear geometries.</td></tr><tr><td>!CHNMAX</td><td>Maximum chainage along the map alignment for the feature geometry. Available for point and linear geometries.</td></tr></tbody></table></figure>



<p><strong>The below default values are executed whenever the feature is opened (so created/edited).</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>!CHNATTRIBUTE(AlignmentAttributeNameHere)</td><td>Gets the value of an attribute from the alignment feature, the parameter is the name of the attribute to get (e.g. !CHNATTRIBUTE(Units)).</td></tr></tbody></table></figure>



<p></p>
<p>The post <a href="https://soarvo.com/knowledge-base/alignment-and-chainage/">Alignment and Chainage</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Auto Add Linear/Area Nodes</title>
		<link>https://soarvo.com/knowledge-base/auto-add-linear-area-nodes/</link>
		
		<dc:creator><![CDATA[Callum Houghton]]></dc:creator>
		<pubDate>Tue, 17 Feb 2026 11:16:37 +0000</pubDate>
				<guid isPermaLink="false">https://soarvo.com/?post_type=ht_kb&#038;p=7596</guid>

					<description><![CDATA[<p>Prerequisites: Basic knowledge of how to use the Soarvo mobile application. Basic knowledge of how to use the Soarvo web portal. App Version:0.0.141+ By adding a &#8216;_AUTO_ADD_NODES&#8217; numeric attribute to a feature type with linear or area geometry you can enable the &#8216;Auto Add Nodes&#8217; functionality on the Soarvo Mobile App. The image belows shows [&#8230;]</p>
<p>The post <a href="https://soarvo.com/knowledge-base/auto-add-linear-area-nodes/">Auto Add Linear/Area Nodes</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>Prerequisites</em>: <br>Basic knowledge of how to use the Soarvo mobile application. <br>Basic knowledge of how to use the Soarvo web portal.</p>



<p><strong><em>App Version:</em><br>0.0.141+</strong></p>



<p>By adding a &#8216;_AUTO_ADD_NODES&#8217; numeric attribute to a feature type with linear or area geometry you can enable the &#8216;Auto Add Nodes&#8217; functionality on the Soarvo Mobile App. The image belows shows an example. The value of the attribute is &#8216;1.23&#8217; which is the minimum distance between the last node of the geometry and your current distance before a new node (at your current position) is added &#8211; in metres. If the feature has no nodes then your current position is added as the first node.<br><br>The full default value is &#8216;!MODIFIER-HIDE;1.23&#8217; where the first part, before the semi-colon, tells the app to hide this attribute in the Soarvo Mobile App form UI.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="589" src="https://soarvo.com/wp-content/uploads/2026/02/image-20-1024x589.png" alt="" class="wp-image-7597" style="aspect-ratio:1.737949762389681;width:668px;height:auto" srcset="https://soarvo.com/wp-content/uploads/2026/02/image-20-1024x589.png 1024w, https://soarvo.com/wp-content/uploads/2026/02/image-20-300x173.png 300w, https://soarvo.com/wp-content/uploads/2026/02/image-20-768x442.png 768w, https://soarvo.com/wp-content/uploads/2026/02/image-20-50x29.png 50w, https://soarvo.com/wp-content/uploads/2026/02/image-20-1536x884.png 1536w, https://soarvo.com/wp-content/uploads/2026/02/image-20-2048x1178.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Once the linear or area feature is setup like above, you should be able to follow along with the video below and use the same &#8216;start / stop&#8217; button to enable / disable auto adding nodes to the current features geometry.</p>



<video height="700" controls src="https://soarvo.com/wp-content/uploads/2026/02/autoaddnodes.mp4"></video>
<p>The post <a href="https://soarvo.com/knowledge-base/auto-add-linear-area-nodes/">Auto Add Linear/Area Nodes</a> appeared first on <a href="https://soarvo.com">Soarvo</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
