Hi
how can i retrieve data using the spatial data and include the distance in the result for each data object?
Hello @mohammad_altoiher
See documentation - https://backendless.com/docs/rest/data_spatial_retrieval_api.html - distanceOnSphere Operator
// search in radius - calculates the distance between the value in the column (first argument) and the point in the second argument
distanceOnSphere( spatialColumnName, ‘POINT as WKT’ )
// calculate the distance between the point in spatialColumnNameFrom and the point in spatialColumnNameTo
distanceOnSphere( spatialColumnNameFrom, spatialColumnNameTo )
@Volodymyr_Ialovyi
i tried that but i get the objects data with no distance.
im using distanceOnSphere(store_location, 'POINT(24.5165147-43.9238434)') <= 100000
Try add ‘,’ between lat and long = distanceOnSphere(store_location, ‘POINT(24.5165147**,** -43.9238434)’)
@Volodymyr_Ialovyi, there is no comma in the WKT definition of a POINT
. There must be space between the coordinates though.
i get the data objects with my first query fine but i dont get the distance or know the sorting with the query (i want by the closest)
There must be space between the coordinates in the POINT
definition:
distanceOnSphere(store_location, ‘POINT(24.5165147 -43.9238434)’)
with space or without i still get the same results.
results are data objects with not distance or sort by distance
Maybe there are no objects that match that criteria?
then i should not get any results right?
Right
but i get results like i normally get with load table objects
{ "stores": [ { "___jsonclass": "store", "website": null, "address": null, "lng": "42.5182113", "chain_store": false, "created": 1576177568000, "rating": null, "icon": "https://lh5.googleusercontent.com/p/AF1QipPgBZ9u-EWH_KEc4Xeet71fHs-qu9fF4UP7OsxM=w408-h544-k-no", "mobile": null, "instagram": null, "ownerId": null, "twitter": null, "instagram_update": null, "phone": "059 000 1718", "name": "زين", "___class": "store", "twitter_account": null, "updated": 1581008912554, "objectId": "18.2204797-42.5182113", "lat": "18.2204797", "store_location": { "coordinates": [ 18.2204797, 42.5182113 ], "type": "Point" }, "photo_icon": null, "desc": "شركة إتصالات" },
with geo points we get the distance and we can sort with the distance also.
how can we do this with the spatial data?
Make sure the same points are stored in the database in a column of type POINT
, then use a query to load data.
sorry i didn’t get what you mean.
im getting the user location from my app and passing it to the API as a parameter, is there something i should do other than that?
To make it productive, let’s focus on the Backendless side of things. If you believe it is not working properly, please share with us:
- the query you’re making
- what kind of result you’re expecting
- what kind of result are you getting
Thanks,
Mark
sure!
- my query :
distanceOnSphere(store_location, 'POINT(24.710521 46.714670)') <= 1000
- the result are a list of the data objects in the area.
- my expected results are the list of data object in the area plus the distance for each data object to the POINT in the query. ex
"distance": 159.051
If you use Codeless, then in the properties
element, add a list with the following string element:
distanceOnSphere(store_location, 'POINT(24.710521 46.714670)') as distance
This will return a property named distance
that has the value.
adding that to the properties i get no result from the query
{
“stores”:
}
What’s your application ID?
07D0CC0C-4A50-198B-FFFB-78866CCD9600
i tried adding this to the properties
1+1 as distance
and it did add the property to the results
“stores”: [
{
“___jsonclass”: “store”,
“distance”: 2,
“___class”: “store”,
“objectId”: “18.2204797-42.5182113”
},