calculates the distance between two towns
Posted: Mon Oct 12, 2020 3:55 pm
Hello,
I converted a javascript program to FW.
This routine calculates the distance between two points (given the latitude/longitude of those points). It is being used to calculate the distance between two locations using GeoDataSource (TM) prodducts
Best regards,
Otto
I converted a javascript program to FW.
This routine calculates the distance between two points (given the latitude/longitude of those points). It is being used to calculate the distance between two locations using GeoDataSource (TM) prodducts
Best regards,
Otto
Code: Select all
#include "FiveWin.ch"
//----------------------------------------------------------------------------//
function Main()
local dist :=0
local lat1:=46.7528 //Sillian
local lon1:=12.4211
local lat2:=48.2077 //Lienz
local lon2:=16.3705
local unit:="K"
dist = distance( lat1, lon1, lat2, lon2, unit )
msginfo( dist )
//https://www.luftlinie.org/Sillian/Wien
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//::: :::
//::: This routine calculates the distance between two points (given the :::
//::: latitude/longitude of those points). It is being used to calculate :::
//::: the distance between two locations using GeoDataSource (TM) prodducts :::
//::: :::
//::: Definitions: :::
//::: South latitudes are negative, east longitudes are positive :::
//::: :::
//::: Passed to function: :::
//::: lat1, lon1 = Latitude and Longitude of point 1 (in decimal degrees) :::
//::: lat2, lon2 = Latitude and Longitude of point 2 (in decimal degrees) :::
//::: unit = the unit you desire for results :::
//::: where: 'M' is statute miles (default) :::
//::: 'K' is kilometers :::
//::: 'N' is nautical miles :::
//::: :::
//::: Worldwide cities and other features databases with latitude longitude :::
//::: are available at https://www.geodatasource.com :::
//::: :::
//::: For enquiries, please contact sales@geodatasource.com :::
//::: :::
//::: Official Web site: https://www.geodatasource.com :::
//::: :::
//::: GeoDataSource.com (C) All Rights Reserved 2018 :::
//::: :::
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function distance( lat1, lon1, lat2, lon2, unit)
/*
if ((lat1 == lat2) && (lon1 == lon2)) {
return 0;
}
else {
*/
local radlat1 := PI() * lat1/180
local radlat2 := PI() * lat2/180
local theta := lon1-lon2
local radtheta := PI() * theta/180
local dist := sin(radlat1) * sin(radlat2) + cos(radlat1) * cos(radlat2) * cos(radtheta)
if (dist > 1)
dist = 1
else
dist = acos(dist)
dist = dist * 180/PI()
dist = dist * 60 * 1.1515
if (unit=="K")
dist = dist * 1.609344
endif
if (unit=="N")
dist = dist * 0.8684
endif
endif
return dist
//----------------------------------------------------------------------------//