1var distanceMatrixService = new JNRM.OsmMatrix(); 2var WALKING_VELOCITY = 1.0; 3 4// 京é½ä»è¿ã§ã®ç·¯åº¦ã¨çµåº¦ã®è·é¢æ¯ç 5var lat_lng_ratio = 912.8816392747891 / 1109.4063947762538; 6 7// çµè·¯æ¤ç´¢åºçºå°ã»ç®çå°ã®ä¾å¤å¦çç¨ 8var ARASHIYAMA_NAME = lang == 'en' ? 'Arashiyama' : 'åµå±±'; 9var ARASHIYAMA_NEAR_STATIONS = 'åµå±±(éªæ¥),0,åµå±±(京ç¦é»æ°éé),0,嵯峨åµå±±,0'; 10var ARASHIYAMA_LANDMARK_CODE = 'LM00000534'; // æ¸¡ææ© 11var KIYOMIZUDERA_LANDMARK_CODE = 'LM00000001'; 12var KIYOMIZUDERA_NEAR_STATIONS = 'äºæ¡å(京é½å¸ãã¹),8,äºæ¡å(京éªãã¹),8,æ¸ æ°´é(京é½å¸ãã¹),8,æ¸ æ°´é(京éªãã¹),8'; 13var KINKAKUJI_LANDMARK_CODE = 'LM00002093'; 14var GINKAKUJI_LANDMARK_CODE = 'LM00002101'; 15var GINKAKUJI_NEAR_STATIONS = 'éé£å¯ºå(京é½å¸ãã¹),6,éé£å¯ºé(京é½å¸ãã¹),10'; 16 17// ãã¹äºæ¥è ID 18var CITYBUS_AGENCY_ID = 200; 19var KYOTOBUS_AGENCY_ID = 203; 20 21if (lang == 'en') { 22 var CATEGORY_NAME = { R: 'Station', B: 'Bus stop', S: 'Spot' }; 23} 24else { 25 var CATEGORY_NAME = { R: 'é§ ', B: 'ãã¹å', S: 'ã¹ããã' }; 26} 27 28// ãµã¸ã§ã¹ãåè£ã®ãã¼ã«ãããï¼äºæ¥è åï¼ãåºãã¦ããç°å¢ãã©ããã 29// hover ã¨ç²¾å¯ãã¤ã³ã¿ãæã¤ç°å¢ï¼PCï¼ã ã trueãã¹ãã/ã¿ãã¬ãã㯠falseã 30// 31// ã¿ãã端æ«ã§ãã¼ã«ããããåºãã¨ãåè£ãã¿ããããæç¹ã§ hover ããã®åè£ã«å¼µãä»ãã 32// 次ã«å¥ã®å ¥åæ¬ãã¿ããããæã®åæãã¦ã¹ã¤ãã³ãå 33// (mouseout â mouseover â mousemove â mousedown â mouseup â click) ã®éä¸ã 34// mouseout ã®ã¨ããã§ jQuery UI Tooltip ã title 屿§ã®å¾©å¸°ã¨ fadeOut ãèµ°ãã㦠35// DOM ãæ¸ãæãã¦ãã¾ããiOS Safari ã¯ããã¦ã¹ã¤ãã³ãåã®éä¸ã§ãã¼ã¸å 容ã 36// å¤ããã¨æ®ãã®ã¤ãã³ã(mousedown/mouseup/click)ãéããªããããã1 åç®ã®ã¿ããã 37// æ¡ãæ½°ããããã£ã¬ãããåºãªãï¼2 åç®ã¯ hover ã®ç§»åãç¡ãã®ã§éãï¼ã 38// ããããã¿ãã端æ«ã§ã¯éããææ®µãç¡ããã¼ã«ãããã¯æ©è½ããªãã®ã§åºããªãã 39var AKY_HOVER_CAPABLE = 40 !window.matchMedia || window.matchMedia('(hover: hover) and (pointer: fine)').matches; 41 42// jQuery autocomplete ã®æ¡å¼µ 43$.widget("custom.catcomplete", $.ui.autocomplete, { 44 _renderMenu: function(ul, items) { 45 var that = this, 46 curr_category = ''; 47 var icon_suggest_show = './img/icons/icon_suggest_show.gif'; 48 var icon_suggest_hide = './img/icons/icon_suggest_hide.gif'; 49 $.each(items, function(index, item) { 50 if (item.category != curr_category) { 51 var img = $('<img>') 52 .attr('src', icon_suggest_hide) 53 .data('visible', 1) 54 .click(function() { 55 var visible = $(this).data('visible') ^ 1; 56 $(this).data('visible', visible); 57 $(this).attr('src', (visible == 1) ? icon_suggest_hide : icon_suggest_show); 58 $.each(items, function(idx, i) { 59 var i2 = i.li.data('ui-autocomplete-item'); 60 if (item.category == i2.category) { 61 (visible == 1) ? i.li.show() : i.li.hide(); 62 } 63 }); 64 }); 65 var category_name = CATEGORY_NAME[item.category]; 66 $('<li>') 67 .addClass('ui-autocomplete-category') 68 .append(img) 69 .append(category_name) 70 .appendTo(ul); 71 curr_category = item.category; 72 } 73 74 var li = $('<li>') 75 .append($('<a>').text(item.label)) 76 .attr('title', item.companyName.join(",")) 77 .data('ui-autocomplete-item', item) 78 .appendTo(ul); 79 if (AKY_HOVER_CAPABLE) { 80 li.tooltip({ 81 position: { 82 my: "left+5 center", 83 at: "right center" 84 } 85 }); 86 } 87 item.li = li; 88 }); 89 } 90}); 91 92// åºçºå°ãç®çå°ã®åè£ãªã¹ãçæ 93function make_od_list(word) { 94 return CITYBUS_SEARCH_MODE ? make_od_list_citybus(word) : make_od_list_all(word); 95} 96 97// åºçºå°ãç®çå°ã®åè£ãªã¹ãçæï¼å ¨åï¼ 98function make_od_list_all(word) { 99 var candidate = []; 100 101 if (lang == 'en') { 102 var norm_word = normalize_word_en(word); 103 104 // ãåµå±±ãåªå è¡¨ç¤ºå¯¾å¿ 105 if ('ARASHIYAMA'.indexOf(norm_word) != -1) { 106 candidate.push({ category: '', label: 'Arashiyama', type: 'S', yomi: 'Arashiyama', sortcls: 0, companyName: [] }); 107 } 108 } 109 else { 110 var norm_word = normalize_word_ja(word); 111 var kanaOnly = norm_word.match(/[^ã-ã|^ã¼]/g) === null; 112 113 // ãåµå±±ãåªå è¡¨ç¤ºå¯¾å¿ 114 if (!kanaOnly && ('åµå±±'.indexOf(word) != -1 || 'åµå±±'.indexOf(norm_word) != -1) 115 || kanaOnly && ('ããããã¾'.indexOf(word) != -1 || 'ããããã¾'.indexOf(norm_word) != -1)) { 116 candidate.push({ category: '', label: 'åµå±±', type: 'S', yomi: 'ããããã¾', sortcls: 0, companyName: [] }); 117 } 118 } 119 120 // é§ ã»ãã¹ååè£ 121 for (var name in Master.stationselect) { 122 var ss = Master.stationselect[name]; 123 var match = 0; // 0: ä¸ä¸è´, 1: åæ¹ä¸è´, 2: é¨åä¸è´ 124 if (lang == 'en') { 125 var index = ss.byname.indexOf(norm_word); 126 if (index === 0) { 127 match = 1; 128 } else if (index > 0 && norm_word.length >= 3) { 129 match = 2; 130 } 131 } 132 else { 133 if (!kanaOnly) { 134 var indexes = [ 135 name.indexOf(word), name.indexOf(norm_word), 136 ss.byname.indexOf(word), ss.byname.indexOf(norm_word) 137 ]; 138 if (indexes.some(i => i === 0)) { 139 match = 1; 140 } else if (indexes.some(i => i > 0)) { 141 match = 2; 142 } 143 } 144 else { 145 var index = ss.kana.indexOf(norm_word); 146 if (index === 0) { 147 match = 1; 148 } else if (index > 0 && norm_word.length >= 3) { 149 match = 2; 150 } 151 } 152 } 153 if (match) { 154 var can_r = { category: 'R', label: name, type: 'R', yomi: ss.k
154ana, sortcls: 10 + match, companyName: [] }; 155 var can_b = { category: 'B', label: name, type: 'B', yomi: ss.kana, sortcls: 20 + match, companyName: [] }; 156 for (var i in ss.stationnames) { 157 var stationname = ss.stationnames[i].stationname; 158 var companyid = ss.stationnames[i].companyid; 159 var sinfo = Master.station[stationname]; 160 if (sinfo !== undefined) { 161 if (Master.company[companyid].ekidiv == 'R') { 162 can_r.companyName.push(Master.company[companyid].name); 163 } else { 164 can_b.companyName.push(Master.company[companyid].name); 165 } 166 } 167 } 168 if (can_r.companyName.length > 0) { 169 candidate.push(can_r); 170 } 171 if (can_b.companyName.length > 0) { 172 candidate.push(can_b); 173 } 174 } 175 } 176 177 // ã¹ãããåè£ 178 var category_check = {}; 179 for (var i = 0; i < OD_CATEGORY_IDS.length; i++) { 180 category_check[OD_CATEGORY_IDS[i]] = true; 181 } 182 for (var code in LandmarkData.data) { 183 var lm = LandmarkData.data[code]; 184 if (!(lm.category in category_check) || lm.lat == '' || lm.lng == '') { 185 continue; 186 } 187 188 var match = 0; 189 if (lang == 'en') { 190 var lmname = normalize_word_en(lm.name); 191 var index = lmname.indexOf(norm_word); 192 if (index === 0) { 193 match = 1; 194 } else if (index > 0 && norm_word.length >= 3) { 195 match = 2; 196 } 197 } 198 else { 199 if (!kanaOnly) { 200 var indexes = [ 201 lm.name.indexOf(word), lm.name.indexOf(norm_word) 202 ]; 203 if (indexes.some(i => i === 0)) { 204 match = 1; 205 } else if (indexes.some(i => i > 0)) { 206 match = 2; 207 } 208 } 209 else if (lm.yomi) { 210 var index = lm.yomi.indexOf(norm_word); 211 if (index === 0) { 212 match = 1; 213 } else if (index > 0 && norm_word.length >= 3) { 214 match = 2; 215 } 216 } 217 } 218 if (match) { 219 var cat = 'S'; 220 var sc = 30 + match; 221 if (code == KINKAKUJI_LANDMARK_CODE || code == GINKAKUJI_LANDMARK_CODE) { 222 cat = ''; 223 sc = 0; // éé£å¯ºã»éé£å¯ºãåªå 表示 224 } 225 candidate.push({ category: cat, label: lm.name, type: 'S,'+code, yomi: lm.yomi, sortcls: sc, companyName: [] }); 226 } 227 } 228 229 candidate.sort(function(a, b) { 230 if (a.sortcls < b.sortcls) return -1; 231 if (a.sortcls > b.sortcls) return 1; 232 if (a.yomi < b.yomi) return -1; 233 if (a.yomi > b.yomi) return 1; 234 return 0; 235 }); 236 237 return candidate; 238} 239 240// åºçºå°ãç®çå°ã®åè£ãªã¹ãçæï¼å¸ãã¹ã®ã¿ï¼ 241function make_od_list_citybus(word) { 242 if (lang == 'en') { 243 var norm_word = normalize_word_en(word); 244 } else { 245 var norm_word = normalize_word_ja(word); 246 var kanaOnly = word.match(/[^ã-ã|^ã¼]/g) === null; 247 } 248 249 var candidate = []; 250 for (var name in Master.stationselect) { 251 var ss = Master.stationselect[name]; 252 var match = 0; 253 if (lang == 'en') { 254 var index = ss.byname.indexOf(norm_word); 255 if (index === 0) { 256 match = 1; 257 } else if (index > 0 && norm_word.length >= 3) { 258 match = 2; 259 } 260 } else { 261 if (!kanaOnly) { 262 var indexes = [ 263 name.indexOf(word), name.indexOf(norm_word), 264 ss.byname.indexOf(word), ss.byname.indexOf(norm_word) 265 ]; 266 if (indexes.some(i => i === 0)) { 267 match = 1; 268 } else if (indexes.some(i => i > 0)) { 269 match = 2; 270 } 271 } else { 272 var index = ss.kana.indexOf(norm_word); 273 if (index === 0) { 274 match = 1; 275 } else if (index > 0 && norm_word.length >= 3) { 276 match = 2; 277 } 278 } 279 } 280 if (match) { 281 var can = { category: '', label: name, type: 'B', yomi: ss.kana, sortcls: match, companyName: [] }; 282 for (var i = 0; i < ss.stationnames.length; i++) { 283 var stationname = ss.stationnames[i].stationname; 284 var companyid = ss.stationnames[i].companyid; 285 var sinfo = Master.station[stationname]; 286 if (sinfo !== undefined) { 287 if (companyid == CITYBUS_AGENCY_ID) { 288 can.companyName.push(Master.company[companyid].name); 289 } 290 } 291 } 292 if (can.companyName.length > 0) { 293 candidate.push(can); 294 } 295 } 296 } 297 298 candidate.sort(function(a, b) { 299 if (a.sortcls < b.sortcls) return -1; 300 if (a.sortcls > b.sortcls) return 1; 301 if (a.yomi < b.yomi) return -1; 302 if (a.yomi > b.yomi) return 1; 303 return 0; 304 }); 305 306 return candidate; 307} 308 309 310 311 312// åºçºå°ã»ç®çå°ã®æå¯é§ ã»ãã¹ååè£ãªã¹ãçæ 313function search_near_stations(lonLat, name, type, ranking, callback) { 314/* 315 return CITYBUS_SEARCH_MODE 316 ? search_near_stations_citybus(latlng, name, ranking, callback) 317 : search_near_stations_all(latlng, name, type, ranking, callback); 318*/ 319 return search_near_stations_all(lonLat, name, type, ranking, callback); 320} 321 322// åºçºå°ã»ç®çå°ã®æå¯é§ ã»ãã¹ååè£ãªã¹ãçæï¼å ¨åï¼ 323function search_near_stations_all(lonLat, name, type, ranking, callback) { 324 var rMin = {len: Number.MAX_VALUE, name: '', lat: 0, lng: 0, ekidiv: 'R', extra: 1}; 325 outer: 326 for (var stationname in Master.station) { 327 var sinfo = Master.station[stationname]; 328 for (var j = 0; j < ranking.length; j++) { 329 if (stationname == ranking[j].name) { 330 ranking[j].lat = sinfo.lat; 331 ranking[j].lng = sinfo.lng;
332 ranking[j].ekidiv = sinfo.ekidiv; 333 ranking[j].extra = 0; 334 continue outer; 335 } 336 } 337 len = (lonLat[1] - sinfo.lat) * (lonLat[1] - sinfo.lat) 338 + (lonLat[0] - sinfo.lng) * (lonLat[0] - sinfo.lng) * lat_lng_ratio * lat_lng_ratio; 339 for (var j = 0; j < ranking.length; j++) { 340 if (ranking[j].name == '' || ranking[j].len > len) { 341 for (var k = ranking.length-1; k > j; k--) { 342 ranking[k].len = ranking[k-1].len; 343 ranking[k].name = ranking[k-1].name; 344 ranking[k].lat = ranking[k-1].lat; 345 ranking[k].lng = ranking[k-1].lng; 346 ranking[k].ekidiv = ranking[k-1].ekidiv; 347 ranking[k].extra = ranking[k-1].extra; 348 } 349 ranking[j].name = stationname; 350 ranking[j].lat = sinfo.lat; 351 ranking[j].lng = sinfo.lng; 352 ranking[j].len = len; 353 ranking[j].ekidiv = sinfo.ekidiv; 354 ranking[j].extra = 0; 355 break; 356 } 357 } 358 if (sinfo.ekidiv == 'R' && rMin.len > len) { 359 rMin.len = len; 360 rMin.name = stationname; 361 rMin.lat = sinfo.lat; 362 rMin.lng = sinfo.lng; 363 rMin.ekidiv = 'R'; 364 rMin.extra = 1; 365 } 366 } 367 var ekiFlag = false; 368 for (var j = 0; j < ranking.length; j++) { 369 if (ranking[j].ekidiv == 'R') { 370 ekiFlag = true; 371 } 372 } 373 if (!ekiFlag) { 374 ranking[ranking.length] = rMin; 375 } 376 origins = [ lonLat ]; 377 destinations = []; 378 for (var i = 0; i < ranking.length; i++) { 379 if (name == Master.station[ranking[i].name].selectname && type == ranking[i].ekidiv 380 || ranking[i].len == 0) { 381 ranking[i].destination = false; 382 } 383 else { 384 ranking[i].destination = true; 385 destinations.push([ranking[i].lng, ranking[i].lat]); 386 } 387 } 388 if (destinations.length == 0) { 389 var return_value = ''; 390 for (var i = 0; i < ranking.length; i++) { 391 return_value += encodeURI(ranking[i].name) + ',0,'; 392 } 393 if (return_value != '') { 394 return_value = return_value.slice(0, -1); 395 } 396 callback(return_value); 397 } 398 distanceMatrixService.getDistanceMatrixWalk({ 399 origins: origins, 400 destinations: destinations, 401 }, 402 function (results, status) { 403 if (status == JNRM.OsmMatrixStatus.OK) { 404 var return_value = ''; 405 var idx = 0; 406 distances = results[0] 407 for (var i = 0; i < ranking.length; i++) { 408 if (ranking[i].destination && distances[idx] !== undefined) { 409 walking_time = Math.ceil(distances[idx]/WALKING_VELOCITY/60); 410 idx++; 411 } else { 412 walking_time = 0; 413 } 414 if (ranking[i].extra == 0 || walking_time <= 10) { 415 return_value += encodeURI(ranking[i].name) + ',' + walking_time+','; 416 } 417 } 418 if (return_value != '') { 419 return_value = return_value.slice(0, -1); 420 } 421 callback(return_value); 422 } 423 }); 424} 425 426// åºçºå°ã»ç®çå°ã®æå¯é§ ã»ãã¹ååè£ãªã¹ãçæï¼å¸ãã¹ã®ã¿æ¤ç´¢ï¼ 427function search_near_stations_citybus(lonLat, name, ranking, callback) { 428 429 for (var stationname in Master.station) { 430 var sinfo = Master.station[stationname]; 431 if (!sinfo.isCityBus) continue; 432 433 len = (lonLat[1] - sinfo.lat) * (lonLat[1] - sinfo.lat) 434 + (lonLat[0] - sinfo.lng) * (lonLat[0] - sinfo.lng) * lat_lng_ratio * lat_lng_ratio; 435 for (var j = 0; j < ranking.length; j++) { 436 if (ranking[j].name == '' || ranking[j].len > len) { 437 for (var k = ranking.length-1; k > j; k--) { 438 ranking[k].len = ranking[k-1].len; 439 ranking[k].name = ranking[k-1].name; 440 ranking[k].lat = ranking[k-1].lat; 441 ranking[k].lng = ranking[k-1].lng; 442 } 443 ranking[j].name = stationname; 444 ranking[j].lat = sinfo.lat; 445 ranking[j].lng = sinfo.lng; 446 ranking[j].len = len; 447 break; 448 } 449 } 450 } 451 origins = [ lonLat ]; 452 destinations = []; 453 for (var i = 0; i < ranking.length; i++) { 454 if (name == Master.station[ranking[i].name].selectname || ranking[i].len == 0) { 455 ranking[i].destination = false; 456 } 457 else { 458 ranking[i].destination = true; 459 destinations.push([ranking[i].lng, ranking[i].lat]); 460 } 461 } 462 if (destinations.length == 0) { 463 var return_value = ''; 464 for (var i = 0; i < ranking.length; i++) { 465 return_value += encodeURI(ranking[i].name) + ',0,'; 466 } 467 if (return_value != '') { 468 return_value = return_value.slice(0, -1); 469 } 470 callback(return_value); 471 } 472 distanceMatrixService.getDistanceMatrixWalk({ 473 origins: origins, 474 destinations: destinations, 475 }, 476 function (results, status) { 477 if (status == JNRM.OsmMatrixStatus.OK) { 478 var return_value = ''; 479 var idx = 0; 480 for (var i = 0; i < ranking.length; i++) { 481 if (ranking[i].destination && results[idx] !== undefined) {
482 walking_time = Math.ceil(results[idx]/WALKING_VELOCITY/60); 483 idx++; 484 } else { 485 walking_time = 0; 486 } 487 return_value += encodeURI(ranking[i].name) + ',' + walking_time+','; 488 } 489 if (return_value != '') { 490 return_value = return_value.slice(0, -1); 491 } 492 callback(return_value); 493 } 494 }); 495}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.