Learn the top ten threats that are present in modern web-application development and how to protect your business from them.

Hey all

I need a great circle calculation for vbscript.

I just got finished with determining a "nearest store locator" thanks to some help here but I am not smart enough to figure out all the "great circle" info out there...

I have 4 coordinates

Originating Lat/Long

and

Destination Lat/Long

I need to know how to calculate the distace between those two points.

I have read about the Great Circle computation method.. but just can't wrap my head around it and I can't seem to tailor the web examples I have found into a useable VBscript.

anyone got anything?

I need a great circle calculation for vbscript.

I just got finished with determining a "nearest store locator" thanks to some help here but I am not smart enough to figure out all the "great circle" info out there...

I have 4 coordinates

Originating Lat/Long

and

Destination Lat/Long

I need to know how to calculate the distace between those two points.

I have read about the Great Circle computation method.. but just can't wrap my head around it and I can't seem to tailor the web examples I have found into a useable VBscript.

anyone got anything?

Experts Exchange Solution brought to you by

Enjoy your complimentary solution view.

Get this solution by purchasing an Individual license!
Start your 7-day free trial.

I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

(my variable names)

Origin: +41.144496 (tLong) -073.343261 (tLat)

Destination: +41.571496 (tLong2) -73.044035 (tLat2)

my code is:

x = sin(tLat) * sin(tLat2) + cos(tLat) * cos(tLat2) * cos(tLong2- tLong)

GD = 3963.0 * atn(sqr(1-x^2))/x

which translates to:

x = sin(-73.044035) * sin(-073.343261) + cos(-73.044035) * cos(-073.343261) * cos(41.571496 - 41.144496)

GD = 3963.0 * atn(sqr(1-x^2))/x

I get:

1544.11124783767 Not hardly since it is about 40 miles away.

What am I doing wrong here?

(had to change to sqr cause sqrt isn't valid in vbscript)

I already tried something like that before with similar results.. maybe my values aren't correct?

Whats a Radian?

x = 69.1 * (tlat2 - tlat)

y = 69.1 * (tlong2 - tlong) * cos(tlat/57.3)

GD = sqr(x * x + y * y)

and STILL get the wacky numbers.

This is frustrating.

I am missing something , I know it.

I have tried MANY variations on what the page is describing and cannot get this to be accurate.

A quick tutorial on degrees and radians...

If you travel the circumference of a circle, you travel 360 degree. This is also equal to 2 * PI radians.

To convert from degrees to radians, you multiply by (2 * PI) / 360 or PI / 180 , which approximately equals 1 / 57.2958.

In other words, to convert from degrees to radians, you divide by 57.2958.

Example:

41 degrees = 41/57.2958 radians = 0.7156 radians

Lemme try using the algorithm for degrees on your data and I'll let you know what I come up with.

I have tried everything (I am not a math guy as you can tell)

also I will up the points for the extra effort, I am REALLY glad I am a member here.

--- Code Start ---

Sub Main()

Const DegToRad As Double = 57.29578

Dim tLong, tLat, tLong2, tLat2, x, GD As Double

tLong = 41.144496

tLat = -73.343261

tLong2 = 41.571496

tLat2 = -73.044035

x = (Math.Sin(tLat / DegToRad) * Math.Sin(tLat2 / DegToRad)) + _

(Math.Cos(tLat / DegToRad) * Math.Cos(tLat2 / DegToRad) * Math.Cos(tLong2 / DegToRad - tLong / DegToRad))

GD = 3963.0 * Math.Atan(Math.Sqrt(1 - x ^ 2) / x)

Console.WriteLine(GD)

End Sub ' Main

--- Code End ---

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial1st approximation = 30.654209 mi

2nd approximation = 22.339349 mi

true Great Distance = 22.389071 mi

In addition, I plugged your numbers into an online Great Circle calculator, found at http://www.gb3pi.org.uk/great.html

and it said 22.4 mi.

I took the milage and compared it to a map search at mapquest and it looks right

(obviously it is "off" due to driving distances and not "as the crow flies")

Thanks so much!

I ended up using:

DegToRad = 57.29578

Dim x, GD

x = (Sin(tLat / DegToRad) * Sin(tLat2 / DegToRad)) +(Cos(tLat / DegToRad) * Cos(tLat2 / DegToRad) * Cos(tLong2 / DegToRad - tLong / DegToRad))

GD = 3963.0 * atn(Sqr(1 - x ^ 2) / x)

fantastic, thank you so much for saving me time...

No on to find the latest Zip Code database with Lat/Lon for free!!

I got one at the census from 1999 but it is outdated.

Thanks much!

points are doubled

although still not what this was worth (a lot) , sorry gotta be prudent, I have a lot of questions :>

I've got WAY too much time on my hands... did a little surfing and came up with this:

http://www.cfdynamics.com/zipbase/

http://www.kchost.net/media/ (look at ZipCodes.mdb)

Enjoy!

Plus one more... http://www.emerle.net/zipcode/

and to think, some companies want to charge big bucks for this!

bassttards!

thanks for the extra effort, you should be bottled and sold on the open market in a late night infomercial as..

"The Ultimate Time saver!"

act now.. limited time offer.. operators standing by.

ASP

From novice to tech pro — start learning today.

Experts Exchange Solution brought to you by

Enjoy your complimentary solution view.

Get this solution by purchasing an Individual license!
Start your 7-day free trial.

http://www.meridianworlddata.com/HTML3/great-circle-distance-3.asp

From that page:

Great Circle Distance Formula using radians:

3963.0 * arccos[sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1)]

Great Circle Distance Formula using decimal degrees:

3963.0 * arccos[sin(lat1/57.2958) * sin(lat2/57.2958) + cos(lat1/57.2958) * cos(lat2/57.2958) * cos(lon2/57.2958 -lon1/57.2958)]

OR

r * acos[sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1)]

Where r is the radius of the earth in whatever units you desire.

r=3437.74677 (statute miles)

r=6378.7 (kilometers)

r=3963.0 (normal miles)

Since there's no arccos function in VB, you'll have to use the arctan (Atn, in VB) version, as described on the page.

Assume long/lat is in radians and the result GD is in normal miles. In VBScript, try this:

<SCRIPT LANGUAGE="VBScript">

<!--

Dim lon1, lat1, lon2, lat2, x, GD

x = sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1)

GD = 3963.0 * atn(sqrt(1-x^2))/x)

-->

</SCRIPT>

Hope that helps.