Splunk Search

## Distance between two Geocoordinates

New Member

I'm trying to find the distance between two geo coordinates and am looking for help with the search syntax.Here's what my data looks like
Index=S1 created from Sensor1.csv has Id,Lat1,Long1 and Index=S2 created from Sensor2.csv has Id,Lat2,Long2 . I need to find all Lat2 and Long2 that are within a certain distance (say 1 mile) of Lat1 and Long1. I'm ok to do something like the calculation below because I'm working in a small area and reasonable accuracy will work ..is the search syntax below correct?

index=S1 or index=S2 | eval distance=sqrt(pow(Lat1-Lat2,2)+pow(Long1-Long2,2)) ....

How would I use the Haversine formula (assuming I convert my lat long to the required x,y format that Haversine needs)

How do I use the calculated distance in my search syntax. Thanks

Tags (3)
1 Solution
Esteemed Legend
New Member

Thanks .Will try both options.

Esteemed Legend SplunkTrust

Hi srs20,

you can use this macro in macros.conf :

``````[distance(4)]
args = lat1,lon1,lat2,lon2
definition = eval rlat1 = pi()*\$lat1\$/180, rlat2=pi()*\$lat2\$/180, rlat = pi()*(\$lat2\$-\$lat1\$)/180, rlon= pi()*(\$lon2\$-\$lon1\$)/180\
| eval a = sin(rlat/2) * sin(rlat/2) + cos(rlat1) * cos(rlat2) * sin(rlon/2) * sin(rlon/2) \
| eval c = 2 * atan2(sqrt(a), sqrt(1-a)) \
| eval distance = 6371 * c |  fields - a c r*
iseval = 0
``````

it can then be used in the SPL like this: `| distance(lat1,lon1,lat2,lon2)` (sorry not able to add the tick-thingy around the macro).

Hope this helps ...

cheers, MuS Don’t Miss Global Splunk
User Groups Week!