SAMPLE APP: Map Generator - EnumList base type LATLONG

Following through this community and learning from all community members, finally I embracing my courage and share a sample app for getting a cell to update it’s own Enum List values based on an update on another cell, so this is an Enum List with based type LATLONG.

For this sample, I am imagining a tracking delivery where the person delivering the order would have to report by clicking a button to update the location of the product being delivered. Or it just something to track own route.

During my testing, showing a 57 points of coordinate to the map is very fast.

In the background, a sample view of the one of the Enumlist writing new value is as below:

In this sample, I am using almost the same app formula for those EnumList, only the based type is different: LATLONG, DATETIME and LONGTEXT.

As I don’t have a previous experience with AppSheet, I don’t know if this is something that is previously has already been shared, but I found that the formula to generate the enumlist is something that just works but I don’t and can not provide explanations why it works like that.

Here is the formula for the EnumList LATLONG:

IFS([_THISROW_BEFORE].[ChangeLocation]<>[_THISROW_AFTER].[ChangeLocation],
	CONCATENATE(
		LOOKUP([_THISROW_BEFORE].[DataID],"Data","DataID","Location Generator"),
		" , ",
		UNIQUE(
			IFS(
				AND(
					ISNOTBLANK([ChangeLocation]),
					[_THISROW_after].[ChangeLocation]
					<>
					LOOKUP([_THISROW].[DataID],"Data","DataID","Location Generator")
				),
				LIST([ChangeLocation])-LIST("")
			)
		)
	),
	TRUE,
	LOOKUP([_THISROW].[DataID],"Data","DataID","Location Generator")
)

Almost the same App formula was used for the other based type EnumList. I can only imagine the writing process from AppSheet to the source table and for the same record, checking values of [_THISROW_BEFORE], [_THISROW_AFTER] and also [_THISROW]. I was just using a LOOKUP function during that split of second and taking those values and generating them using an app formula. I might be having the wrong understanding of this, so apologize for that.

A sequence of actions is then acted on the Generated EnumList and copy the values generated to another temporary table for map purposes. This process is learning one of the sample apps from Steve’s.

For you to be able to see and test the sample, you may copy the app in below link:

https://www.appsheet.com/samples/A-sample-app-for-Generating-Map-points-with-EnumList-based-type-LATLONG?appGuidString=e3dc51a4-c634-4c53-8e5c-e67602f06820

Please note that there is several conditions:

GPS to be turned-on to use the action.
Only Person/device clicking the ON Delivery will be able to update the location.
Other Device will only see or generate the map poins
For this sample app, I am also using some of gif files found on the internet, this was used in exchange for the valid state of the Updating location, to show that ones must wait a little bit for taking more actions on the same action. It will be nice if that spinner can be a transparent type and not an image base show type column as it is now.

I’ve tested the sample apps with Chrome, edge and also pixel phone and all showing the same performance when generating those point to the map. However, if there are too many points to be generated, it might depend on the device memory or internet speed, maximum point tested was 57 points as shown in this sample.

7 Likes

Very nice work @Heru

1 Like

Well thought through and well explained app @Heru . I believe the concept could be useful in delivery tracking app or cab route app etc.

1 Like

Just a sweet reminder that, GPS data totally relies on the user’s device’s GPS accelerometer and both in any Android and yet iOS device, there are a lot of native apps to mock GPS data. In Android especially, there is a Developer settings item explicitly for this purpose.
image
I even don’t rely on the NOW() expression in the app as it totally relies on the Date&Time setting of the user device and it can be tampered easily. Therefore I always prefer to use UTCNOW() expression as it relies on the Datetime stamp of the Server.

4 Likes

Thanks and appreciate your input @LeventK.