私が書いた関数に問題があります。このすべてを、ユーザーの IP から座標を提供する JSON フィードに基づいて都市の名前を返す myClosestCity という関数にラップしたいと考えています。私が見る限り、問題は getJSON 関数内にあります。私は、グローバル変数、ゲッター、セッター (まったく機能しませんでした) と、Google について考えることができるほぼすべてのものを試しました。
ところで、コードを実行するには、Google マップのスクリプトを含める必要があります: http://maps.google.com/maps/api/js?sensor=false&libraries=geometry
とにかく、ここに私のコード全体があります:
var stavanger = new google.maps.LatLng(58.96998, 5.73311);
var oslo = new google.maps.LatLng(59.91387, 10.75225);
var trondheim = new google.maps.LatLng(63.43051, 10.39505);
var bergen = new google.maps.LatLng(60.39126, 5.32205);
function calcDistance(p1, p2){
return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
}
$.getJSON("http://www.geoplugin.net/json.gp?jsoncallback=?", function(data) {
myLocation = new google.maps.LatLng(data.geoplugin_latitude,data.geoplugin_longitude);
var distances = new Array();
distances[0] = calcDistance(myLocation, stavanger);
distances[1] = calcDistance(myLocation, oslo);
distances[2] = calcDistance(myLocation, trondheim);
distances[3] = calcDistance(myLocation, bergen);
maxValue = Math.min.apply(this, distances);
var findThisIndex = maxValue + "";
var placeNo = $.inArray(findThisIndex, distances);
if(placeNo == 0) {
closestCity = "Stavanger";
}
else if (placeNo == 1){
closestCity = "Oslo";
}
else if(placeNo == 2) {
closestCity = "Trondheim";
}
else if(placeNo == 3){
closestCity = "Bergen";
}
else {
closestCity = "Ukjent"; // Unknown in Norwegian
}
alert(closestCity);
});
更新: 私が返したいのは、closerestCity 変数です!