1350718431 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は初心者です。
どうぞご指導のほどよろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:
  • 終了:2012/10/27 16:35:16
id:seapop

ソースを添付します

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件)

回答はまだありません

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません