odleglosc jest jednakowa czy to na na wysokosci rownika czy tez np.: zwrotnika raka. nalezy jedynie stosowac przelicznik krzywizny ziemi i bedzie git, to ze wizualnie jest roznica - to inna para kaloszy :]
problem jest dosc czesto spotykany, zwlaszcza gdy zaczynamy bawic sie z np.: google maps, rozwiazan znam kilka, i tak naprawde zaleza od tego czego oczekujesz.
dosc istotne dla twojego problemu jest
ilosc obiektow.
jesli mialbys rozbudowana i dynamiczna baze obiektow , przeliczanie odleglosci miedzy nimi bylo bardzo nieefektywne z uwagi na ilosc dokonywanych przeliczen.
lepiej juz wstepnie zawezic zakres przeszukiwan, czyli jesli masz oznaczony pkt grograficzny - oznaczasz wartosci brzegowe, (wyznaczasz sobie kwadrat z wpisanym okregiem), pobierasz liste obiektow ktore odpowiadaja naszym warunkom brzegowym, i dopiero obiczasz odleglosci miedzy obiektami (czyli wywalasz to co zbedne)... zreszta, sposobow jest tyle co programistow... :]
kiedys popelnilem (z cztery lata temu, kiedy jeszcze tak napprawde sie uczylem fachu... zreszta, na dobra sprawe, nadal sie ucze :] ) projekt ktory robil cos takiego, podesle cie zebrane informacje na ten i podobne tematy(
UWAGA aktualne na styczen 2008)
linkihttp://code.google.com/apis/maps/geokodowanie, geokodowanie a kody pocztowe
http://www.geonames.org/exporthttp://nieruchomosci.infor24.pl/lokalizator.phpspory zbior linkow na temat geokodowania:
http://groups.google.com/group/Google-Maps...oogle-geocodersReverse Geocoder Concepts
dodatkowe API
http://nicogoeminne.googlepages.com/documentation.htmlhttp://www.geonames.org/maps/reverse-geocoder.htmlciekawa stronka o google maps:
http://web4you.com.pl/przyklad strony ktora wyszukuje okreslone lokalizacje w promieniu od zaznaczonego pkt.
http://twojafala.pl
//przydatne skrypty/funkcje
//przeliczanie odleglosci miedzy dwoma pkt.(php)
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1))* cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}#end function
//echo distance(32.9697, -96.80322, 29.46786, -98.53506, "m") . " miles";
//echo distance(32.9697, -96.80322, 29.46786, -98.53506, "k") . " kilometers";
//echo distance(32.9697, -96.80322, 29.46786, -98.53506, "n") . " nautical miles";
przykład kodu js do rysowania okręgu na mapie (w srodku )
var lon = 29.46786;
var lat = -98.53506;
var zasieg = 50;
var point = new GLatLng(lon,lat);
var marker = new GMarker(point,ICONS[0]);
map.addOverlay(marker);
str = "";
c=0;
r= zasieg/111;
var points = new Array();
for (i=0;i<6.28;i=i+0.2){
lat = eval(ar_2[0]);
lon = eval(ar_2[1]);
x = eval(lat + Math.cos(i)*r);
y = eval(lon + Math.sin(i)*r/Math.cos(lat/57));
points[c] = new GLatLng(x,y);
++c;
}
var polygon = new GPolygon(points, "#FFF000", 2, 0.6, "#FF0000", 0.4)// ,strokeOpacity, fillColor, fillOpacity);
map.addOverlay(polygon);