同じ住所で再度実行すると正しい値を返してきます。
詳細は以下の通りです。
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は初心者です。
どうぞご指導のほどよろしくお願いいたします。
ソースを添付します
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件)