haversinus pasted by saeftl on Thu Jan 26 12:49:14 2012

(define *pi* 3.14159265358979323846)

(define (->radians gps)
    (list (* (/ *pi* 180) (car gps))
          (* (/ *pi* 180) (cadr gps))))

(define (gdist l1 l2)
    (let* ((min1 (->radians l1))
           (min2 (->radians l2))
           (dlat (- (car min1) (car min2)))
           (dlon (- (cadr min1) (cadr min2)))
           (haver (+ (sq (sin (/ dlat 2))) (* (cos (car min1)) 
                (cos (car min2)) (sq (sin (/ dlon 2)))))))
           (* 6371 2 (asin (sqrt haver)))))

extract from osm databases added by saeftl on Thu Jan 26 17:40:17 2012

#!  /usr/bin/perl

$innode=0;
$aplace=0;
$gotname=0;
while (<STDIN>) {
        if (m,^\s*<node\s+.*\s*lat="([0-9.]+)"\s+.*\s*lon="([0-9.]+)".*[^/]>\s*$,) {
                $innode = 1;
                $lat=$1;
                $lon=$2;
        }
        if (m,</node>,) {
                if ($innode && $aplace && $gotname ) {
                        print "($name\t($lon, $lat))\n";
                }
                $innode = $aplace = $gotname = 0;
        }
        if (m,<tag\s+[^>]*\s*k="place",) {
                if (m,<tag\s+[^>]*\s+v="(city|town|farm|village|isolated_dwelling|suburb|hamlet)",) {
                        $aplace = 1;
                }
        }
        if (m,<tag\s+[^>]*\s*k="name",) {
                if (m,<tag\s[^>]*\sv="([^"]+)",) {
                        $name = $1;
                        $gotname=1;
                }
        }
}