- Home ›
- Google Maps API入門 ›
- 座標データ ›
- HERE
高速道路
高速道路に関するデータです。JSON形式で用意してあります。
山陽自動車道(1) 山陽自動車道(2) 山陽自動車道(3) 山陽自動車道(4) 山陽自動車道(5)
今回は2つの形式のデータを読み込みます。まず高速道路の路線名や詳細データのファイル名を格納したデータです。
{ "rosen":[ {"rname":"選択して下さい","filename":"","count":0}, {"rname":"東名高速道路","filename":"highway-toumei","count":1}, {"rname":"中央自動車道","filename":"highway-chuou","count":1}, {"rname":"名神高速道路","filename":"highway-meishin","count":1}, {"rname":"東名阪自動車道","filename":"highway-higashimeihan","count":2}, ...(略) {"rname":"松山自動車道","filename":"highway-matsuyama","count":2}, {"rname":"高松自動車道","filename":"highway-takamatsu","count":2}, {"rname":"徳島自動車道","filename":"highway-tokushima","count":1}, {"rname":"高知自動車道","filename":"highway-kochi","count":1} ] }
そして路線毎のICやJCTの詳細データです。場所の種類、名前、緯度、経度の4つのデータを格納しています。また路線を表示する時の色を一つデータとして持っています。
{ "linecolor":"#80FFFF", "marker":[ {"type":"JCT","pname":"北上","lat":39.274117,"lng":141.076233}, {"type":"IC","pname":"北上西","lat":39.291785,"lng":140.98447}, {"type":"IC","pname":"湯田","lat":39.313468,"lng":140.747252}, {"type":"IC","pname":"横手","lat":39.279324,"lng":140.54661}, ...(略) {"type":"IC","pname":"五城目八郎潟","lat":39.948121,"lng":140.096999}, {"type":"IC","pname":"琴丘森岳","lat":40.033028,"lng":140.088427}, {"type":"IC","pname":"八竜","lat":40.118109,"lng":140.011324}, {"type":"IC","pname":"能代南","lat":40.153765,"lng":140.022705} ] }
サンプル
では簡単なサンプルで試してみます。
var map; var rosenName = []; var rosenFile= []; var rosenCount= []; function initialize() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map")); map.addControl(new GMapTypeControl()); map.addControl(new GLargeMapControl()); map.setCenter(new GLatLng(38.393339,137.636719), 5); GDownloadUrl("./data/highway-list.json", createHighway); } } function createHighway(jsondata, statusCode){ var json = eval("(" + jsondata + ")"); var selectHtml = ""; selectHtml += "<form>"; selectHtml += "<select id='rosenname' onChange='dispRosen()'>"; for (var i = 0; i < json.rosen.length; i++) { rosenName.push(json.rosen[i].rname); rosenFile.push(json.rosen[i].filename); rosenCount.push(json.rosen[i].count); } for (var i = 0; i < rosenName.length; i++) { selectHtml += "<option value='" + rosenFile[i] + "'>" selectHtml += rosenName[i]; selectHtml += "</option>"; } selectHtml += "</select>"; selectHtml += "</form>"; document.getElementById("rosen").innerHTML = selectHtml; dispRosenLine(); } function dispRosenLine(){ for (var i = 1; i < rosenName.length; i++){ if (rosenCount[i] == 1){ GDownloadUrl("./data/" + rosenFile[i] + ".json", createLineMap); }else{ for (var no = 1; no <= rosenCount[i]; no++){ GDownloadUrl("./data/" + rosenFile[i] + no + ".json", createLineMap); } } } } function createLineMap(jsondata, statusCode){ var json = eval("(" + jsondata + ")"); var polyline = []; var linecolor = json.linecolor; for (var i = 0; i < json.marker.length; i++) { var lat = json.marker[i].lat; var lng = json.marker[i].lng; polyline.push(new GLatLng(lat, lng)); } map.addOverlay(new GPolyline(polyline, linecolor, 10, 0.7)); } function dispRosen(){ var val = document.getElementById("rosenname").value; var index = document.getElementById("rosenname").selectedIndex; if (index != 0){ map.clearOverlays(); dispRosenLine(); map.setCenter(new GLatLng(38.393339,137.636719), 5); if (rosenCount[index] == 1){ GDownloadUrl("./data/" + rosenFile[index] + ".json", createMap); }else{ for (var no = 1; no <= rosenCount[index]; no++){ GDownloadUrl("./data/" + rosenFile[index] + no + ".json", createMap); } } } } function createMap(jsondata, statusCode){ var json = eval("(" + jsondata + ")"); var selectHtml = ""; selectHtml += "<form>"; selectHtml += "<select id='ekiname' onChange='selectStation()'>"; selectHtml += "<option value='0'>選択してください</option>"; for (var i = 0; i < json.marker.length; i++) { var type = json.marker[i].type; var pname = json.marker[i].pname; var lat = json.marker[i].lat; var lng = json.marker[i].lng; var marker = createMarker(type, pname, lat, lng); map.addOverlay(marker); selectHtml += "<option value='" + lat + "," + lng + "'>" selectHtml += "[" + type + "]" + pname; selectHtml += "</option>"; } selectHtml += "</select>"; selectHtml += "</form>"; document.getElementById("ic").innerHTML = selectHtml; } function createMarker(type, pname, lat, lng){ var marker = new GMarker(new GLatLng(lat, lng)); var html = "<p>" + "[" + type + "]" + pname + "</p>"; GEvent.addListener(marker, "click", function(){ marker.openInfoWindowHtml(html); }); return marker; } function selectStation(obj){ var val = document.getElementById("ekiname").value; if (val != "0"){ var latlng = val.split(","); var lat = latlng[0]; var lng = latlng[1]; map.setCenter(new GLatLng(lat, lng), 14); } }
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>サンプル:高速道路</title> <script src="http://maps.google.com/maps?file=api&v=2&key=(key)&sensor=false" type="text/javascript" charset="utf-8"></script> <script src="./js/code6_1.js" type="text/javascript"></script> </head> <body onload="initialize()" onunload="GUnload()"> <div> <div id="rosen" style="width:150px;float:left;"></div> <div id="ic" style="width:120px;float:left;"></div> </div> <div id="map" style="width:500px; height:400px;clear:both;"></div> </body> </html>
実際に試してみた画面イメージは次の通りです。
選択メニューから高速道路の路線を選択すると、選択した高速道路のICやJCTがマーカーとして表示されます。
また路線を選択すると、右側の選択メニュー内にその路線のICやJCTの一覧が表示されます。選択すればそのICやJCTに移動して表示します。各ICやJCTのマーカーをクリックすると情報ウィンドウ内にICやJCTの名前を表示します。
( Written by Tatsuo Ikura )