1

地理位置情報を使用して Web アプリを作成しています。これまでのところ、ユーザーがアクセスすると、位置情報サービスを許可するように求められ、アラートが表示されるようにセットアップして動作させています (テスト目的のため、永続的ではありません)。

私はこれを使用しています:

navigator.geolocation.getCurrentPosition(foundLocation, noLocation, {enableHighAccuracy:true});

function foundLocation(position)
{
    var lat = position.coords.latitude;
    var long = position.coords.longitude;
    alert('We know you are here '+ lat +','+ long);
}
function noLocation()
{
    alert('Could not find location');
}

次に、API 呼び出しの URL である「アドレス」と呼ばれる変数をこの外部に持っています。

address = "http://api.wunderground.com/api/geolookup/hourly/conditions/astronomy/alerts/forecast/q/[LOCATION].json"

私の質問は、関数からlatandを取得longして URL に挿入するにはどうすればよいですか? 私はいくつかの方法を試しましたが、それらはすべて「未定義」を返すため、明らかに何か間違ったことをしています。

どんな助けでも大歓迎です!

ありがとうございました。

4

2 に答える 2

2

JavaScript 変数のスコープを理解する必要があります。この投稿を読んでください: JavaScript の変数のスコープとは?

var address = '';

function setLocation(position)
{
    var lat = position.coords.latitude;
    var long = position.coords.longitude;
    address = "http://api.wunderground.com/api/geolookup/hourly/conditions/astronomy/alerts/forecast/q/" + lat + "," + long + ".json";
}

さらに、問題を解決するためのより良いアプローチがあります。最も簡単な方法は、次のように、変数をそのオブジェクトのプロパティとして使用し、変数を変更するメソッドを使用して、一意の名前でグローバル オブジェクトを作成することです。

var geolocation = {};
geolocation.latitude = 0;
geolocation.longitude = 0;
geolocation.address = "";
geolocation.setLocation = function(position) {
    geolocation.latitude = position.coords.latitude;
    geolocation.longitude = position.coords.longitude;
    geolocation.address = "http://api.wunderground.com/api/geolookup/hourly/conditions/astronomy/alerts/forecast/q/" + geolocation.latitude + "," + geolocation.longitude + ".json";
};
geolocation.show = function() {
  alert(geolocation.latitude + " " geolocation.longitude + " " + geolocation.address);
};

等々。今、あなたが使用する場合、あなたのファイルのどこでも:

geolocation.setLocation(position);
geolocation.show();

グローバル オブジェクトからの新しい値が表示されます。

アップデート

JavaScript の変数またはオブジェクトは、別の関数やオブジェクトのようにラッパーがない場合、グローバルになることに注意してください。

于 2012-09-13T14:58:05.303 に答える
1

このように関数から直接アドレスを更新することはできませんか?

navigator.geolocation.getCurrentPosition(foundLocation, noLocation, {enableHighAccuracy:true});
var address = "http://api.wunderground.com/api/geolookup/hourly/conditions/astronomy/alerts/forecast/q/[LOCATION].json"

function foundLocation(position)
{
    var lat = position.coords.latitude;
    var long = position.coords.longitude;
    alert('We know you are here '+ lat +','+ long);
    address = address.replace('[LOCATION]', lat + ',' + long);
}
于 2012-09-13T14:56:19.100 に答える