人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

GoogleAPIを使用してJavaScriptで2点間の距離計算をするツールを作成したのですが、その日初めてプログラムを動かした場合や、住所を入れ替えた場合に正しい値を取得しない場合が多く原因がわからず困っています。
同じ住所で再度実行すると正しい値を返してきます。

詳細は以下の通りです。
1.Accessで住所を設定したテーブルを作成し、
Web上の距離計算プログラムを起動し、
結果をテーブルにUPDATEする。
テーブルのレイアウトとデータ例は以下の通りです。
seq,client_cd,address,distance_1,distance_2
0,0000,東京都中央区築地 1-1-1,0,0
1,0001,港区芝公園 1-5-25,0,0
2,0002,新宿区歌舞伎町 1-4-1,0,0

2.距離計算プログラムの仕様
a.項番1のテーブルを全て読み配列に格納(最大10個)
b.seq:0の住所を拠点とし、拠点からの距離と
1つ前の配列の住所からの距離を取得
c.拠点からの距離をdistance_1,
1つ前の配列の住所からの距離をdistance_2に
設定してUPDATE

JavaScriptは初心者です。
どうぞご指導のほどよろしくお願いいたします。

1350718431
●拡大する

●質問者: seapop
●カテゴリ:ウェブ制作
○ 状態 :キャンセル
└ 回答数 : 0/0件

▽最新の回答へ

質問者から

ソースを添付します

var database;
var seqNo = new Array();
var txtPrefCd = new Array();
var txtAddress = new Array();
var distance_1 = new Array();
var distance_2 = new Array();

var geocoder;

onload = init;
onunload = dbClose;

function init() {
dbConnect();
dataDisplay();
}

//データベースに接続
function dbConnect() {
try {
database = new ActiveXObject("ADODB.Connection");
database.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\\sample\\sample.mdb;");
}catch(error){
alert(error.number + "\n" + error.description);
}
}

function dataDisplay() {
//データを表示する関数
var icnt;

var mySql = "select * from T_sample order by seq";
var recordSet = database.Execute(mySql);

icnt = 0;
while (!recordSet.EOF){
seqNo[icnt] = recordSet(0).value;
txtPrefCd[icnt] = recordSet(1).value;
txtAddress[icnt] = recordSet(2).value;

icnt = icnt + 1;

recordSet.MoveNext();
}
recordSet.Close();
recordSet = null;

mapDisplay(icnt);
}

function mapDisplay(recordCnt) {
//データを表示する関数
var icnt;
var bcnt;
var distance;
var destini = new Array(); // 終点の座標
var mapOptions = {
zoom: 18,
center: new google.maps.LatLng(35.681382, 139.766084),
draggableCursor: 'crosshair',
scaleControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
geocoder = new google.maps.Geocoder();
var map = new google.maps.Map(document.getElementById("maparea"), mapOptions);

var marker = new Array();

var mySql;

bcnt=0;

for (icnt=0; icnt < recordCnt; icnt++) {
geocoder.geocode({ 'address': txtAddress[icnt]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {

map.setCenter(results[0].geometry.location);
marker[icnt] = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});

destini[bcnt] = marker[icnt].getPosition(); // 始点の座標0

if (bcnt>0) {
distance = google.maps.geometry.spherical.computeDistanceBetween(destini[0], destini[bcnt]);
distance_1[bcnt] = Math.round(distance);
distance_2[bcnt] = 0;

if (bcnt > 1) {
distance = google.maps.geometry.spherical.computeDistanceBetween(destini[bcnt-1], destini[bcnt]);
distance_2[bcnt] = Math.round(distance);
}

mySql = "update T_sample set distance_1 = " + distance_1[bcnt] + ", distance_2 = " + distance_2[bcnt] + " where client_cd = '" + txtPrefCd[bcnt] + "' and seq = " + seqNo[bcnt];
dataUpdate(mySql);
}
bcnt = bcnt + 1;

} else {
alert("住所から場所を特定できませんでした。");
}
});
}

}

function dataUpdate(mySql) {
//データを更新する関数
try {
//alert(mySql);
database.Execute(mySql);
}catch(error){
alert(error.number + "\n" + error.description);
}
}

//データベースを切断
function dbClose() {
database.Close();
database = null;
}


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ