2011-07-11 5 views
5

Nie mogę znaleźć żadnych przykładów w CF formuły Haversine'a (wzór do obliczania odległości między dwoma punktami na kuli od ich długości i szerokości).Jak ćwiczyć formułę Haversine w ColdFusion

Wikipeda ma przykłady w innych językach (http://en.wikipedia.org/wiki/Haversine_formula), ale żadna w CF.

Interpretacja w CF jest poniżej przez innego programistę, wewnętrzna i nie w pełni przetestowana. Jestem zainteresowany, aby zobaczyć, jak inni to obliczyli w CF. Byłbym również zainteresowany uzyskaniem opinii na poniższym przykładzie, aby dowiedzieć się, jak można go uprościć.

var variables.intEarthRadius = 6371; // in km 

var local.decRadius = arguments.radius/1000; // convert radius given in metres to kilometres 

var local.latMax = arguments.latitude + degree(local.decRadius/variables.intEarthRadius); 
var local.latMin = arguments.latitude - degree(local.decRadius/variables.intEarthRadius); 

var local.lngMax = arguments.longitude + degree(local.decRadius/variables.intEarthRadius/cos(radian(arguments.latitude))); 
var local.lngMin = arguments.longitude - degree(local.decRadius/variables.intEarthRadius/cos(radian(arguments.latitude))); 





private numeric function degree(required numeric radian) hint="I convert radians to degrees." { 
     return arguments.radian * 180/pi(); 
    } 

    private numeric function radian(required numeric degrees) hint="I convert degrees to radians." { 
     return arguments.degrees * pi()/180; 
    } 

Odpowiedz

6

Czy spojrzał na to ...

http://cflib.org/udf/getHaversineDistance

(New URL od CFLib.org przełączane do generatora statycznej stronie)

+0

Cześć Richard, dzięki, po prostu staramy się obgaduję kilka spraw, jakimi są ból;) wydaje się idealny. zapomniałem o bibliotekach java! createObject ("java", "java.lang.Math") o wiele łatwiej – Prometheus

+1

Zawsze stań na barkach gigantów :-) –

+1

Napisałem to UDF i to był tylko szybki port od: http: //www.movable-type .co.uk/scripts/latlong.html – Henry