From c5a5c333b5b930ccc8d879067eddd874313f9574 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Mon, 02 Nov 2020 20:25:34 +0000 Subject: [PATCH] [map] New API approach --- map.js | 342 ++++----- /dev/null | 1799 ------------------------------------------------- lang_en.js | 4 lang_pl.js | 4 4 files changed, 152 insertions(+), 1,997 deletions(-) diff --git a/lang_en.js b/lang_en.js index bf8f333..79c8b42 100644 --- a/lang_en.js +++ b/lang_en.js @@ -50,8 +50,8 @@ types: { v: 'Vehicle', - b: 'Bus', - t: 'Tram', + vb: 'Bus', + vt: 'Tram', s: 'Stop', sb: 'Bus stop', st: 'Tram stop', diff --git a/lang_pl.js b/lang_pl.js index 32b5aaf..a51190f 100644 --- a/lang_pl.js +++ b/lang_pl.js @@ -50,8 +50,8 @@ types: { 'v': 'Pojazd', - 'b': 'Autobus', - 't': 'Tramwaj', + 'vb': 'Autobus', + 'vt': 'Tramwaj', 's': 'Przystanek', 'sb': 'Przystanek autobusowy', 'st': 'Przystanek tramwajowy', diff --git a/map.js b/map.js index 14cd19c..d957dbb 100644 --- a/map.js +++ b/map.js @@ -1,8 +1,7 @@ 'use strict'; var api_refresh = 10000; // 10 seconds -var api_poll_url = 'http://127.0.0.1/sub'; -var api_poll_refresh = 1000; +var api_url = 'https://api.ttss.pl'; var geolocation = null; var geolocation_set = 0; @@ -15,7 +14,6 @@ var vehicles = {}; var hash = null; -var stops_ignored = ['131', '744', '1263', '3039']; var stops_style = { 'sb': new ol.style.Style({ image: new ol.style.Circle({ @@ -54,7 +52,6 @@ var stop_selected_source = null; var stop_selected_layer = null; -var feature_clicked = null; var feature_xhr = null; var feature_timer = null; var path_xhr = null; @@ -121,7 +118,9 @@ fail: function(message) { addParaWithText(this._content, message).className = 'error'; }, - show: function(contents, closeCallback) { + show: function(contents, closeCallback, hashValue) { + hash.set(hashValue ? hashValue : ''); + this._runCallback(); this.closeCallback = closeCallback; @@ -205,9 +204,7 @@ this.timeout = setTimeout(this.find.bind(this), 100); }, open: function(panel) { - setHash('f'); - - panel.show(this.div, this.close.bind(this)); + panel.show(this.div, this.close.bind(this), 'f'); this.input.focus(); }, close: function() { @@ -240,7 +237,7 @@ style: function(feature, clicked) { var color_type = 'black'; - var vehicleType = vehicles_info.getParsed(feature.getId()); + var vehicleType = feature.get('type'); if(vehicleType) { switch(vehicleType.low) { case 0: @@ -277,12 +274,12 @@ // if(special_directions[vehicle.direction]) { // vehicle.line = special_directions[vehicle.direction]; // } - text: feature.get('name').substr(0, feature.get('name').indexOf(' ')), + text: feature.get('line'), fill: new ol.style.Fill({color: 'white'}), }), })); }, - select: function(feature, callback) { + select: function(feature) { if(feature instanceof ol.Feature) { feature = feature.getId(); } @@ -294,20 +291,12 @@ this.style(feature, true); this.selectedFeatureId = feature.getId(); - this.deselectCallback = callback; }, deselect: function() { if(!this.selectedFeatureId) return false; var feature = this.source.getFeatureById(this.selectedFeatureId); this.style(feature); - - this._internalDeselect(); - }, - _internalDeselect: function() { - var callback = this.deselectCallback; - this.deselectCallback = null; this.selectedFeatureId = null; - if(callback) callback(); }, typesUpdated: function() { @@ -317,20 +306,50 @@ }, _newFeature: function(id, data) { - var feature = new ol.Feature(); - feature.setId(this.prefix + id); - feature.setProperties(data); - feature.setGeometry(getGeometryPair(feature.get('pos'))); + var feature = new ol.Feature(data); + feature.set('_', 'v' + this.prefix); + feature.setId(id); + feature.setGeometry(getGeometryFeature(feature)); this.style(feature); return feature; }, + _updateFeature: function(feature, vehicle) { + Object.keys(vehicle).forEach(function (key) { + feature.set(key, deepMerge(feature.get(key), vehicle[key])); + if(key === 'lon' || key === 'lat') { + feature.setGeometry(getGeometryFeature(feature)); + } else if(key === 'angle') { + feature.getStyle().getImage().setRotation(Math.PI * parseFloat(vehicle.angle ? vehicle.angle : 0) / 180.0); + } else if(key === 'line') { + // TODO: Special directions + feature.getStyle().getText().setText(vehicle.line); + } + }); + }, + _removeFeature: function(feature) { + if(!feature) return; + this.source.removeFeature(feature); + if(this.selectedFeatureId === feature.getId()) { + this.deselect(); + } + }, loadFullData: function(data) { + var self = this; var features = []; for(var id in data) { - features.push(this._newFeature(id, data[id])); + var feature = this.source.getFeatureById(id); + if(feature) { + this._updateFeature(feature, data[id]); + } else { + features.push(this._newFeature(id, data[id])); + } } - this.source.clear(); this.source.addFeatures(features); + this.source.forEachFeature(function(feature) { + if(!data[feature.getId()]) { + self._removeFeature(feature); + } + }); if(this.selectedFeatureId) { this.select(this.selectedFeatureId); @@ -338,31 +357,13 @@ }, loadDiffData: function(data) { for(var id in data) { - var feature = this.source.getFeatureById(this.prefix + id); + var feature = this.source.getFeatureById(id); var vehicle = data[id]; - // TODO: handle vehicleInfo updates - if(vehicle === null) { - if(feature) { - this.source.removeFeature(feature); - if (this.selectedFeatureId === feature.getId()) { - this._internalDeselect(); - } - } + this._removeFeature(feature); } else if(feature) { - var isPosModified = false; - Object.keys(vehicle).forEach(function (key) { - feature.set(key, deepMerge(feature.get(key), vehicle[key])); - if(key === 'pos') { - feature.setGeometry(getGeometryPair(feature.get('pos'))); - } else if (key === 'angle') { - feature.getStyle().getImage().setRotation(Math.PI * parseFloat(vehicle.angle ? vehicle.angle : 0) / 180.0); - } else if (key === 'name') { - // TODO: Special directions - feature.getStyle().getText().setText(vehicle.name.substr(0, vehicle.name.indexOf(' '))); - } - }); + this._updateFeature(feature, vehicle); } else { this.source.addFeature(this._newFeature(id, data[id])); } @@ -371,48 +372,27 @@ fetch: function() { var self = this; - var result = this.fetchFull(); - - // TODO: XHR only as fallback - result.done(function() { - setTimeout(self.fetchDiff.bind(self), 1); - }); + var result = this.fetchXhr(); // TODO: updates (EventSource) - // TODO: error handling (reconnect) + // TODO: error ahandling (reconnect) // TODO: error handling (indicator) return result; }, - fetchFull: function() { + fetchXhr: function() { var self = this; this.xhr = $.get( - api_poll_url + '?id=' + this.prefix + '-full' + api_url + '/positions/?type=' + this.prefix + '&last=' + this.lastUpdate ).done(function(data) { try { - self.lastUpdate = this.request.getResponseHeader('Etag'); - self.loadFullData(data); - } catch(e) { - console.log(e); - throw e; - } - }).fail(this.failXhr.bind(this)); - return this.xhr; - }, - fetchDiff: function() { - var self = this; - this.xhr = $.get( - api_poll_url + '?id=' + this.prefix + '-diff', - {'If-None-Match': this.lastUpdate} - ).done(function(data) { - try { - if(this.request.status == 304) { - setTimeout(self.fetchDiff.bind(self), api_poll_refresh); - return; + if(data['type'] == 'full') { + self.loadFullData(data['pos']); + } else { + self.loadDiffData(data['pos']); } - self.lastUpdate = this.request.getResponseHeader('Etag'); - self.loadDiffData(data); - setTimeout(self.fetchDiff.bind(self), 1); + self.lastUpdate = data['last']; + setTimeout(self.fetchXhr.bind(self), api_refresh); } catch(e) { console.log(e); throw e; @@ -427,9 +407,9 @@ if(result.status === 0) { fail(lang.error_request_failed_connectivity, result); - } else if (result.status === 304) { + } else if(result.status === 304) { fail(lang.error_request_failed_no_data, result); - } if (result.statusText) { + } else if(result.statusText) { fail(lang.error_request_failed_status.replace('$status', result.statusText), result); } else { fail(lang.error_request_failed, result); @@ -463,6 +443,9 @@ fail_ajax_generic(data, panel.fail.bind(panel)); } +function getGeometryFeature(feature) { + return getGeometryPair([feature.get('lon'), feature.get('lat')]); +} function getGeometryPair(pair) { return new ol.geom.Point(ol.proj.fromLonLat(pair)); } @@ -470,10 +453,10 @@ return getGeometryPair([object.longitude / 3600000.0, object.latitude / 3600000.0]); } -function markStops(stops, ttss_type, routeStyle) { +function markStops(stops, featureSource, routeStyle) { stop_selected_source.clear(); - var style = stops_layer['s' + ttss_type].getStyle().clone(); + var style = stops_layer['s' + featureSource].getStyle().clone(); if(routeStyle) { style.getImage().setRadius(5); @@ -490,8 +473,7 @@ if(stops[i].getId) { feature = stops[i]; } else { - prefix = stops[i].substr(0,2); - feature = stops_source[prefix].getFeatureById(stops[i]); + feature = stops_source['s' + featureSource].getFeatureById(stops[i]); } if(feature) { stop_selected_source.addFeature(feature); @@ -510,43 +492,29 @@ } function updateStopSource(stops, prefix) { - var source = stops_source[prefix]; - var mapping = stops_mapping[prefix]; var stop; for(var i = 0; i < stops.length; i++) { stop = stops[i]; - if(stop.category === 'other') continue; - if(stops_ignored.includes(stop.shortName)) continue; + var feature = new ol.Feature(stop); + feature.setId(stop.id); + feature.setGeometry(getGeometryFeature(feature)); - stop.geometry = getGeometry(stop); - var stop_feature = new ol.Feature(stop); - - if(prefix.startsWith('p')) { - mapping[stop.stopPoint] = stop_feature; + if(feature.get('parent') === null) { + feature.set('_', 's' + prefix); + stops_source['s' + prefix].addFeature(feature); } else { - mapping[stop.shortName] = stop_feature; + feature.set('_', 'p' + prefix); + stops_source['p' + prefix].addFeature(feature); } - - stop_feature.setId(prefix + stop.id); - - source.addFeature(stop_feature); } } -function updateStops(stop_type, ttss_type) { - var methods = { - 's': 'stops', - 'p': 'stopPoints', - }; +function updateStops(ttss_type) { return $.get( - ttss_urls[ttss_type] + '/geoserviceDispatcher/services/stopinfo/' + methods[stop_type] - + '?left=-648000000' - + '&bottom=-324000000' - + '&right=648000000' - + '&top=324000000' + api_url + '/stops/?type=' + ttss_type ).done(function(data) { - updateStopSource(data[methods[stop_type]], stop_type + ttss_type); + updateStopSource(data, ttss_type); }).fail(fail_ajax); } @@ -584,41 +552,34 @@ if(feature_xhr) feature_xhr.abort(); if(feature_timer) clearTimeout(feature_timer); - var featureId = feature.getId(); - var ttss_type = featureId.substr(0, 1); + var featureDiscriminator = feature.get('_'); + var featureType = featureDiscriminator.substr(0, 1); + var featureSource = featureDiscriminator.substr(1, 1); + var featureStatus = feature.get('status'); feature_xhr = $.get( - ttss_urls[ttss_type] + '/services/tripInfo/tripPassages' - + '?tripId=' + encodeURIComponent(feature.get('trip')) - + '&mode=departure' + api_url + '/trip/?type=' + featureSource + '&id=' + feature.get('trip') ).done(function(data) { - if(typeof data.old === "undefined" || typeof data.actual === "undefined") { - return; - } - deleteChildren(table); - var all_departures = data.old.concat(data.actual); var tr; var stopsToMark = []; - for(var i = 0, il = all_departures.length; i < il; i++) { + for(var i = 0, il = data.length; i < il; i++) { tr = document.createElement('tr'); - addCellWithText(tr, all_departures[i].actualTime || all_departures[i].plannedTime); - addCellWithText(tr, all_departures[i].stop_seq_num + '. ' + normalizeName(all_departures[i].stop.name)); + addCellWithText(tr, data[i].time); + addCellWithText(tr, (i+1) + '. ' + normalizeName(data[i].name)); - if(i >= data.old.length) { - stopsToMark.push('s' + ttss_type + all_departures[i].stop.id); - } + stopsToMark.push(data[i].stop); - if(i < data.old.length) { + if(data[i].seq < feature.get('seq')) { tr.className = 'active'; - } else if(all_departures[i].status === 'STOPPING') { + } else if(data[i].seq == feature.get('seq') && featureStatus < 2) { tr.className = 'success'; } table.appendChild(tr); } - if(all_departures.length === 0) { + if(data.length === 0) { tr = document.createElement('tr'); table.appendChild(tr); tr = addCellWithText(tr, lang.no_data); @@ -626,21 +587,23 @@ tr.className = 'active'; } - markStops(stopsToMark, ttss_type, true); + markStops(stopsToMark, featureSource, true); feature_timer = setTimeout(function() { vehicleTable(feature, table); }, api_refresh); }).fail(fail_ajax_popup); return feature_xhr; } -function stopTable(stopType, stopId, table, ttss_type) { +function stopTable(feature, table) { if(feature_xhr) feature_xhr.abort(); if(feature_timer) clearTimeout(feature_timer); + var featureDiscriminator = feature.get('_'); + var featureType = featureDiscriminator.substr(0, 1); + var featureSource = featureDiscriminator.substr(1, 1); + feature_xhr = $.get( - ttss_urls[ttss_type] + '/services/passageInfo/stopPassages/' + stopType - + '?' + stopType + '=' + encodeURIComponent(stopId) - + '&mode=departure' + api_url + '/stop/?type=' + featureSource + '&id=' + feature.getId() ).done(function(data) { deleteChildren(table); @@ -650,7 +613,7 @@ tr = document.createElement('tr'); addCellWithText(tr, all_departures[i].patternText); dir_cell = addCellWithText(tr, normalizeName(all_departures[i].direction)); - vehicle = vehicles_info.getParsed(all_departures[i].vehicleId); + //vehicle = vehicles_info.getParsed(all_departures[i].vehicleId); dir_cell.appendChild(displayVehicle(vehicle)); status = parseStatus(all_departures[i]); status_cell = addCellWithText(tr, status); @@ -672,13 +635,15 @@ table.appendChild(tr); } - feature_timer = setTimeout(function() { stopTable(stopType, stopId, table, ttss_type); }, api_refresh); + feature_timer = setTimeout(function() { stopTable(feature, table); }, api_refresh); }).fail(fail_ajax_popup); return feature_xhr; } function featureClicked(feature) { - if(feature && !feature.getId()) return; + if(!feature || !feature.getId() || !feature.get('_')) { + feature = null; + } unstyleSelectedFeatures(); @@ -687,9 +652,13 @@ return; } + var featureDiscriminator = feature.get('_'); + var featureType = featureDiscriminator.substr(0, 1); + var featureSource = featureDiscriminator.substr(1, 1); + var div = document.createElement('div'); - var name = normalizeName(feature.get('name')); + var name = normalizeName(feature.get('name') ? feature.get('name') : feature.get('line') + ' ' + feature.get('dir')); var additional; var table = document.createElement('table'); var thead = document.createElement('thead'); @@ -699,24 +668,20 @@ var tabular_data = true; - var type = feature.getId().substr(0, 1); - var full_type = feature.getId().match(/^[a-z]+/)[0]; - var typeName = lang.types[full_type]; + var typeName = lang.types[featureDiscriminator]; if(typeof typeName === 'undefined') { typeName = ''; } // Location - if(type == 'l') { + if(featureType == 'l') { tabular_data = false; name = typeName; typeName = ''; } // Vehicle - else if(ttss_types.includes(type)) { - vehicles[type].select(feature); - - var span = displayVehicle(feature.get('vehicle_type')); + else if(featureType == 'v') { + var span = displayVehicle(feature.get('type')); additional = document.createElement('p'); if(span.title) { @@ -730,42 +695,41 @@ addElementWithText(thead, 'th', lang.header_stop); vehicleTable(feature, tbody); - vehiclePath(feature); + //vehiclePath(feature); } // Stop or stop point - else if(['s', 'p'].includes(type)) { - var ttss_type = feature.getId().substr(1, 1); - if(type == 's') { + else if(['s', 'p'].includes(featureType)) { + if(featureType == 's') { var second_type = lang.departures_for_buses; - var mapping = stops_mapping['sb']; + var source = stops_source['sb']; - if(ttss_type == 'b') { + if(featureSource == 'b') { second_type = lang.departures_for_trams; - mapping = stops_mapping['st']; + source = stops_source['st']; } - stopTable('stop', feature.get('shortName'), tbody, ttss_type); + stopTable(feature, tbody); - if(mapping[feature.get('shortName')]) { + var second = source.getFeatureById(feature.get('id')); + if(second) { additional = document.createElement('p'); additional.className = 'small'; addElementWithText(additional, 'a', second_type).addEventListener( 'click', function() { - featureClicked(mapping[feature.get('shortName')]); + featureClicked(second); } ); } } else { - stopTable('stopPoint', feature.get('stopPoint'), tbody, ttss_type); + stopTable(feature, tbody); additional = document.createElement('p'); additional.className = 'small'; addElementWithText(additional, 'a', lang.departures_for_stop).addEventListener( 'click', function() { - var mapping = stops_mapping['s' + ttss_type]; - featureClicked(mapping[feature.get('shortName')]); + featureClicked(stops_source['s' + featureSource].getFeatureById(feature.get('parent'))); } ); } @@ -774,8 +738,6 @@ addElementWithText(thead, 'th', lang.header_direction); addElementWithText(thead, 'th', lang.header_time); addElementWithText(thead, 'th', lang.header_delay); - - markStops([feature], feature.getId().substr(1,1)); } else { panel.close(); return; @@ -806,22 +768,23 @@ if(tabular_data) { div.appendChild(table); - hash.set(feature.getId()); } showOnMapFunction(); panel.show(div, function() { - hash.set(''); - unstyleSelectedFeatures(); if(path_xhr) path_xhr.abort(); if(feature_xhr) feature_xhr.abort(); if(feature_timer) clearTimeout(feature_timer); - }); + }, tabular_data ? featureDiscriminator + feature.getId() : ''); - feature_clicked = feature; + if(featureType == 'v') { + vehicles[featureSource].select(feature); + } else if(['s', 'p'].includes(featureType)) { + markStops([feature], featureSource); + } } function listFeatures(features) { @@ -834,7 +797,7 @@ addParaWithText(div, lang.select_feature); - var feature, p, a, full_type, typeName; + var feature, p, a, featureDiscriminator, typeName; for(var i = 0; i < features.length; i++) { feature = features[i]; @@ -845,18 +808,18 @@ featureClicked(feature); }}(feature)); - full_type = feature.getId().match(/^[a-z]+/)[0]; - typeName = lang.types[full_type]; + featureDiscriminator = feature.get('_'); + typeName = lang.types[featureDiscriminator]; if(typeof typeName === 'undefined') { typeName = ''; } - if(feature.get('vehicle_type')) { - typeName += ' ' + feature.get('vehicle_type').num; + if(feature.get('type')) { + typeName += ' ' + feature.get('type').num; } addElementWithText(a, 'span', typeName).className = 'small'; a.appendChild(document.createTextNode(' ')); - addElementWithText(a, 'span', normalizeName(feature.get('name'))); + addElementWithText(a, 'span', normalizeName(feature.get('name') ? feature.get('name') : feature.get('line') + ' ' + feature.get('dir'))); div.appendChild(p); } @@ -938,20 +901,18 @@ return false; }, _updateOld: function() { - if(window.location.hash.match(/^#!t[0-9]{3}$/)) { - this.go(depotIdToVehicleId(window.location.hash.substr(3), 't')); - } else if(window.location.hash.match(/^#!b[0-9]{3}$/)) { - this.go(depotIdToVehicleId(window.location.hash.substr(3), 'b')); - } else if(window.location.hash.match(/^#![A-Za-z]{2}[0-9]{3}$/)) { - this.go(depotIdToVehicleId(window.location.hash.substr(2))); - } else if(window.location.hash.match(/^#!v-?[0-9]+$/)) { - this.go('t' + window.location.hash.substr(3)); + if(window.location.hash.match(/^#![bt][0-9]{3}$/)) { + this.go('v' + window.location.hash.substr(2)); + } else if(window.location.hash.match(/^#![RHrh][A-Za-z][0-9]{3}$/)) { + this.go('vt'+ window.location.hash.substr(4)); + } else if(window.location.hash.match(/^#![BDPbdp][A-Za-z][0-9]{3}$/)) { + this.go('vb'+ window.location.hash.substr(4)); } }, ready: function() { this._updateOld(); this.changed(); - window.addEventListener('hashchange', this.changed, false); + window.addEventListener('hashchange', this.changed.bind(this), false); }, go: function(id) { this._ignoreChange = false; @@ -968,14 +929,13 @@ } var feature = null; + var source = null; var vehicleId = null; var stopId = null; - if(window.location.hash.match(/^#![tb]-?[0-9]+$/)) { - vehicleId = window.location.hash.substr(2); - } else if(window.location.hash.match(/^#![sp]-?[0-9]+$/)) { - stopId = window.location.hash.substr(2,1) + 't' + window.location.hash.substr(3); - } else if(window.location.hash.match(/^#![sp][tb]-?[0-9]+$/)) { + if(window.location.hash.match(/^#!v[tb][0-9]+$/)) { + vehicleId = window.location.hash.substr(3); + } else if(window.location.hash.match(/^#![sp][tb][0-9a-z_]+$/)) { stopId = window.location.hash.substr(2); } else if(window.location.hash.match(/^#!f$/)) { find.open(panel); @@ -983,10 +943,9 @@ } if(vehicleId) { - vehicles[vehicleId.substr(0, 1)].select(vehicleId); - return true; + feature = vehicles[vehicleId.substr(0,1)].source.getFeatureById(vehicleId.substr(1)); } else if(stopId) { - feature = stops_source[stopId.substr(0,2)].getFeatureById(stopId); + feature = stops_source[stopId.substr(0,2)].getFeatureById(stopId.substr(2)); } featureClicked(feature); @@ -1179,15 +1138,10 @@ map.getView().on('change:resolution', change_resolution); change_resolution(); - var future_requests = [ - vehicles_info.update(), - ]; + var future_requests = []; ttss_types.forEach(function(type) { - vehicles_info.addWatcher(vehicles[type].typesUpdated.bind(vehicles[type])); future_requests.push(vehicles[type].fetch()); - }); - stops_type.forEach(function(type) { - future_requests.push(updateStops(type.substr(0,1), type.substr(1,1))); + future_requests.push(updateStops(type)); }); hash = new Hash(); diff --git a/proxy_bus.php b/proxy_bus.php deleted file mode 100644 index 6486943..0000000 --- a/proxy_bus.php +++ /dev/null @@ -1,3 +0,0 @@ -<?php -$base_proxy = 'http://ttss.mpk.krakow.pl/internetservice'; -require('proxy_common.php'); diff --git a/proxy_common.php b/proxy_common.php deleted file mode 100644 index cbc5350..0000000 --- a/proxy_common.php +++ /dev/null @@ -1,121 +0,0 @@ -<?php -if(!isset($base_proxy)) { - echo 'This script is for inclusion only.'; - die(); -} - -function is_number($str) { - $str = (string)$str; - - return - ctype_digit($str) - OR - ( - substr($str, 0, 1) == '-' - AND - ctype_digit(substr($str, 1)) - ); -} - -$method = [ - '/services/lookup/autocomplete/json' => [ - 'query' => function() { return TRUE; }, - ], - '/services/passageInfo/stopPassages/stop' => [ - 'stop' => 'ctype_alnum', - 'mode' => function($mode) { return in_array($mode, ['arrival', 'departure']); }, - #'startTime' => 'ctype_digit', - #'timeFrame' => 'ctype_digit', - ], - '/services/passageInfo/stopPassages/stopPoint' => [ - 'stopPoint' => 'is_number', - 'mode' => function($mode) { return in_array($mode, ['arrival', 'departure']); }, - #'startTime' => 'ctype_digit', - #'timeFrame' => 'ctype_digit', - ], - '/services/tripInfo/tripPassages' => [ - 'tripId' => 'ctype_digit', - 'mode' => function($mode) { return in_array($mode, ['arrival', 'departure']); }, - #'vehicleId' => 'ctype_digit', - ], - '/services/routeInfo/routeStops' => [ - 'routeId' => 'ctype_alnum', - ], - '/services/stopInfo/stop' => [ - 'stop' => 'is_number', - ], - '/services/stopInfo/stopPoint' => [ - 'stopPoint' => 'is_number', - ], - - '/geoserviceDispatcher/services/stopinfo/stops' => [ - 'left' => 'is_number', - 'bottom' => 'is_number', - 'right' => 'is_number', - 'top' => 'is_number', - ], - '/geoserviceDispatcher/services/stopinfo/stopPoints' => [ - 'left' => 'is_number', - 'bottom' => 'is_number', - 'right' => 'is_number', - 'top' => 'is_number', - ], - '/geoserviceDispatcher/services/pathinfo/route' => [ - 'id' => 'is_number', - 'direction' => 'is_number', - ], - '/geoserviceDispatcher/services/pathinfo/vehicle' => [ - 'id' => 'is_number', - ], - '/geoserviceDispatcher/services/vehicleinfo/vehicles' => [ - 'lastUpdate' => 'ctype_digit', - 'positionType' => function($type) { return in_array($type, ['CORRECTED', 'RAW']); }, - 'colorType' => function($type) { return in_array($type, ['ROUTE_BASED']); }, - ], -]; -$rewrite = [ - '/lookup/autocomplete/json' => '/services/lookup/autocomplete/json', - '/passageInfo/stopPassages/stop' => '/services/passageInfo/stopPassages/stop', - '/routeInfo/routeStops' => '/services/routeInfo/routeStops', - '/internetservice/geoserviceDispatcher/services/pathinfo/vehicle' => '/geoserviceDispatcher/services/pathinfo/vehicle', -]; - -$path = $_SERVER['PATH_INFO']; - -if(isset($rewrite[$path])) { - $path = $rewrite[$path]; -} - -if(!isset($method[$path])) { - header('HTTP/1.1 403 Forbidden'); - die('Forbidden'); -} - -$parameters = []; - -foreach($method[$path] as $name => $filter) { - if(!isset($_GET[$name])) { - header('HTTP/1.1 403 Forbidden'); - die('Parameter '.$name.' is required'); - } - - if(!$filter($_GET[$name])) { - header('HTTP/1.1 403 Forbidden'); - die('Parameter '.$name.' has invalid value'); - } - - $parameters[$name] = $_GET[$name]; -} - -$result = @file_get_contents($base_proxy . $path . '?' . http_build_query($parameters)); -if(!$result OR $http_response_header[0] != 'HTTP/1.1 200 OK') { - header('HTTP/1.1 503 Service Unavailable'); - if(isset($http_response_header[0])) { - die($http_response_header[0]); - } else { - die('Unknown error'); - } -} - -header('Content-Type: application/json'); -echo $result; diff --git a/proxy_tram.php b/proxy_tram.php deleted file mode 100644 index 40e04ee..0000000 --- a/proxy_tram.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$base_proxy = 'http://www.ttss.krakow.pl/internetservice'; -if($_GET['positionType'] ?? NULL === 'RAW') { - $_GET['positionType'] = 'CORRECTED'; -} -require('proxy_common.php'); diff --git a/stops.php b/stops.php deleted file mode 100644 index 16eab82..0000000 --- a/stops.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php -include(__DIR__.'/stops/common.php'); -include(__DIR__.'/stops/stops.php'); - -try { - // Reject invalid input - if(!isset($_GET['query'])) throw new UnexpectedValueException(); - if(empty($_GET['query'])) throw new UnexpectedValueException(); - if(strlen($_GET['query']) > 50) throw new UnexpectedValueException(); - - // Initialize a DB connection an a query - $pdo = new PDO('sqlite:stops/stops.db', NULL, NULL, array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION - )); - $st = $pdo->prepare('SELECT DISTINCT id FROM stop_search WHERE word LIKE ? AND id LIKE \'t%\''); - - // Split stop name into words - $words = split_stop_name($_GET['query']); - - // Find matching stops (their IDs) - $ids = NULL; - foreach($words as $word) { - if(empty($word)) continue; - - // Find stop IDs with names matching the word - $st->execute(array($word.'%')); - $results = $st->fetchAll(PDO::FETCH_COLUMN); - $st->closeCursor(); - - if(is_array($ids)) { - // Merge results with list for previous words - $ids = array_intersect($ids, $results); - } else { - // First search - initialize results list - $ids = $results; - } - - // No results will be found - if(count($ids) == 0) break; - } - - // Close a DB connection - unset($st, $pdo); - - // No query was executed - return empty list - if(!is_array($ids)) throw new UnexpectedValueException(); - - // Build a structure for the UI - $stop_list = []; - $query_lower = mb_strtolower($_GET['query'], 'UTF-8'); - foreach($ids as $id) { - $stop_list[] = [ - 'id' => $id, - 'name' => $stops[$id], - 'type' => 'stop', - 'relevance' => similar_text( - $query_lower, - mb_strtolower($stops[$id], 'UTF-8') - ) - ]; - } - - // Sort stops by relevance - usort($stop_list, function($a, $b) { - $rel = $b['relevance'] - $a['relevance']; - if($rel == 0) return strcasecmp($a['name'], $b['name']); - return $rel; - }); - - // Return JSON - echo json_encode($stop_list); -} catch(UnexpectedValueException $e) { - echo '[]'; -} catch(Exception $e) { - header('HTTP/1.1 503 Service Unavailable'); - echo $e->getMessage(); -} diff --git a/stops/common.php b/stops/common.php deleted file mode 100644 index 8cf4642..0000000 --- a/stops/common.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -setlocale(LC_CTYPE, 'pl_PL.UTF-8'); - -function split_stop_name($string) { - $string = strtolower(iconv('utf-8', 'ascii//TRANSLIT', $string)); - $words = preg_split('/\\W+/', $string); - - foreach($words as &$word) { - $two = substr($word, 0, 2); - if($two == 'os') $word = 'os'; - elseif($two == 'al') $word = 'al'; - elseif($two == 'sw') $word = 'sw'; - } - unset($word); - - return array_values($words); -} - -function normalize_name($string) { - return strtr(strtr($string, ['.' => '. ']), [' ' => ' ']); -} - -function normalize_name_cmp($string) { - return normalize_name(mb_strtolower($string, 'UTF-8')); -} diff --git a/stops/download_stops.php b/stops/download_stops.php deleted file mode 100644 index 4c689b6..0000000 --- a/stops/download_stops.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -if(php_sapi_name() !== 'cli') die(); - -function fetchStops($url) { - $json = file_get_contents($url); - $elements = json_decode($json, 1); - $stops = []; - foreach($elements['stops'] as $element) { - if($element['category'] == 'other') continue; - $stops[$element['shortName']] = $element['name']; - } - asort($stops); - return $stops; -} - -function printStops($stops, $prefix) { - foreach($stops as $id => $stop) { - echo ' \''.$prefix.str_pad($id."'", 5, ' ', STR_PAD_RIGHT).' => '.var_export($stop, TRUE).','."\n"; - } -} - -$stops_tram = fetchStops('http://www.ttss.krakow.pl/internetservice/geoserviceDispatcher/services/stopinfo/stops?left=-648000000&bottom=-324000000&right=648000000&top=324000000'); -$stops_bus = fetchStops('http://91.223.13.70/internetservice/geoserviceDispatcher/services/stopinfo/stops?left=-648000000&bottom=-324000000&right=648000000&top=324000000'); - -echo '<?php'."\n"; -echo '$stops = array ('."\n"; -printStops($stops_tram, 't'); -echo "\n"; -printStops($stops_bus, 'b'); -echo ');'."\n"; diff --git a/stops/index.php b/stops/index.php deleted file mode 100644 index eca9c39..0000000 --- a/stops/index.php +++ /dev/null @@ -1,87 +0,0 @@ -<?php -include('common.php'); -include('stops.php'); - -try { - // Reject invalid input - if(!isset($_GET['query'])) throw new UnexpectedValueException(); - if(empty($_GET['query'])) throw new UnexpectedValueException(); - if(strlen($_GET['query']) > 50) throw new UnexpectedValueException(); - - // Split stop name into words - $words = split_stop_name($_GET['query']); - $find_ondemand = in_array('nz', $words); - - // Initialize a DB connection and a query - $pdo = new PDO('sqlite:stops.db', NULL, NULL, array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION - )); - $st = $pdo->prepare('SELECT DISTINCT id FROM stop_search WHERE word LIKE ?'.($find_ondemand ? '' : ' AND word != \'nz\'').' ORDER BY id DESC'); - - // Find matching stops (their IDs) - $ids = NULL; - foreach($words as $word) { - if(empty($word)) continue; - - // Find stop IDs with names matching the word - $st->execute(array($word.'%')); - $results = $st->fetchAll(PDO::FETCH_COLUMN); - $st->closeCursor(); - - if(is_array($ids)) { - // Merge results with list for previous words - $ids = array_intersect($ids, $results); - } else { - // First search - initialize results list - $ids = $results; - } - - // No results will be found - if(count($ids) == 0) break; - } - - // Close a DB connection - unset($st, $pdo); - - // No query was executed - return empty list - if(!is_array($ids)) throw new UnexpectedValueException(); - - // Build a structure for the UI - $stop_list = []; - $query_lower = normalize_name_cmp($_GET['query']); - foreach($ids as $id) { - $letters = similar_text( - $query_lower, - normalize_name_cmp($stops[$id]), - $percent - ); - $percent += $letters * 100; - // -5 due to UTF-8 - if(substr($stops[$id], -5) == '(nż)' && !$find_ondemand) { - $percent /= 2; - } - $stop_list[] = [ - 'id' => $id, - 'name' => normalize_name($stops[$id]), - 'type' => 'stop', - 'relevance' => $percent, - ]; - } - - // Sort stops by relevance - usort($stop_list, function($a, $b) { - $rel = $b['relevance'] - $a['relevance']; - if($rel == 0) return strcasecmp($a['name'], $b['name']); - return $rel; - }); - - // Return JSON - header('Content-Type: application/json'); - echo json_encode($stop_list); -} catch(UnexpectedValueException $e) { - header('Content-Type: application/json'); - echo '[]'; -} catch(Exception $e) { - header('HTTP/1.1 503 Service Unavailable'); - echo $e->getMessage(); -} diff --git a/stops/populate_db.php b/stops/populate_db.php deleted file mode 100644 index 845ec95..0000000 --- a/stops/populate_db.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -if(php_sapi_name() !== 'cli') die(); - -include('stops.php'); -include('common.php'); - -$pdo = new PDO('sqlite:stops_temp.db'); - -$pdo->query('DROP TABLE IF EXISTS stop_search'); -$pdo->query('CREATE TABLE stop_search ( - word VARCHAR(60), - id VARCHAR(255) -)'); - -function processStops($st, $stops) { - foreach($stops as $id => $name) { - foreach(split_stop_name($name) as $word) { - $st->execute([$word, $id]); - $st->closeCursor(); - } - } -} - -$pdo->beginTransaction(); -$st = $pdo->prepare('INSERT INTO stop_search (word, id) VALUES (?, ?)'); -processStops($st, $stops); -$pdo->commit(); - -$pdo->query('CREATE INDEX stop_search_word ON stop_search (word COLLATE NOCASE)'); - -rename('stops_temp.db', 'stops.db'); diff --git a/stops/stops.db b/stops/stops.db deleted file mode 100644 index dc53950..0000000 --- a/stops/stops.db +++ /dev/null Binary files differ diff --git a/stops/stops.php b/stops/stops.php deleted file mode 100644 index cb3baee..0000000 --- a/stops/stops.php +++ /dev/null @@ -1,1799 +0,0 @@ -<?php -$stops = array ( - 't113' => 'AWF', - 't462' => 'Agencja Kraków Wschód', -# 't134' => 'Balicka Wiadukt', # nowa nazwa # 't136' => 'Bronowice Wiadukt', - 't449' => 'Bardosa', -# 't75' => 'Basztowa LOT', # nowa nazwa # 't3032' => 'Stary Kleparz', - 't78' => 'Batorego', - 't130' => 'Białucha', - 't867' => 'Bieńczycka', - 't630' => 'Bieżanowska', - 't84' => 'Biprostal', - 't461' => 'Blokowa', -# 't2798' => 'Boisko Kabel', # dawny tymczasowy - 't747' => 'Borek Fałęcki', - 't824' => 'Borek Fałęcki I', - 't612' => 'Borsucza', - 't451' => 'Brama nr 4 (nż)', - 't453' => 'Brama nr 5 (nż)', - 't61' => 'Bratysławska', - 't89' => 'Bronowice', - 't135' => 'Bronowice Małe', - 't136' => 'Bronowice Wiadukt', - 't613' => 'Brożka (nż)', - 't409' => 'Centralna', -# 't3039' => 'Centrum Kongresowe ICE', # nowa nazwa # 't3338' => 'Rondo Grunwaldzkie', - 't2691' => 'Chmieleniec', - 't87' => 'Cichy Kącik', - 't3037' => 'Cienista', -# 't2549' => 'Cmentarz Grębałów Zachód', # nowa nazwa # 't2685' => 'Jarzębiny', - 't621' => 'Cmentarz Podgórski', - 't124' => 'Cmentarz Rakowicki', -# 't318' => 'Cracovia', # nowa nazwa # 't3141' => 'Muzeum Narodowe', - 't129' => 'Cystersów', - 't3038' => 'Czerwone Maki P+R', - 't407' => 'Czyżyny', - 't392' => 'DH Wanda', - 't915' => 'Dajwór', # nieczynny - linia muzealna - 't435' => 'Darwina', - 't632' => 'Dauna', - 't388' => 'Dunikowskiego', - 't623' => 'Dworcowa', -# 't131' => 'Dworzec Główny', # nowa nazwa # 't3242' => 'Teatr Słowackiego', - 't1173' => 'Dworzec Główny Tunel', -# 't8567' => 'Dworzec Główny Tunel', # duplikat # 't1173' => 'Dworzec Główny Tunel', - 't2608' => 'Dworzec Główny Zachód', - 't2870' => 'Dworzec Płaszów Estakada', - 't70' => 'Dworzec Towarowy', -# 't6685' => 'Dworzec Towarowy', # duplikat # 't70' => 'Dworzec Towarowy', - 't370' => 'Dąbie', - 't464' => 'Elektromontaż (nż)', - 't368' => 'Fabryczna', - 't322' => 'Filharmonia', - 't1051' => 'Fort Mogiła (nż)', - 't367' => 'Francesco Nullo', - 't560' => 'Gromadzka', -# 't585' => 'Grota Roweckiego', # nowa nazwa # 't2687' => 'Grota-Roweckiego', - 't2687' => 'Grota-Roweckiego', - 't1049' => 'Głowackiego', - 't363' => 'Hala Targowa', -# 't6990' => 'Hala Targowa', # duplikat # 't363' => 'Hala Targowa', - 't2685' => 'Jarzębiny', - 't452' => 'Jeżynowa', - 't319' => 'Jubilat', - 't624' => 'Kabel', - 't2690' => 'Kampus UJ', - 't576' => 'Kapelanka', - 't429' => 'Klasztorna', - 't382' => 'Kleeberga', - 't946' => 'Klimeckiego', - 't584' => 'Kobierzyńska', -# 't401' => 'Kocmyrzowska', # nowa nazwa # 't3037' => 'Cienista', - 't457' => 'Koksochemia (nż)', - 't459' => 'Kombinat', - 't313' => 'Komorowskiego', - 't450' => 'Kopiec Wandy', -# 't2536' => 'Kordylewskiego', # nowa nazwa # 't2859' => 'Teatr Variété', - 't571' => 'Korona', -# 't2803' => 'Kraków Arena Al. Pokoju', # nowa nazwa # 't2871' => 'TAURON Arena Kraków Al. Pokoju', -# 't959' => 'Kraków Plaza', # nowa nazwa # 't3033' => 'Plaza', - 't63' => 'Krowodrza Górka', -# 't7612' => 'Krowodrza Górka', # duplikat # 't63' => 'Krowodrza Górka', - 't567' => 'Kuklińskiego', -# 't744' => 'Kurdwanów', # nowa nazwa # 't3176' => 'Kurdwanów P+R', - 't3176' => 'Kurdwanów P+R', -# 't7389' => 'Kurdwanów pętla', # nowa nazwa # 't744' => 'Kurdwanów', -# 't2537' => 'Lema', # nowa nazwa # 't2803' => 'Kraków Arena Al. Pokoju' - 't569' => 'Limanowskiego', - 't2686' => 'Lipińskiego', - 't561' => 'Lipska', - 't126' => 'Lubicz', - 't930' => 'M1 Al. Pokoju', -# 't1263' => 'Mały Płaszów', # nowa nazwa # 't3310' => 'Mały Płaszów P+R', - 't3310' => 'Mały Płaszów P+R', - 't454' => 'Meksyk (nż)', - 't362' => 'Miodowa', -# 't6989' => 'Miodowa', # duplikat # 't362' => 'Miodowa', - 't375' => 'Mistrzejowice', - 't2538' => 'Miśnieńska', -# 't574' => 'Most Grunwaldzki', # nowa nazwa # 't3039' => 'Centrum Kongresowe ICE', - 't460' => 'Mrozowa', - 't2726' => 'Muzeum Inżynierii Miejskiej', # nieczynny - linia muzealna - 't2811' => 'Muzeum Lotnictwa', - 't3141' => 'Muzeum Narodowe', - 't2688' => 'Norymberska', -# 't372' => 'Nowohucka', # nowa nazwa # 't3041' => 'Rondo 308. Dywizjonu', - 't715' => 'Nowosądecka', -# 't2580' => 'Nowy Bieżanów', # nowa nazwa # 't3175' => 'Nowy Bieżanów P+R', - 't3175' => 'Nowy Bieżanów P+R', - 't71' => 'Nowy Kleparz', - 't2582' => 'Nowy Prokocim', - 't369' => 'Ofiar Dąbia', - 't823' => 'Oleandry', - 't361' => 'Orzeszkowej', - 't413' => 'Os.Kolorowe', - 't424' => 'Os.Na Skarpie', - 't378' => 'Os.Piastów', - 't418' => 'Os.Zgody', - 't377' => 'Os.Złotego Wieku', - 't466' => 'PH', - 't614' => 'PT', - 't960' => 'Park Jordana', - 't716' => 'Piaski Nowe', - 't379' => 'Piasta Kołodzieja', - 't570' => 'Plac Bohaterów Getta', -# 't7207' => 'Plac Bohaterów Getta', # duplikat # 't570' => 'Plac Bohaterów Getta', -# 't414' => 'Plac Centralny', # nowa nazwa # 't2744' => 'Plac Centralny im. R.Reagana', - 't2744' => 'Plac Centralny im. R.Reagana', - 't79' => 'Plac Inwalidów', - 't360' => 'Plac Wolnica', # nieczynny - przebudowa ul. Krakowskiej - 't1360' => 'Plac Wszystkich Świętych', - 't3033' => 'Plaza', - 't458' => 'Pleszów', - 't357' => 'Poczta Główna', - 't3158' => 'Podgórze SKA', - 't73' => 'Politechnika', -# 't6689' => 'Politechnika', # duplikat # 't73' => 'Politechnika', -# 't568' => 'Powstańców Wielkopolskich', # nowa nazwa # 't3158' => 'Podgórze SKA', -# 't7204' => 'Powstańców Wielkopolskich', # duplikat # 't568' => 'Powstańców Wielkopolskich', - 't637' => 'Prokocim', -# 't7279' => 'Prokocim', # duplikat # 't637' => 'Prokocim', - 't682' => 'Prokocim Szpital', -# 't69' => 'Prądnicka', # nowa nazwa # 't3036' => 'Szpital Narutowicza', -# 't6684' => 'Prądnicka', # duplikat # 't69' => 'Prądnicka', - 't72' => 'Pędzichów', - 't128' => 'Rakowicka (nż)', - 't320' => 'Reymana', - 't3041' => 'Rondo 308. Dywizjonu', - 't408' => 'Rondo Czyżyńskie', - 't3338' => 'Rondo Grunwaldzkie', - 't365' => 'Rondo Grzegórzeckie', -# 't6992' => 'Rondo Grzegórzeckie', # duplikat # 't365' => 'Rondo Grzegórzeckie', - 't2539' => 'Rondo Hipokratesa', -# 't419' => 'Rondo Kocmyrzowskie', # nowa nazwa # 't2745' => 'Rondo Kocmyrzowskie im. Ks. Gorzelanego', - 't2745' => 'Rondo Kocmyrzowskie im. Ks. Gorzelanego', - 't610' => 'Rondo Matecznego', - 't125' => 'Rondo Mogilskie', -# 't6747' => 'Rondo Mogilskie', # duplikat # 't125' => 'Rondo Mogilskie', - 't383' => 'Rondo Piastowskie', -# 't587' => 'Rostworowskiego', # nowa nazwa # 't589' => 'Ruczaj', - 't589' => 'Ruczaj', -# 't586' => 'Ruczaj I', # nowa nazwa # 't585' => 'Grota Roweckiego', - 't1262' => 'Rzebika', - 't611' => 'Rzemieślnicza', - 't311' => 'Salwator', - 't615' => 'Sanktuarium Bożego Miłosierdzia', # nieczynny - budowa Trasy Łagiewnickiej - 't572' => 'Smolki', - 't746' => 'Solvay', - 't358' => 'Starowiślna', -# 't6985' => 'Starowiślna', # duplikat # 't358' => 'Starowiślna', - 't3032' => 'Stary Kleparz', - 't112' => 'Stella-Sawickiego', - 't359' => 'Stradom', - 't423' => 'Struga', - 't2548' => 'Suche Stawy', - 't3036' => 'Szpital Narutowicza', - 't575' => 'Szwedzka', - 't577' => 'Słomiana', - 't2871' => 'TAURON Arena Kraków Al. Pokoju (nż)', - 't3040' => 'TAURON Arena Kraków Wieczysta', - 't77' => 'Teatr Bagatela', - 't420' => 'Teatr Ludowy', - 't3242' => 'Teatr Słowackiego', - 't2859' => 'Teatr Variété', - 't681' => 'Teligi', - 't127' => 'Uniwersytet Ekonomiczny', - 't321' => 'Uniwersytet Jagielloński', - 't88' => 'Uniwersytet Pedagogiczny', - 't83' => 'Urzędnicza', - 't463' => 'Walcownia', - 't325' => 'Wawel', - 't2543' => 'Wańkowicza', - 't133' => 'Wesele', - 't434' => 'Wiadukty', -# 't114' => 'Wieczysta', # nowa nazwa # 't3040' => 'TAURON Arena Kraków Wieczysta', - 't718' => 'Witosa', -# 't7362' => 'Witosa', # duplikat # 't718' => 'Witosa', - 't634' => 'Wlotowa', - 't442' => 'Wzgórza Krzesławickie', - 't1154' => 'Zabłocie', - 't465' => 'Zajezdnia Nowa Huta', - 't679' => 'Ćwiklińskiej', - 't922' => 'Łagiewniki', -# 't7584' => 'Łagiewniki', # duplikat # 't922' => 'Łagiewniki', - 't2821' => 'Łagiewniki ZUS', -# 't324' => 'Św. Gertrudy', # duplikat # 't2741' => 'Św.Gertrudy', -# 't364' => 'Św. Wawrzyńca', # duplikat # 't2742' => 'Św.Wawrzyńca', -# 't8508' => 'Św. Wawrzyńca', # duplikat # 't364' => 'Św. Wawrzyńca', - 't2741' => 'Św.Gertrudy', - 't2742' => 'Św.Wawrzyńca', - - 'b3111' => 'AGH / UR', - 'b113' => 'AWF', - 'b1328' => 'Agatowa (nż)', - 'b462' => 'Agencja Kraków Wschód (nż)', - 'b117' => 'Akacjowa', - 'b2573' => 'Albatrosów', - 'b415' => 'Aleja Przyjaźni', - 'b416' => 'Aleja Róż', - 'b2625' => 'Aleja Waszyngtona (nż)', -# 'b235' => 'Aleksandrowice', # nowa nazwa # 'b3388' => 'Aleksandrowice Centrum', - 'b3388' => 'Aleksandrowice Centrum', - 'b236' => 'Aleksandrowice Osiedle (nż)', - 'b3150' => 'Aleksandrowicza (nż)', - 'b1122' => 'Aleksandry', - 'b437' => 'Architektów', - 'b3337' => 'Archiwum UMK (nż)', - 'b403' => 'Arka', - 'b2533' => 'Armii Krajowej', - 'b54' => 'Azory', - 'b145' => 'Baba Jaga (nż)', - 'b767' => 'Babińskiego', - 'b1083' => 'Baczyńskiego (nż)', - 'b2565' => 'Bagienna', - 'b2865' => 'Bagry', - 'b221' => 'Balice Autostrada (nż)', - 'b2635' => 'Balice Grzybów (nż)', - 'b226' => 'Balice I (nż)', -# 'b223' => 'Balice Instytut (nż)', # nowa nazwa # 'b3385' => 'Balice Instytut Zootechniki (nż)', - 'b3385' => 'Balice Instytut Zootechniki (nż)', - 'b2636' => 'Balice Leśna (nż)', - 'b3012' => 'Balice Medweckiego (nż)', -# 'b892' => 'Balice OSP (nż)', # nowa nazwa # 'b3415' => 'Balice Remiza (nż)', - 'b3013' => 'Balice Olszanica Bory', - 'b3415' => 'Balice Remiza (nż)', - 'b222' => 'Balice Szkoła', - 'b2912' => 'Balice Winna Góra (nż)', - 'b2796' => 'Banacha', - 'b541' => 'Bartnicza (nż)', - 'b2551' => 'Barwna (nż)', - 'b703' => 'Barycz (nż)', - 'b2528' => 'Batalionu \'Skała\' AK', - 'b78' => 'Batorego', - 'b2962' => 'Batowice Dłubnia', - 'b352' => 'Batowice Kapliczka', - 'b2959' => 'Batowice Spławy (nż)', - 'b3121' => 'Bazarowa', - 'b578' => 'Bałuckiego (nż)', - 'b2633' => 'Belwederczyków (nż)', - 'b2518' => 'Benedyktowicza (nż)', - 'b923' => 'Beskidzka', - 'b1271' => 'Białoprądnicka', - 'b130' => 'Białucha', - 'b973' => 'Biały Kościół (nż)', - 'b330' => 'Bibice (nż)', - 'b2783' => 'Bibice Cmentarz (nż)', - 'b2960' => 'Bibice Kościuszki', - 'b3361' => 'Bibice Mokra', -# 'b2995' => 'Bibice Na Czekaj', # nowa nazwa # 'b3361' => 'Bibice Mokra', - 'b2961' => 'Bibice Rynek', - 'b260' => 'Bielany', - 'b262' => 'Bielany Klasztor (nż)', - 'b3102' => 'Bielany Obwodnica (nż)', - 'b261' => 'Bielany Szkoła', - 'b265' => 'Bielańska (nż)', - 'b272' => 'Bielańskie Skały (nż)', - 'b867' => 'Bieńczycka', - 'b630' => 'Bieżanowska', - 'b667' => 'Bieżanów', - 'b3183' => 'Bieżanów Drożdżownia SKA', - 'b2725' => 'Bieżanów Granica Miasta', - 'b672' => 'Bieżanów Kaim', - 'b665' => 'Bieżanów Pomnik', - 'b670' => 'Bieżanów Potrzask', - 'b663' => 'Bieżanów Szkoła', - 'b662' => 'Bieżanów Trafo', # nieczynny - remont ul. Bieżanowskiej - 'b84' => 'Biprostal', - 'b122' => 'Biskupa Prandoty', -# 'b3244' => 'Biskupia', # tymczasowy - przebudowa linii do Bronowic - 'b3220' => 'Biskupice I (nż)', - 'b3221' => 'Biskupice II (nż)', - 'b2574' => 'Biskupińska (nż)', - 'b461' => 'Blokowa (nż)', - 'b2597' => 'Bochenka (nż)', - 'b34' => 'Bociana', - 'b3381' => 'Bodzów', - 'b592' => 'Bogucianka', - 'b1258' => 'Bojki', -# 'b208' => 'Bolechowice', # nowa nazwa # 'b3413' => 'Bolechowice Centrum', - 'b3413' => 'Bolechowice Centrum', - 'b2917' => 'Bolechowice Drogi (nż)', - 'b2916' => 'Bolechowice Krzewiny (nż)', - 'b2915' => 'Bolechowice Zielona (nż)', - 'b2920' => 'Bolechowice Zielona Mała (nż)', - 'b2561' => 'Bolesława Śmiałego', - 'b3210' => 'Boleń Pętla', - 'b1255' => 'Bonarka', - 'b810' => 'Bora-Komorowskiego', - 'b747' => 'Borek Fałęcki', - 'b1118' => 'Borek Szlachecki I (nż)', - 'b1117' => 'Borek Szlachecki II (nż)', - 'b753' => 'Borkowska', - 'b612' => 'Borsucza', - 'b2532' => 'Bosaków', -# 'b1071' => 'Bosutów Dziekanowice (nż)', # nowa nazwa # 'b3442' => 'Węgrzce B1 (nż)', - 'b2769' => 'Bosutów Krakowska (nż)', - 'b3211' => 'Bosutów Remiza', - 'b453' => 'Brama nr 5 (nż)', - 'b530' => 'Branice (nż)', - 'b513' => 'Branice Na Dole (nż)', - 'b2652' => 'Branice Ośrodek Zdrowia (nż)', - 'b512' => 'Branice Pagórek (nż)', - 'b531' => 'Branice Szkoła', - 'b61' => 'Bratysławska', - 'b1165' => 'Brodowicza', - 'b123' => 'Brogi', - 'b89' => 'Bronowice', - 'b135' => 'Bronowice Małe', - 'b136' => 'Bronowice Wiadukt', - 'b19' => 'Bronowice Wielkie', -# 'b638' => 'Brzegi', # nowa nazwa # 'b3311' => 'Brzegi Pętla', - 'b639' => 'Brzegi I', - 'b1294' => 'Brzegi III (nż)', - 'b3311' => 'Brzegi Pętla', - 'b3340' => 'Brzegi Użytek Ekologiczny (nż)', - 'b2648' => 'Brzeska (nż)', - 'b1016' => 'Brzezie Działki (nż)', - 'b3209' => 'Brzezie Kluczwody (nż)', - 'b3049' => 'Brzezie Kościół (nż)', - 'b1048' => 'Brzezie Kulka (nż)', - 'b1021' => 'Brzezie Narodowe (nż)', -# 'b1028' => 'Brzezinka', # nowa nazwa # 'b3417' => 'Brzezinka Kościół', - 'b3417' => 'Brzezinka Kościół', - 'b3329' => 'Brzezinka Kuźnia (nż)', - 'b1029' => 'Brzezinka Skrzyżowanie', - 'b1027' => 'Brzezinka Zarzecze (nż)', -# 'b1106' => 'Brzeźnica', # nowa nazwa # 'b3328' => 'Brzeźnica Dworzec', - 'b3328' => 'Brzeźnica Dworzec', -# 'b1109' => 'Brzeźnica Kuźnia (nż)', # nowa nazwa # 'b3329' => 'Brzezinka Kuźnia (nż)', - 'b1108' => 'Brzeźnica Pasieka (nż)', - 'b2695' => 'Brzoskwinia Góra (nż)', - 'b240' => 'Brzoskwinia Kamyk (nż)', - 'b238' => 'Brzoskwinia Koziary (nż)', - 'b3201' => 'Brzoskwinia Pętla', - 'b239' => 'Brzoskwinia Sklep', - 'b3271' => 'Brzozówka Oskarówka', - 'b3272' => 'Brzozówka Ośrodek', - 'b2708' => 'Brzyczyna', - 'b765' => 'Brücknera', - 'b2780' => 'Budzyń Plaża Główna (nż)', - 'b2781' => 'Budzyń Zalew Budzyński (nż)', - 'b2779' => 'Budzyń Zalew na Piaskach (nż)', - 'b743' => 'Bujaka', -# 'b881' => 'Buków', # nowa nazwa # 'b3323' => 'Buków Pętla', - 'b882' => 'Buków Klin (nż)', - 'b3323' => 'Buków Pętla', - 'b883' => 'Buków Szkoła (nż)', - 'b432' => 'Bulwarowa (nż)', - 'b2603' => 'Bulwarowa Ogródki Działkowe (nż)', - 'b1346' => 'Bunscha (nż)', -# 'b2914' => 'Burów (nż)', # nowa nazwa # 'b3414' => 'Burów Balica (nż)', - 'b3414' => 'Burów Balica (nż)', - 'b2913' => 'Burów Centrum', - 'b2627' => 'Bystronia (nż)', - 'b978' => 'Bębło Lasek (nż)', - 'b976' => 'Bębło Stara Wieś (nż)', - 'b977' => 'Bębło Łabajowa (nż)', - 'b982' => 'Będkowice', - 'b981' => 'Będkowice Borynia (nż)', - 'b3007' => 'Będkowice Cmentarz (nż)', - 'b2869' => 'Będkowice Długa (nż)', - 'b980' => 'Będkowice Kawiory (nż)', - 'b979' => 'Będkowice Mosurowa (nż)', - 'b2700' => 'Będkowice Pętla', - 'b505' => 'Błonia Kościelnickie (nż)', - 'b2595' => 'Cechowa (nż)', - 'b385' => 'Cedyńska', - 'b409' => 'Centralna', - 'b2453' => 'Centrum JP II', -# 'b3039' => 'Centrum Kongresowe ICE', # nowa nazwa # 'b3338' => 'Rondo Grunwaldzkie', - 'b40' => 'Chabrowa', - 'b728' => 'Chałubińskiego (nż)', - 'b525' => 'Chałupki', - 'b2651' => 'Chałupki Górne (nż)', - 'b151' => 'Chełm', - 'b3073' => 'Chełmońskiego Osiedle', - 'b3072' => 'Chełmońskiego Pętla', - 'b152' => 'Chełmska (nż)', - 'b2691' => 'Chmieleniec', - 'b1274' => 'Chobot (nż)', - 'b1288' => 'Chobot Leśniczówka', -# 'b254' => 'Cholerzyn (nż)', # nowa nazwa # 'b3298' => 'Cholerzyn Skwer (nż)', - 'b3056' => 'Cholerzyn Granica (nż)', - 'b253' => 'Cholerzyn Sklep (nż)', - 'b252' => 'Cholerzyn Skrzyżowanie (nż)', - 'b3298' => 'Cholerzyn Skwer (nż)', - 'b3055' => 'Cholerzyn Zagórze (nż)', - 'b2878' => 'Chopina', -# 'b886' => 'Chorowice', # nowa nazwa # 'b3324' => 'Chorowice Pętla', - 'b3324' => 'Chorowice Pętla', - 'b230' => 'Chrosna Kapliczka (nż)', - 'b2911' => 'Chrosna Pętla', - 'b229' => 'Chrosna Sklep (nż)', - 'b228' => 'Chrosna Studnia (nż)', - 'b87' => 'Cichy Kącik', - 'b2653' => 'Ciekowiec (nż)', - 'b3037' => 'Cienista', - 'b36' => 'Clepardia', - 'b897' => 'Cmentarz Batowice', - 'b2699' => 'Cmentarz Batowice Wschód (nż)', - 'b3137' => 'Cmentarz Bielany (nż)', - 'b3126' => 'Cmentarz Bieżanów', - 'b3139' => 'Cmentarz Borek Fałęcki (nż)', - 'b3108' => 'Cmentarz Bronowice (nż)', - 'b448' => 'Cmentarz Grębałów', - 'b2989' => 'Cmentarz Grębałów Południe (nż)', - 'b3034' => 'Cmentarz Olszanica (nż)', - 'b621' => 'Cmentarz Podgórski', - 'b2992' => 'Cmentarz Prokocim', # nieczynny - remont ul. Bieżanowskiej - 'b124' => 'Cmentarz Rakowicki', - 'b2531' => 'Cmentarz Rakowicki Zachód (nż)', - 'b3120' => 'Cmentarz Ruszcza (nż)', - 'b3133' => 'Cmentarz Wróblowice', - 'b822' => 'Conrada', - 'b2500' => 'Cracovia Błonia', - 'b2501' => 'Cracovia Stadion', - 'b129' => 'Cystersów', - 'b975' => 'Czajowice (nż)', - 'b1159' => 'Czarnochowice I (nż)', - 'b81' => 'Czarnowiejska', - 'b1226' => 'Czernichów Bór (nż)', -# 'b1204' => 'Czernichów GS (nż)', # nowa nazwa # 'b3402' => 'Czernichów Studzienki (nż)', -# 'b3224' => 'Czernichów Pętla', # nowa nazwa # 'b3394' => 'Czernichów Rynek', - 'b2892' => 'Czernichów Ratanice (nż)', - 'b2891' => 'Czernichów Ratanice Most (nż)', - 'b3394' => 'Czernichów Rynek', - 'b1203' => 'Czernichów Stacja Paliw (nż)', - 'b3402' => 'Czernichów Studzienki (nż)', - 'b2890' => 'Czernichów Zakamycze (nż)', - 'b920' => 'Czerwiakowskiego', - 'b1063' => 'Czerwieńskiego', - 'b3038' => 'Czerwone Maki P+R', -# 'b878' => 'Czulice', # nowa nazwa # 'b3283' => 'Czulice Kościół', -# 'b496' => 'Czulice I (nż)', # nowa nazwa # 'b3280' => 'Czulice Przymiarki (nż)', - 'b3283' => 'Czulice Kościół', - 'b3280' => 'Czulice Przymiarki (nż)', -# 'b2881' => 'Czułów (nż)', # nowa nazwa # 'b3295' => 'Czułów Granica (nż)', -# 'b2880' => 'Czułów Droga na Czułówek (nż)', # nowa nazwa # 'b3294' => 'Czułów Sklep (nż)', - 'b3295' => 'Czułów Granica (nż)', - 'b3294' => 'Czułów Sklep (nż)', - 'b2879' => 'Czułów Szkoła', - 'b1215' => 'Czułówek (nż)', - 'b1365' => 'Czułówek Kapliczka', - 'b407' => 'Czyżyny', - 'b965' => 'Czyżyny Dworzec', - 'b522' => 'Cło', - 'b392' => 'DH Wanda', - 'b3122' => 'Danalówka (nż)', - 'b435' => 'Darwina', - 'b632' => 'Dauna', - 'b3113' => 'Dobrego Pasterza', - 'b3370' => 'Dobry Początek (nż)', # tymczasowy - przebudowa ul. Wrobela - 'b474' => 'Dojazdów Działki (nż)', - 'b475' => 'Dojazdów PKS', -# 'b686' => 'Dom Spokojnej Starości', # nowa nazwa # 'b3384' => 'Miejskie Centrum Opieki', - 'b646' => 'Domagały (nż)', - 'b3412' => 'Domagały Magazyny (nż)', - 'b31' => 'Dożynkowa', - 'b216' => 'Droga do Niegoszowic (nż)', - 'b192' => 'Droga do Rząski (nż)', - 'b2614' => 'Drożdżowa', - 'b518' => 'Drożyska (nż)', - 'b2590' => 'Drużbackiej', - 'b2922' => 'Dubie Skrzyżowanie (nż)', - 'b388' => 'Dunikowskiego', - 'b3125' => 'Duża Góra (nż)', - 'b623' => 'Dworcowa', - 'b1060' => 'Dworzec Główny Wschód', - 'b2608' => 'Dworzec Główny Zachód', - 'b836' => 'Dwór Czeczów', - 'b2657' => 'Dymarek (nż)', - 'b3193' => 'Dziekanowice Batowice SKA', - 'b3165' => 'Dziekanowice Długa (nż)', - 'b3166' => 'Dziekanowice Kapliczka', - 'b3194' => 'Dziekanowicka (nż)', - 'b370' => 'Dąbie', - 'b600' => 'Dąbrowa', -# 'b1202' => 'Dąbrowa Szlachecka (nż)', # nowa nazwa # 'b3401' => 'Wołowice Skrzyżowanie (nż)', - 'b907' => 'Dąbrowa Szlachecka Figurka (nż)', - 'b1237' => 'Dąbrowa Szlachecka Krzemiennik', - 'b910' => 'Dąbrowa Szlachecka Krzyż (nż)', - 'b3117' => 'Dąbrowskiej', - 'b838' => 'EC Łęg', - 'b374' => 'Elektrociepłownia Kraków', - 'b464' => 'Elektromontaż (nż)', - 'b3116' => 'Fatimska (nż)', - 'b322' => 'Filharmonia', - 'b1375' => 'Fiszera', - 'b2566' => 'Fort Bodzów (nż)', - 'b1051' => 'Fort Mogiła (nż)', - 'b2587' => 'Fort Swoszowice (nż)', - 'b1371' => 'Fort Winnica (nż)', - 'b754' => 'Forteczna', - 'b367' => 'Francesco Nullo', - 'b617' => 'Fredry', - 'b2615' => 'Gaik (nż)', - 'b2856' => 'Gaj Kwiatowa (nż)', - 'b2857' => 'Gaj Rudawa (nż)', - 'b790' => 'Gaj Szkoła', - 'b791' => 'Gaj Zadziele', - 'b2858' => 'Gaj Zgody (nż)', -# 'b174' => 'Garlica Duchowna (nż)', # nowa nazwa # 'b3344' => 'Garlica Duchowna Kapliczka (nż)', -# 'b2957' => 'Garlica Duchowna Droga do Garliczki', # nowa nazwa # 'b2628' => 'Garlica Duchowna Rozjazd', - 'b3344' => 'Garlica Duchowna Kapliczka (nż)', - 'b2628' => 'Garlica Duchowna Rozjazd', -# 'b175' => 'Garlica Murowana', # nowa nazwa # 'b3345' => 'Garlica Murowana Plac Zabaw', - 'b2770' => 'Garlica Murowana Kasztany (nż)', - 'b3345' => 'Garlica Murowana Plac Zabaw', -# 'b2958' => 'Garlica Murowana Podskale (nż)', # nowa nazwa # 'b3358' => 'Zielonki Jaskinia Zielonkowska (nż)', - 'b2629' => 'Garliczka Chochół (nż)', - 'b2588' => 'Geologów (nż)', - 'b1172' => 'Giebułtów', - 'b1177' => 'Giebułtów Morgi', - 'b1176' => 'Giebułtów Plac Zabaw (nż)', - 'b2877' => 'Giebułtów Trojadyn (nż)', - 'b2876' => 'Giebułtów Trojadyn Trafo (nż)', - 'b1352' => 'Giebułtów Zbiornik (nż)', - 'b3174' => 'Giedroycia (nż)', - 'b3178' => 'Giedroycia ZTPO (nż)', - 'b2766' => 'Giełda Balicka P+R (nż)', - 'b276' => 'Glinnik (nż)', - 'b2751' => 'Glogera (nż)', - 'b2752' => 'Glogera Granica Miasta (nż)', - 'b2993' => 'Gnieźnieńska (nż)', - 'b2909' => 'Godlewskiego', - 'b3059' => 'Golkowice Kościół', - 'b3146' => 'Golkowice Pętla', - 'b3144' => 'Golkowice Sklep', - 'b22' => 'Gospodarska', -# 'b2760' => 'Goszcza', # nowa nazwa # 'b3289' => 'Goszcza Dworek', - 'b2763' => 'Goszcza Cmentarz (nż)', - 'b3289' => 'Goszcza Dworek', -# 'b955' => 'Goszyce (nż)', # nowa nazwa # 'b3291' => 'Goszyce Pod Lasem (nż)', - 'b3291' => 'Goszyce Pod Lasem (nż)', - 'b954' => 'Goszyce Remiza (nż)', - 'b1090' => 'Gołuchowice', - 'b1091' => 'Gołuchowice Jurczyce', - 'b1092' => 'Gołuchowice Sklep (nż)', -# 'b2493' => 'Grabie', # nowa nazwa # 'b3333' => 'Grabie Pętla', - 'b1293' => 'Grabie Dom Kultury (nż)', - 'b1295' => 'Grabie Kościół', - 'b2492' => 'Grabie Kuźnia (nż)', - 'b1094' => 'Grabie Polanka (nż)', - 'b3333' => 'Grabie Pętla', - 'b1292' => 'Grabie Szczurów (nż)', - 'b3339' => 'Grabowa', - 'b3145' => 'Grabówki Pętla', - 'b560' => 'Gromadzka', - 'b2687' => 'Grota-Roweckiego', - 'b76' => 'Grottgera', - 'b3186' => 'Grzegorza z Sanoka (nż)', - 'b443' => 'Grębałów (nż)', - 'b2974' => 'Grębynice (nż)', - 'b1150' => 'Grębynice Mogiełki (nż)', - 'b2973' => 'Grębynice OSP (nż)', - 'b455' => 'Gwarecka (nż)', - 'b749' => 'Góra Borkowska (nż)', - 'b35' => 'Górka Narodowa', - 'b2797' => 'Górka Narodowa Wschód', - 'b2567' => 'Górka Pychowicka (nż)', -# 'b170' => 'Górna Wieś', # nowa nazwa # 'b3342' => 'Górna Wieś Pętla', - 'b3342' => 'Górna Wieś Pętla', - 'b1049' => 'Głowackiego', -# 'b876' => 'Głęboka', # nowa nazwa # 'b3281' => 'Głęboka Staw', - 'b2996' => 'Głęboka Kolonia (nż)', - 'b3281' => 'Głęboka Staw', - 'b3046' => 'Głęboka Zakręt (nż)', - 'b552' => 'Habina (nż)', - 'b2991' => 'Hala Sportowa Piaski Wielkie (nż)', - 'b363' => 'Hala Targowa', - 'b2583' => 'Hallera (nż)', - 'b741' => 'Halszki', - 'b2642' => 'Hektary (nż)', - 'b931' => 'Herberta (nż)', - 'b315' => 'Hofmana', - 'b3157' => 'Husarska (nż)', # nieczynny - przebudowa ul. Wrobela - 'b510' => 'Igołomska (nż)', - 'b38' => 'Imbramowska', -# 'b685' => 'Instytut Pediatrii', # nowa nazwa # 'b3383' => 'Szpital Uniwersytecki / Instytut Pediatrii', - 'b317' => 'Instytut Reumatologii', - 'b840' => 'Isep (nż)', -# 'b933' => 'Iwanowice', # nowa nazwa # 'b3353' => 'Iwanowice Dworskie Pętla', - 'b3353' => 'Iwanowice Dworskie Pętla', -# 'b3243' => 'Jadwigi z Łobzowa', # tymczasowy - przebudowa linii do Bronowic - 'b2626' => 'Jana Kazimierza', - 'b1062' => 'Janasówka (nż)', - 'b185' => 'Januszowice', - 'b506' => 'Janówka (nż)', - 'b668' => 'Jasieńskiego (nż)', - 'b832' => 'Jasnogórska (nż)', - 'b1110' => 'Jaśkowice (nż)', - 'b1111' => 'Jaśkowice PKP (nż)', - 'b2586' => 'Jerzmanowskiego', - 'b3228' => 'Jeziorzany Górskie Domy (nż)', - 'b2904' => 'Jeziorzany Pętla', - 'b2903' => 'Jeziorzany Rondo (nż)', - 'b655' => 'Jeżowa', - 'b2617' => 'Jordanowska (nż)', - 'b319' => 'Jubilat', - 'b758' => 'Judyma', - 'b2792' => 'Judyma Szkoła', - 'b742' => 'Jugowicka', - 'b3190' => 'Jurczaka (nż)', - 'b2488' => 'Jurczyce Dom Ludowy', - 'b2490' => 'Jurczyce Podole (nż)', - 'b2489' => 'Jurczyce Szkoła (nż)', - 'b3234' => 'Jędrzejczyka (nż)', - 'b624' => 'Kabel', -# 'b1222' => 'Kamień Dół (nż)', # nowa nazwa # 'b3404' => 'Kamień Remiza (nż)', - 'b3404' => 'Kamień Remiza (nż)', - 'b3279' => 'Kamień Szkoła', - 'b620' => 'Kamieńskiego', - 'b619' => 'Kamieńskiego Wiadukt (nż)', - 'b2690' => 'Kampus UJ', - 'b445' => 'Kantorowice', - 'b576' => 'Kapelanka', - 'b3206' => 'Karniowice Górki (nż)', - 'b3205' => 'Karniowice Pętla', -# 'b877' => 'Karniów', # nowa nazwa # 'b3282' => 'Karniów Szkoła', - 'b3282' => 'Karniów Szkoła', - 'b546' => 'Karowa (nż)', - 'b717' => 'Karpińskiego', - 'b147' => 'Kasztanowa', - 'b283' => 'Kaszów', - 'b282' => 'Kaszów II (nż)', - 'b3303' => 'Kaszów Szkoła nr 2 (nż)', - 'b284' => 'Kaszów Tyrałówka (nż)', - 'b3304' => 'Kaszów Wielka Droga (nż)', - 'b2886' => 'Kaszów Wyźrał (nż)', - 'b285' => 'Kaszów Łysa Góra (nż)', - 'b13' => 'Katowicka', - 'b82' => 'Kawiory', - 'b945' => 'Kenara (nż)', - 'b427' => 'Klasztor Cystersów', - 'b429' => 'Klasztorna', - 'b382' => 'Kleeberga', -# 'b1054' => 'Kleszczów', # nowa nazwa # 'b3423' => 'Kleszczów Centrum', - 'b3423' => 'Kleszczów Centrum', - 'b2864' => 'Kleszczów Pod Lipką (nż)', - 'b946' => 'Klimeckiego', - 'b935' => 'Kliny Zacisze', - 'b768' => 'Kobierzyn', - 'b584' => 'Kobierzyńska', - 'b3207' => 'Kobylany Dworska (nż)', - 'b3204' => 'Kobylany Kwiatowa', - 'b1065' => 'Kobylany Remiza (nż)', - 'b215' => 'Kochanów', - 'b214' => 'Kochanów I (nż)', -# 'b3042' => 'Kocmyrzów', # nowa nazwa # 'b3292' => 'Kocmyrzów-Luborzyca Urząd Gminy', - 'b3001' => 'Kocmyrzów Biblioteka', - 'b1257' => 'Kocmyrzów Krzyżówka (nż)', - 'b3000' => 'Kocmyrzów Rondo', - 'b3005' => 'Kocmyrzów Sodfiny (nż)', - 'b3292' => 'Kocmyrzów-Luborzyca Urząd Gminy', - 'b1158' => 'Kokotów I (nż)', - 'b1162' => 'Kokotów II (nż)', - 'b457' => 'Koksochemia (nż)', - 'b2563' => 'Kolna (nż)', - 'b459' => 'Kombinat', - 'b313' => 'Komorowskiego', - 'b830' => 'Komuny Paryskiej', -# 'b799' => 'Konary', # nowa nazwa # 'b3364' => 'Konary Pętla', - 'b3312' => 'Konary Królowej Polski (nż)', - 'b3052' => 'Konary Pod Sosenką (nż)', - 'b3364' => 'Konary Pętla', - 'b1347' => 'Konary Sęk (nż)', -# 'b805' => 'Konary Włosań (nż)', # nowa nazwa # 'b3312' => 'Konary Królowej Polski (nż)', - 'b326' => 'Konopnickiej', - 'b148' => 'Kopalina (nż)', - 'b2932' => 'Kopanka Druga (nż)', - 'b2484' => 'Kopanka Kapliczka (nż)', - 'b2813' => 'Kopanka Kościół (nż)', - 'b3451' => 'Kopanka Ofiar Katynia', - 'b2931' => 'Kopanka Pętla', - 'b2485' => 'Kopanka Szkoła', - 'b242' => 'Kopiec Kościuszki', - 'b571' => 'Korona', - 'b2970' => 'Korzkiew Botoja (nż)', - 'b2971' => 'Korzkiew Zamek (nż)', - 'b156' => 'Kosmowskiej (nż)', - 'b706' => 'Kosocice', - 'b2585' => 'Kosocicka (nż)', - 'b601' => 'Kostrze', - 'b597' => 'Kostrze Kapliczka (nż)', - 'b599' => 'Kostrze OSP', - 'b605' => 'Kostrze Szkoła', - 'b2559' => 'Koszykarska', - 'b3063' => 'Kozienicka', -# 'b342' => 'Kozierów Skrzyżowanie (nż)', # nowa nazwa # 'b3348' => 'Narama Graniczna Sklep (nż)', - 'b1139' => 'Kończyce', - 'b2644' => 'Kościelniki', - 'b2861' => 'Kraków Airport', -# 'b2975' => 'Krasieniec Pod Lipą', # nowa nazwa # 'b3359' => 'Krasieniec Zakupny Pod Lipą', -# 'b346' => 'Krasieniec Remiza (nż)', # nowa nazwa # 'b3352' => 'Krasieniec Zakupny Remiza (nż)', -# 'b345' => 'Krasieniec Stary (nż)', # nowa nazwa # 'b3351' => 'Krasieniec Stary Kopalina (nż)', - 'b3351' => 'Krasieniec Stary Kopalina (nż)', - 'b3350' => 'Krasieniec Stary Skrzyżowanie (nż)', -# 'b934' => 'Krasieniec Zakupny', # nowa nazwa # 'b3354' => 'Krasieniec Zakupny Kapliczka', - 'b3354' => 'Krasieniec Zakupny Kapliczka', - 'b3359' => 'Krasieniec Zakupny Pod Lipą', - 'b3352' => 'Krasieniec Zakupny Remiza (nż)', - 'b998' => 'Krasnowolskiego (nż)', - 'b62' => 'Krowoderskich Zuchów', - 'b63' => 'Krowodrza Górka', - 'b2601' => 'Krowodrza Urzędy Skarbowe', - 'b381' => 'Kruszwicka', - 'b258' => 'Kryspinów', - 'b257' => 'Kryspinów Sanka (nż)', -# 'b2895' => 'Kryspinów Stopień Wodny (nż)', # nowa nazwa # 'b3371' => 'Kryspinów Stopień Wodny (nż)', - 'b3371' => 'Kryspinów Stopień Wodny (nż)', - 'b702' => 'Krzemieniecka (nż)', - 'b3250' => 'Krzeszowice Dworzec Autobusowy', - 'b2923' => 'Krzeszowice Krakowska Muzeum (nż)', - 'b1044' => 'Krzeszowice Witaminka (nż)', - 'b3134' => 'Krzesławice Młyn (nż)', - 'b1192' => 'Krzyszkowice Kasztanowa I (nż)', - 'b1193' => 'Krzyszkowice Kasztanowa II (nż)', - 'b1191' => 'Krzyszkowice Kościół (nż)', - 'b2817' => 'Krzyszkowice Krzyszkowicka', - 'b1194' => 'Krzyszkowice Modrzewiowa (nż)', - 'b2740' => 'Krzyszkowice Os.Szymanowskiego (nż)', - 'b1195' => 'Krzyszkowice Różana (nż)', - 'b1248' => 'Krzysztoforzyce Góra (nż)', - 'b3230' => 'Krzysztoforzyce Pętla', - 'b3043' => 'Krzysztoforzyce Sklep (nż)', - 'b1256' => 'Krzysztoforzyce przy Dworze (nż)', - 'b1169' => 'Krzęcin Cmentarz (nż)', -# 'b1357' => 'Krzęcin Częsna (nż)', # nowa nazwa # 'b3332' => 'Krzęcin Szczęsna (nż)', - 'b1098' => 'Krzęcin Kapliczka (nż)', - 'b1096' => 'Krzęcin Kościół', - 'b2928' => 'Krzęcin Pętla', - 'b1095' => 'Krzęcin Sklep', - 'b3332' => 'Krzęcin Szczęsna (nż)', - 'b1099' => 'Krzęcin Szkoła', -# 'b150' => 'Królowej Jadwigi', # nowa nazwa # 'b3339' => 'Grabowa', - 'b2739' => 'Ks.Targosza (nż)', - 'b675' => 'Ks.Łaczka (nż)', -# 'b1140' => 'Książniczki Boisko (nż)', # nowa nazwa # 'b3377' => 'Książniczki Paszczykówka (nż)', - 'b1142' => 'Książniczki Centrum', - 'b1143' => 'Książniczki Las (nż)', - 'b3377' => 'Książniczki Paszczykówka (nż)', - 'b544' => 'Kujawy', - 'b567' => 'Kuklińskiego', - 'b884' => 'Kulerzów (nż)', - 'b885' => 'Kulerzów Wąwóz (nż)', - 'b387' => 'Kupały', - 'b3176' => 'Kurdwanów P+R', - 'b709' => 'Kurdwanów Szkoła', - 'b3136' => 'Kurzei', - 'b98' => 'Kuźnicy Kołłątajowskiej', - 'b527' => 'Kąkolowa (nż)', - 'b759' => 'Kąpielowa (nż)', - 'b3180' => 'Kępa (nż)', -# 'b1220' => 'Kłokoczyn (nż)', # nowa nazwa # 'b3306' => 'Kłokoczyn Szkoła (nż)', - 'b3309' => 'Kłokoczyn Machaczki (nż)', - 'b3306' => 'Kłokoczyn Szkoła (nż)', - 'b3074' => 'Kłuszyńska', - 'b140' => 'Lajkonika (nż)', - 'b694' => 'Landaua', - 'b750' => 'Las Borkowski', - 'b2557' => 'Lasek Mogilski', - 'b2790' => 'Lasek Łęgowski (nż)', -# 'b337' => 'Laskowiec (nż)', # nowa nazwa # 'b3346' => 'Michałowice Laskowiec (nż)', - 'b3217' => 'Lednica Górna (nż)', - 'b3216' => 'Lednica Górna Chorągwica (nż)', - 'b65' => 'Lekarska', - 'b554' => 'Lesisko', - 'b3363' => 'Leszczynowa (nż)', - 'b2619' => 'Leszka Białego', - 'b157' => 'Leśmiana', - 'b3071' => 'Libertowska (nż)', - 'b2706' => 'Libertów', - 'b2638' => 'Libertów Dolny (nż)', - 'b2925' => 'Libertów Droga do Sidziny (nż)', - 'b2711' => 'Libertów Działy (nż)', - 'b2710' => 'Libertów Krzyżówka', - 'b2707' => 'Libertów Szkoła', - 'b2772' => 'Libertów Zgodna (nż)', - 'b3373' => 'Libertów Świetlista', - 'b2524' => 'Lindego (nż)', - 'b2686' => 'Lipińskiego', - 'b837' => 'Lipowskiego (nż)', - 'b561' => 'Lipska', - 'b289' => 'Liszki I (nż)', - 'b286' => 'Liszki Krzyżówka', - 'b2899' => 'Liszki Tyniecka (nż)', - 'b287' => 'Liszki UG', - 'b2887' => 'Liszki Wołowska Droga (nż)', - 'b126' => 'Lubicz', - 'b94' => 'Lublańska', - 'b468' => 'Lubocza Bugaj (nż)', - 'b467' => 'Lubocza PKP (nż)', - 'b469' => 'Lubocza Przychodnia', - 'b470' => 'Lubocza Szkoła', - 'b471' => 'Lubocza Trafo (nż)', - 'b472' => 'Luborzyca', - 'b3002' => 'Luborzyca Szkoła', - 'b937' => 'Lubostroń (nż)', - 'b2808' => 'Ludwinów', -# 'b2905' => 'Lusina (nż)', # nowa nazwa # 'b3326' => 'Lusina Krakowska (nż)', - 'b2936' => 'Lusina Dobrzyczany (nż)', - 'b722' => 'Lusina Dolna (nż)', - 'b1003' => 'Lusina Dwór', -# 'b2637' => 'Lusina Granica', # nowa nazwa # 'b3373' => 'Libertów Świetlista', - 'b801' => 'Lusina Górka (nż)', - 'b3326' => 'Lusina Krakowska (nż)', - 'b3301' => 'Lusina Krakówka (nż)', -# 'b3184' => 'Lusina Krakówkaa (nż)', # błąd # 'b3301' => 'Lusina Krakówka (nż)', - 'b2937' => 'Lusina Kraśnik (nż)', - 'b1000' => 'Lusina Pętla', - 'b1002' => 'Lusina Spacerowa', - 'b1001' => 'Lusina Szkoła', - 'b2938' => 'Lusina Zagrody (nż)', - 'b2935' => 'Lusina Zielona', - 'b1196' => 'Lusina Łany (nż)', - 'b930' => 'M1 Al. Pokoju', - 'b2736' => 'M1 Nowohucka', - 'b1269' => 'Maciejowice Góra (nż)', - 'b3159' => 'Maciejowice Pętla', - 'b3168' => 'Maciejowice Skrzyżowanie (nż)', - 'b37' => 'Mackiewicza', - 'b3123' => 'Magazynowa (nż)', - 'b96' => 'Majora', - 'b626' => 'Makowa', - 'b56' => 'Makowskiego', - 'b2542' => 'Makuszyńskiego (nż)', - 'b625' => 'Malborska', - 'b880' => 'Malborska Szkoła', - 'b310' => 'Malczewskiego (nż)', - 'b2589' => 'Malinowskiego (nż)', - 'b1130' => 'Marchołta', - 'b3004' => 'Marszowice (nż)', - 'b3003' => 'Marszowice Centrum (nż)', - 'b1319' => 'Marszowice Góry (nż)', - 'b2983' => 'Maszyce (nż)', - 'b1174' => 'Maszyce Remiza (nż)', - 'b1152' => 'Maszyce Skrzyżowanie (nż)', -# 'b2982' => 'Masłomiąca (nż)', # nowa nazwa # 'b3378' => 'Masłomiąca Długa (nż)', - 'b3378' => 'Masłomiąca Długa (nż)', - 'b3374' => 'Masłomiąca Koźlica (nż)', - 'b2981' => 'Masłomiąca Staw (nż)', - 'b90' => 'Mazowiecka', - 'b941' => 'Mała Góra (nż)', - 'b2496' => 'Mała Wieś (nż)', -# 'b1263' => 'Mały Płaszów', # nowa nazwa # 'b3310' => 'Mały Płaszów P+R', - 'b3310' => 'Mały Płaszów P+R', - 'b406' => 'Medweckiego', - 'b3109' => 'Mehoffera', - 'b995' => 'Meissnera', - 'b3130' => 'Merkuriusza Polskiego', - 'b85' => 'Miasteczko Studenckie AGH', - 'b331' => 'Michałowice (nż)', - 'b1058' => 'Michałowice Banasiówka (nż)', - 'b2967' => 'Michałowice Brzozowa (nż)', - 'b2963' => 'Michałowice Gościniec (nż)', - 'b2964' => 'Michałowice Górna (nż)', - 'b333' => 'Michałowice I', - 'b336' => 'Michałowice II (nż)', - 'b3355' => 'Michałowice Jana Pawła II (nż)', - 'b332' => 'Michałowice Komora (nż)', -# 'b905' => 'Michałowice Koźlica (nż)', # nowa nazwa # 'b3374' => 'Masłomiąca Koźlica (nż)', - 'b2506' => 'Michałowice Kwiaty Polne (nż)', - 'b3356' => 'Michałowice Las Michałowski', -# 'b2507' => 'Michałowice Las Michałowski (nż)', # nowa nazwa # 'b3355' => 'Michałowice Jana Pawła II (nż)', - 'b3346' => 'Michałowice Laskowiec (nż)', - 'b335' => 'Michałowice Lecznica (nż)', - 'b2965' => 'Michałowice Michałówka (nż)', - 'b1145' => 'Michałowice Ogrodowa (nż)', - 'b2729' => 'Michałowice Ośrodek Zdrowia', - 'b1055' => 'Michałowice Ujęcie Wody (nż)', - 'b3347' => 'Michałowice Warszawka (nż)', - 'b104' => 'Miechowity', - 'b3384' => 'Miejskie Centrum Opieki', - 'b362' => 'Miodowa', - 'b375' => 'Mistrzejowice', - 'b2538' => 'Miśnieńska', -# 'b2882' => 'Mników Droga do Kaszowa (nż)', # nowa nazwa # 'b3297' => 'Mników Sklep (nż)', - 'b3232' => 'Mników Granica (nż)', - 'b2714' => 'Mników Pańska Góra (nż)', - 'b3296' => 'Mników Remiza (nż)', - 'b2715' => 'Mników Skały', -# 'b248' => 'Mników Sklep (nż)', # nowa nazwa # 'b3296' => 'Mników Remiza (nż)', - 'b3297' => 'Mników Sklep (nż)', - 'b3104' => 'Mników Zarynnie (nż)', - 'b2516' => 'Mobilis', - 'b2694' => 'Mochnaniec (nż)', - 'b986' => 'Modlnica', - 'b968' => 'Modlnica I Kolonia (nż)', - 'b969' => 'Modlnica II (nż)', - 'b985' => 'Modlnica Skrzyżowanie (nż)', - 'b2875' => 'Modlnica Trojadyn Szydło (nż)', - 'b984' => 'Modlniczka', - 'b983' => 'Modlniczka I (nż)', - 'b3251' => 'Modlniczka Leroy Merlin (nż)', - 'b197' => 'Modlniczka Mała', - 'b1353' => 'Modlniczka Poligon (nż)', - 'b1046' => 'Modlniczka Trzcie (nż)', - 'b2499' => 'Mogilany Cicha (nż)', - 'b888' => 'Mogilany Cmentarz (nż)', - 'b2953' => 'Mogilany Kopce (nż)', - 'b3313' => 'Mogilany Krótka (nż)', - 'b793' => 'Mogilany Ośrodek Zdrowia (nż)', - 'b792' => 'Mogilany Rynek', - 'b794' => 'Mogilany Wiadukt (nż)', -# 'b806' => 'Mogilany Włosań (nż)', # nowa nazwa # 'b3313' => 'Mogilany Krótka (nż)', -# 'b233' => 'Morawica', # nowa nazwa # 'b3386' => 'Morawica Centrum', - 'b3386' => 'Morawica Centrum', -# 'b234' => 'Morawica Cmentarz (nż)', # nowa nazwa # 'b3387' => 'Morawica Szkoła (nż)', - 'b232' => 'Morawica Krzyżówka', - 'b231' => 'Morawica Mostek (nż)', - 'b3105' => 'Morawica Rudki (nż)', - 'b3387' => 'Morawica Szkoła (nż)', - 'b3119' => 'Morcinka (nż)', - 'b1239' => 'Most Kotlarski (nż)', - 'b565' => 'Motyla', - 'b460' => 'Mrozowa (nż)', - 'b974' => 'Murownia (nż)', - 'b3060' => 'Murownia Pętla', - 'b1015' => 'Muzeum Armii Krajowej (nż)', - 'b3141' => 'Muzeum Narodowe', - 'b8' => 'Mydlniki', - 'b2525' => 'Mydlniki Granica Miasta (nż)', - 'b9' => 'Mydlniki Stawy (nż)', - 'b740' => 'Myślenicka (nż)', -# 'b3262' => 'Młodej Polski (nż)', # tymczasowy - przebudowa linii do Bronowic - 'b1144' => 'Młodziejowice Młyn (nż)', - 'b1141' => 'Młodziejowice Park', - 'b636' => 'Młodzieży (nż)', # nieczynny - przebudowa ul. Bieżanowskiej - 'b1040' => 'Młynka (nż)', - 'b218' => 'Młynka I (nż)', - 'b1' => 'Młynka Pętla', - 'b2908' => 'Młynówka SKA (nż)', - 'b2616' => 'Na Budzyniu', - 'b273' => 'Na Krępaku (nż)', - 'b550' => 'Na Załęczu', -# 'b549' => 'Na Załęczu Szkoła (nż)', # nowa nazwa # 'b3337' => 'Archiwum UMK (nż)', - 'b645' => 'Nad Drwiną', - 'b2541' => 'Nad Dłubnią', - 'b2656' => 'Nadbrzezie (nż)', - 'b3348' => 'Narama Graniczna Sklep (nż)', - 'b3349' => 'Narama Księża (nż)', - 'b2966' => 'Narama Remiza', - 'b121' => 'Narzymskiego', - 'b2606' => 'Natansona', - 'b1042' => 'Nawojowa Góra I (nż)', - 'b1043' => 'Nawojowa Góra II (nż)', - 'b2775' => 'Nałkowskiej', - 'b2594' => 'Niebieska Autostrada (nż)', - 'b3278' => 'Niebyła (nż)', - 'b1327' => 'Niedźwiedź Felix (nż)', - 'b1326' => 'Niedźwiedź PKP (nż)', -# 'b1187' => 'Nielepice', # nowa nazwa # 'b3424' => 'Nielepice Pętla', - 'b3424' => 'Nielepice Pętla', - 'b1235' => 'Nielepice Stadnina (nż)', - 'b1278' => 'Niepołomice Batorego (nż)', - 'b1279' => 'Niepołomice Batorego II (nż)', - 'b1306' => 'Niepołomice Boryczów (nż)', - 'b1300' => 'Niepołomice Diesla (nż)', - 'b1276' => 'Niepołomice Dworzec', - 'b1289' => 'Niepołomice Jazy (nż)', - 'b1290' => 'Niepołomice Jazy II (nż)', - 'b964' => 'Niepołomice Kolejowa (nż)', - 'b1303' => 'Niepołomice Kościuszki (nż)', - 'b1298' => 'Niepołomice Kątek (nż)', -# 'b1275' => 'Niepołomice Moczydło (nż)', # nowa nazwa # 'b1276' => 'Niepołomice Dworzec', - 'b1297' => 'Niepołomice Pasternik (nż)', - 'b1296' => 'Niepołomice Podgrabie (nż)', - 'b1299' => 'Niepołomice Poręby (nż)', - 'b1302' => 'Niepołomice Płaszowska I (nż)', - 'b1277' => 'Niepołomice Rynek', - 'b1307' => 'Niepołomice Wielicka (nż)', - 'b1301' => 'Niepołomice Wodna (nż)', - 'b2688' => 'Norymberska', -# 'b280' => 'Nowa Wieś (nż)', # nowa nazwa # 'b3392' => 'Nowa Wieś Szlachecka Sklep (nż)', -# 'b1197' => 'Nowa Wieś Jesionka (nż)', # nowa nazwa # 'b3398' => 'Nowa Wieś Szlachecka Jesionka (nż)', -# 'b281' => 'Nowa Wieś Kapliczka (nż)', # nowa nazwa # 'b3393' => 'Nowa Wieś Szlachecka Kapliczka (nż)', -# 'b279' => 'Nowa Wieś Kościół (nż)', # nowa nazwa # 'b3391' => 'Nowa Wieś Szlachecka Kościół (nż)', -# 'b278' => 'Nowa Wieś Szlachecka', # nowa nazwa # 'b3390' => 'Nowa Wieś Szlachecka Pętla', - 'b3398' => 'Nowa Wieś Szlachecka Jesionka (nż)', - 'b3393' => 'Nowa Wieś Szlachecka Kapliczka (nż)', - 'b3391' => 'Nowa Wieś Szlachecka Kościół (nż)', - 'b3390' => 'Nowa Wieś Szlachecka Pętla', - 'b3392' => 'Nowa Wieś Szlachecka Sklep (nż)', - 'b395' => 'Nowolipki (nż)', - 'b715' => 'Nowosądecka', - 'b3175' => 'Nowy Bieżanów P+R', - 'b2581' => 'Nowy Bieżanów Południe', - 'b71' => 'Nowy Kleparz', - 'b2582' => 'Nowy Prokocim', - 'b3068' => 'Obserwatorium (nż)', - 'b1313' => 'Ochmanów Oknoplast (nż)', - 'b2727' => 'Ochmanów Otaczarnia (nż)', -# 'b1171' => 'Ochodza', # nowa nazwa # 'b3331' => 'Ochodza Dwór', - 'b1329' => 'Ochodza Dom Ludowy (nż)', - 'b3331' => 'Ochodza Dwór', - 'b1331' => 'Ochodza Odwiśle', - 'b1330' => 'Ochodza Staw (nż)', - 'b2951' => 'Ochojno Dąbrówki', - 'b863' => 'Ochojno Kamieniec', - 'b861' => 'Ochojno Remiza', - 'b860' => 'Ochojno Skrzyżowanie', - 'b2655' => 'Oczyszczalnia Ścieków \'Kujawy\' (nż)', - 'b553' => 'Odmętowa', - 'b369' => 'Ofiar Dąbia', - 'b18' => 'Ojcowska', - 'b16' => 'Ojcowska Dworek', - 'b17' => 'Ojcowska Wągroda', - 'b103' => 'Olsza II', - 'b161' => 'Olszanica Bory', - 'b158' => 'Olszanica Kapliczka (nż)', - 'b2534' => 'Olszanica Ogródki Działkowe (nż)', - 'b102' => 'Olszecka', - 'b761' => 'Opatkowice', - 'b760' => 'Opatkowice Wiadukt (nż)', - 'b2634' => 'Opatkowice Zadworze', - 'b92' => 'Opolska Estakada', - 'b48' => 'Opolska Kładka', - 'b431' => 'Orkana', - 'b3064' => 'Orszy-Broniewskiego', -# 'b361' => 'Orzeszkowej', # tymczasowy - przebudowa ul. Krakowskiej - 'b3187' => 'Orłowskiego (nż)', - 'b3114' => 'Os. Akademickie PK', - 'b111' => 'Os. Dywizjonu 303', - 'b421' => 'Os. Górali', - 'b402' => 'Os. Jagiellońskie', - 'b386' => 'Os. Kalinowe', - 'b756' => 'Os. Kliny', - 'b413' => 'Os. Kolorowe', - 'b3445' => 'Os. Kościuszkowskie', - 'b710' => 'Os. Kurdwanów', - 'b28' => 'Os. Marszowiec', - 'b2737' => 'Os. Mistrzejowice Nowe', - 'b391' => 'Os. Na Lotnisku', - 'b424' => 'Os. Na Skarpie', - 'b939' => 'Os. Na Stoku', - 'b436' => 'Os. Na Stoku Szkoła', - 'b108' => 'Os. Oświecenia', - 'b378' => 'Os. Piastów', - 'b2812' => 'Os. Podwawelskie', - 'b582' => 'Os. Robotnicze', - 'b390' => 'Os. Strusia', - 'b428' => 'Os. Wandy', - 'b430' => 'Os. Willowe', - 'b418' => 'Os. Zgody', - 'b422' => 'Os. Zielone', - 'b377' => 'Os. Złotego Wieku', -# 'b404' => 'Os.Kościuszkowskie', # nowa nazwa # 'b3445' => 'Os. Kościuszkowskie', - 'b1243' => 'Os. Łokietka', # poprawione # 'b1243' => 'Os.Łokietka', - 'b2643' => 'Ostafina', - 'b2969' => 'Owczary (nż)', -# 'b2631' => 'Owczary Długa (nż)', # nowa nazwa # 'b3357' => 'Owczary Spacerowa (nż)', - 'b2632' => 'Owczary Gajowa (nż)', - 'b2630' => 'Owczary Górna (nż)', - 'b2968' => 'Owczary Pętla', - 'b3357' => 'Owczary Spacerowa (nż)', - 'b817' => 'PB', - 'b3135' => 'PCK', - 'b819' => 'PP', - 'b818' => 'PW', - 'b2526' => 'Pachońskiego', - 'b963' => 'Panieńskich Skał', - 'b2560' => 'Park \'Skały Twardowskiego\' (nż)', - 'b143' => 'Park Decjusza', - 'b1004' => 'Park Wodny', - 'b3149' => 'Park Zdrojowy', - 'b15' => 'Pasternik (nż)', - 'b2776' => 'Petrażyckiego (nż)', - 'b3070' => 'Petrażyckiego Osiedle (nż)', - 'b3191' => 'Petőfiego (nż)', - 'b716' => 'Piaski Nowe', - 'b687' => 'Piaski Wielkie', - 'b3177' => 'Piaskowa (nż)', - 'b379' => 'Piasta Kołodzieja', - 'b2529' => 'Piaszczysta', -# 'b270' => 'Piekary', # nowa nazwa # 'b3389' => 'Piekary Centrum', - 'b2898' => 'Piekary Borki (nż)', - 'b3389' => 'Piekary Centrum', - 'b2900' => 'Piekary Dół (nż)', - 'b868' => 'Piekary Górne', - 'b2897' => 'Piekary Korea (nż)', - 'b2896' => 'Piekary Na Brzegu (nż)', - 'b1189' => 'Piekary Pałac (nż)', - 'b269' => 'Piekary Sklep (nż)', -# 'b2985' => 'Pielgrzymowice (nż)', # nowa nazwa # 'b3379' => 'Pielgrzymowice Wierzbowa (nż)', - 'b2986' => 'Pielgrzymowice Granica (nż)', - 'b2984' => 'Pielgrzymowice Pętla', - 'b3379' => 'Pielgrzymowice Wierzbowa (nż)', - 'b3035' => 'Pielęgniarek', - 'b119' => 'Pilotów', -# 'b1036' => 'Pisary (nż)', # nowa nazwa # 'b3420' => 'Pisary Spacerowa (nż)', - 'b3421' => 'Pisary Akacjowa (nż)', - 'b1236' => 'Pisary Dwór (nż)', - 'b2860' => 'Pisary Kasztanowa (nż)', -# 'b1037' => 'Pisary Kiosk (nż)', # nowa nazwa # 'b3421' => 'Pisary Akacjowa (nż)', -# 'b1038' => 'Pisary Mleczarnia (nż)', # nowa nazwa # 'b3422' => 'Pisary Mleczna (nż)', - 'b3422' => 'Pisary Mleczna (nż)', - 'b1041' => 'Pisary Skrzyżowanie (nż)', - 'b3420' => 'Pisary Spacerowa (nż)', -# 'b3263' => 'Plac Axentowicza', # tymczasowy - przebudowa linii do Bronowic - 'b570' => 'Plac Bohaterów Getta', - 'b2744' => 'Plac Centralny im. R.Reagana', - 'b79' => 'Plac Inwalidów', - 'b360' => 'Plac Wolnica', # nieczynny - przebudowa ul. Krakowskiej - 'b1360' => 'Plac Wszystkich Świętych', - 'b47' => 'Pleszowska', - 'b458' => 'Pleszów', - 'b357' => 'Poczta Główna', - 'b944' => 'Pod Fortem', - 'b1014' => 'Pod Lipą (nż)', - 'b812' => 'Podgaje', - 'b603' => 'Podgórki Tynieckie', - 'b3158' => 'Podgórze SKA', - 'b517' => 'Podstawie (nż)', - 'b644' => 'Podwierzbie', # nieczynny - przebudowa ul. Wrobela - 'b1311' => 'Podłęże Balachówka (nż)', - 'b1309' => 'Podłęże Centrum (nż)', - 'b2728' => 'Podłęże Przedszkole (nż)', - 'b1310' => 'Podłęże Straż (nż)', - 'b956' => 'Polana Żywiecka (nż)', - 'b1093' => 'Polanka Hallera Dwór', -# 'b1318' => 'Polanowice (nż)', # nowa nazwa # 'b3288' => 'Polanowice Boisko (nż)', - 'b3288' => 'Polanowice Boisko (nż)', - 'b1323' => 'Polanowice Kolonia (nż)', - 'b73' => 'Politechnika', - 'b380' => 'Popielidów', - 'b833' => 'Poronińska (nż)', - 'b97' => 'Powstańców', - 'b1155' => 'Powstańców Garaże', - 'b3195' => 'Powstańców Magazyny', - 'b2806' => 'Poziomkowa', - 'b580' => 'Praska (nż)', - 'b3010' => 'Prawocheńskiego (nż)', - 'b2746' => 'Prokocim Rynek', - 'b682' => 'Prokocim Szpital', - 'b684' => 'Prokocim UJ', - 'b633' => 'Prosta', -# 'b479' => 'Prussy', # błąd # 'b3300' => 'Prusy', - 'b3300' => 'Prusy', - 'b478' => 'Prusy Szkoła (nż)', - 'b477' => 'Prusy WSR (nż)', - 'b671' => 'Pruszyńskiego', - 'b3219' => 'Przebieczany', - 'b1214' => 'Przeginia Duchowna (nż)', -# 'b1228' => 'Przeginia Duchowna Bar (nż)', # nowa nazwa # 'b3407' => 'Przeginia Duchowna Kościół (nż)', -# 'b1199' => 'Przeginia Duchowna Centrum', # nowa nazwa # 'b3399' => 'Przeginia Duchowna Remiza', - 'b3407' => 'Przeginia Duchowna Kościół (nż)', - 'b3399' => 'Przeginia Duchowna Remiza', - 'b1198' => 'Przeginia Duchowna Szkoła (nż)', -# 'b1227' => 'Przeginia Narodowa (nż)', # nowa nazwa # 'b3406' => 'Przeginia Narodowa Bunar (nż)', -# 'b2906' => 'Przeginia Narodowa Bonar (nż)', # nowa nazwa # 'b3400' => 'Przeginia Narodowa Dwór (nż)', - 'b3406' => 'Przeginia Narodowa Bunar (nż)', - 'b3400' => 'Przeginia Narodowa Dwór (nż)', - 'b316' => 'Przegon', - 'b275' => 'Przegorzały', - 'b3182' => 'Przegorzały Obwodnica (nż)', - 'b641' => 'Przewóz', - 'b904' => 'Przy Kuźni (nż)', - 'b2530' => 'Przybyszewskiego', - 'b190' => 'Przybysławice I (nż)', - 'b191' => 'Przybysławice II', - 'b1084' => 'Przybysławice III (nż)', - 'b745' => 'Przykopy (nż)', - 'b532' => 'Przylasek Rusiecki', - 'b543' => 'Przylasek Wyciąski (nż)', - 'b2527' => 'Prądnik Biały', - 'b870' => 'Prądnik Biały Zachód', - 'b100' => 'Prądnik Czerwony', - 'b1164' => 'Pszona', - 'b1253' => 'Puszkarska', - 'b2569' => 'Pychowice', - 'b730' => 'Pytlasińskiego', - 'b3124' => 'Półłanki', - 'b72' => 'Pędzichów', - 'b2703' => 'Pękowice', - 'b2873' => 'Płaszowska', - 'b564' => 'Płaszów Szkoła', - 'b660' => 'Płk. Dąbka', - 'b354' => 'Raciborowice', - 'b1138' => 'Raciborowice Centrum', - 'b2988' => 'Raciborowice Granica (nż)', - 'b154' => 'Raczkiewicza (nż)', - 'b1033' => 'Radwanowice I (nż)', - 'b3208' => 'Radwanowice Krzeszowicka (nż)', - 'b1032' => 'Radwanowice Pętla', - 'b132' => 'Radzikowskiego', - 'b1376' => 'Radzikowskiego Osiedle', - 'b788' => 'Radziszów Centrum', - 'b2774' => 'Radziszów Cmentarz (nż)', - 'b789' => 'Radziszów Kamionna (nż)', - 'b1182' => 'Radziszów Kładka (nż)', - 'b797' => 'Radziszów Leśniczówka (nż)', - 'b1186' => 'Radziszów PKP', - 'b798' => 'Radziszów Podlesie (nż)', - 'b3233' => 'Radziszów Podlesie Las (nż)', - 'b1184' => 'Radziszów Podwale (nż)', - 'b2477' => 'Radziszów Stare Sanatorium (nż)', - 'b3075' => 'Radziszów Szpital', - 'b786' => 'Radziszów Włosanka (nż)', - 'b2491' => 'Radziszów Za Mogiłką (nż)', - 'b1183' => 'Radziszów Zacisze (nż)', - 'b787' => 'Radziszów Zadworze (nż)', - 'b1185' => 'Radziszów Zawodzie (nż)', - 'b695' => 'Rajsko', - 'b1325' => 'Ratajów Skrzyżowanie (nż)', - 'b3192' => 'Reduta (nż)', - 'b502' => 'Resztówka', - 'b2568' => 'Rodzinna', - 'b3041' => 'Rondo 308. Dywizjonu', - 'b1066' => 'Rondo Barei', - 'b408' => 'Rondo Czyżyńskie', - 'b3338' => 'Rondo Grunwaldzkie', - 'b365' => 'Rondo Grzegórzeckie', - 'b2539' => 'Rondo Hipokratesa', - 'b2745' => 'Rondo Kocmyrzowskie im. Ks. Gorzelanego', - 'b610' => 'Rondo Matecznego', - 'b125' => 'Rondo Mogilskie', - 'b118' => 'Rondo Młyńskie', - 'b12' => 'Rondo Ofiar Katynia', - 'b383' => 'Rondo Piastowskie', - 'b2689' => 'Rostworowskiego', - 'b589' => 'Ruczaj', - 'b217' => 'Rudawa (nż)', -# 'b1030' => 'Rudawa Bloki (nż)', # nowa nazwa # 'b3418' => 'Rudawa Osiedle (nż)', -# 'b1031' => 'Rudawa Kościół', # nowa nazwa # 'b3419' => 'Rudawa Rynek', - 'b1064' => 'Rudawa Młyn (nż)', - 'b3418' => 'Rudawa Osiedle (nż)', - 'b1059' => 'Rudawa PKP', - 'b3419' => 'Rudawa Rynek', - 'b2924' => 'Rudawa Stadion (nż)', - 'b1039' => 'Rudawa Szkoła', -# 'b2894' => 'Rusocice Droga do Kościoła (nż)', # nowa nazwa # 'b3308' => 'Rusocice Na Brzegu (nż)', - 'b3405' => 'Rusocice Granica (nż)', - 'b1260' => 'Rusocice Jałowce (nż)', - 'b3308' => 'Rusocice Na Brzegu (nż)', - 'b1229' => 'Rusocice Skład (nż)', -# 'b2893' => 'Rusocice Stacja Benzynowa (nż)', # nowa nazwa # 'b3307' => 'Rusocice Stacja Paliw (nż)', -# 'b3307' => 'Rusocice Stacja Paliw (nż)', # nowa nazwa # 'b3405' => 'Rusocice Granica (nż)', - 'b1230' => 'Rusocice Wieś', - 'b1261' => 'Rusocice Załęg (nż)', - 'b1225' => 'Rusocice Łęg (nż)', - 'b520' => 'Ruszcza', - 'b653' => 'Rybitwy Dom Kultury', - 'b652' => 'Rybitwy Rozjazd (nż)', - 'b654' => 'Rybitwy Sklep (nż)', -# 'b1209' => 'Rybna', # nowa nazwa # 'b3299' => 'Rybna Kościół', - 'b1367' => 'Rybna Dolna', - 'b3103' => 'Rybna Droga do Sanki (nż)', # powinno być # 'b3103' => 'Sanka Skrzyżowanie', - 'b1213' => 'Rybna Dół (nż)', - 'b1368' => 'Rybna Granica (nż)', - 'b3299' => 'Rybna Kościół', - 'b1208' => 'Rybna Nowy Świat', - 'b2884' => 'Rybna Nowy Świat Góra (nż)', - 'b1212' => 'Rybna Ośrodek Zdrowia (nż)', - 'b2885' => 'Rybna Szkoła (nż)', - 'b1341' => 'Rybna Zagórze (nż)', - 'b579' => 'Rynek Dębnicki', - 'b616' => 'Rynek Fałęcki', - 'b1262' => 'Rzebika', - 'b611' => 'Rzemieślnicza', - 'b3009' => 'Rzepakowa (nż)', - 'b2654' => 'Rzepakowa Świetlica (nż)', - 'b153' => 'Rzepichy (nż)', -# 'b855' => 'Rzeszotary', # nowa nazwa # 'b3321' => 'Rzeszotary Dworska', - 'b3321' => 'Rzeszotary Dworska', -# 'b859' => 'Rzeszotary Górne (nż)', # nowa nazwa # 'b3322' => 'Rzeszotary Remiza (nż)', - 'b2940' => 'Rzeszotary Panciawa (nż)', - 'b2939' => 'Rzeszotary Panciawa Pętla', - 'b2778' => 'Rzeszotary Pod Dębiną (nż)', - 'b858' => 'Rzeszotary Polanki (nż)', - 'b3322' => 'Rzeszotary Remiza (nż)', - 'b857' => 'Rzeszotary Szkoła (nż)', - 'b2732' => 'Rzeszotary Tempo (nż)', - 'b856' => 'Rzeszotary Trafo (nż)', - 'b842' => 'Rzeszotary Zalesie (nż)', - 'b1087' => 'Rzozów Baseny (nż)', - 'b1088' => 'Rzozów I (nż)', - 'b1180' => 'Rzozów PKP (nż)', - 'b1179' => 'Rzozów Skotnica (nż)', - 'b1089' => 'Rzozów Szkoła', - 'b1181' => 'Rzozów Zagonnie (nż)', - 'b196' => 'Rząska Autostrada (nż)', - 'b193' => 'Rząska Jednostka Wojskowa (nż)', - 'b3199' => 'Rząska Szkoła', - 'b194' => 'Rząska UR (nż)', - 'b55' => 'Różyckiego', -# 'b3061' => 'Rączna Bażanty (nż)', # nowa nazwa # 'b3408' => 'Rączna Gołębiec (nż)', - 'b3395' => 'Rączna Bażanty (nż)', - 'b2902' => 'Rączna Boisko (nż)', - 'b1217' => 'Rączna Dzikowiec (nż)', - 'b3408' => 'Rączna Gołębiec (nż)', - 'b296' => 'Rączna Kapliczka (nż)', - 'b1370' => 'Rączna Kościół (nż)', -# 'b2901' => 'Rączna OSP (nż)', # nowa nazwa # 'b3396' => 'Rączna Remiza (nż)', - 'b306' => 'Rączna Osiedle (nż)', - 'b1216' => 'Rączna Podlas (nż)', - 'b3396' => 'Rączna Remiza (nż)', - 'b3044' => 'Rżąka', -# 'b2762' => 'Sadowie (nż)', # nowa nazwa # 'b3290' => 'Sadowie Wiadukt (nż)', - 'b3290' => 'Sadowie Wiadukt (nż)', - 'b311' => 'Salwator', - 'b3152' => 'Sapalskiego (nż)', - 'b559' => 'Saska', - 'b3128' => 'Sawiczewskich', -# 'b3261' => 'Sewera (nż)', # tymczasowy - przebudowa linii do Bronowic - 'b772' => 'Sidzina', - 'b943' => 'Sieborowice (nż)', - 'b542' => 'Siejówka (nż)', - 'b142' => 'Sielanka', - 'b2547' => 'Sieroszewskiego (nż)', - 'b32' => 'Siewna', - 'b33' => 'Siewna Wiadukt', - 'b1166' => 'Sikorki', - 'b2556' => 'Siwka (nż)', - 'b264' => 'Skalna (nż)', - 'b2731' => 'Skarżyńskiego', - 'b779' => 'Skawina', - 'b1133' => 'Skawina 29 Listopada', - 'b2473' => 'Skawina Ajka', - 'b2854' => 'Skawina Bukowska (nż)', - 'b2863' => 'Skawina Centrum Sportowe', - 'b2475' => 'Skawina Cmentarz', - 'b1137' => 'Skawina Cmentarz Komunalny', - 'b1104' => 'Skawina Elektrownia (nż)', - 'b2487' => 'Skawina Energetyków (nż)', - 'b3008' => 'Skawina Energetyków Przejazd PKP (nż)', - 'b2853' => 'Skawina Graniczna (nż)', - 'b1086' => 'Skawina Koncentraty', - 'b2930' => 'Skawina Kopernika (nż)', - 'b1101' => 'Skawina Korabnicka (nż)', - 'b1102' => 'Skawina Korabnicka Szkoła (nż)', - 'b2481' => 'Skawina Korabniki', - 'b2494' => 'Skawina Nad Potokiem (nż)', -# 'b2868' => 'Skawina Ofiar Katynia', # nowa nazwa # 'b3451' => 'Kopanka Ofiar Katynia', - 'b2929' => 'Skawina Ogrody (nż)', - 'b2471' => 'Skawina Os.Radziszowskie (nż)', - 'b3336' => 'Skawina Piastowska (nż)', - 'b2867' => 'Skawina Pileckiego', - 'b1103' => 'Skawina Piłsudskiego', - 'b1107' => 'Skawina Podbory (nż)', - 'b3327' => 'Skawina Podgórki', -# 'b2927' => 'Skawina Podgórki Skawińskie', # nowa nazwa # 'b3327' => 'Skawina Podgórki', - 'b2476' => 'Skawina Podlipki', - 'b2474' => 'Skawina Popiełuszki', - 'b2472' => 'Skawina Radziszowska (nż)', - 'b2486' => 'Skawina Robotnicza', - 'b781' => 'Skawina Rynek', - 'b785' => 'Skawina Rzepnik', - 'b3441' => 'Skawina SCK', - 'b2480' => 'Skawina Samborek Most', - 'b1134' => 'Skawina Starostwo Powiatowe', - 'b1007' => 'Skawina Szkoła', - 'b1008' => 'Skawina Sąd', - 'b2479' => 'Skawina Tyniecka', - 'b2478' => 'Skawina Tyniecka Osiedle', - 'b3173' => 'Skawina Tyniecka Rzepnik (nż)', - 'b1011' => 'Skawina Wojska Polskiego', - 'b1100' => 'Skawina Wyspiańskiego', - 'b2820' => 'Skawina Wyspiańskiego Szkoła (nż)', - 'b1105' => 'Skawina Zachodnia (nż)', - 'b3334' => 'Skawina Żwirowa (nż)', - 'b3335' => 'Skawina Żwirownia (nż)', - 'b219' => 'Skała Kmity (nż)', - 'b766' => 'Skotniki', - 'b3181' => 'Skotniki Kościół', - 'b604' => 'Skotniki Szkoła', - 'b752' => 'Skośna', - 'b42' => 'Skrajna (nż)', -# 'b953' => 'Skrzeszowice', # nowa nazwa # 'b3286' => 'Skrzeszowice OSP Boisko', - 'b3286' => 'Skrzeszowice OSP Boisko', - 'b967' => 'Skrzyżowanie do Podchruścia (nż)', - 'b1153' => 'Smardzowice', - 'b2972' => 'Smardzowice Wołówka (nż)', - 'b816' => 'Smoleńskiego', - 'b572' => 'Smolki', - 'b699' => 'Soboniowice', - 'b746' => 'Solvay', - 'b2544' => 'Sołtysowska (nż)', - 'b2546' => 'Sołtysowska Osiedle', - 'b2545' => 'Sołtysowska Zakłady', - 'b116' => 'Spadochroniarzy', - 'b3276' => 'Spławy', - 'b57' => 'Stachiewicza', - 'b1308' => 'Staniątki Wiadukt (nż)', - 'b144' => 'Stara Wola', - 'b2558' => 'Stare Wiślisko', - 'b358' => 'Starowiślna', - 'b3032' => 'Stary Kleparz', - 'b2791' => 'Stawowa', - 'b112' => 'Stella-Sawickiego', - 'b558' => 'Stoczniowców', - 'b711' => 'Stojałowskiego', - 'b359' => 'Stradom', - 'b423' => 'Struga', - 'b2874' => 'Strycharska', - 'b101' => 'Strzelców', - 'b141' => 'Strzelnica', - 'b618' => 'Sucha', - 'b666' => 'Sucharskiego (nż)', - 'b456' => 'Suchy Jar (nż)', - 'b2602' => 'Sudolska', - 'b476' => 'Sulechów (nż)', - 'b2570' => 'Surzyckiego', - 'b2571' => 'Sułkowskiego', - 'b2497' => 'Sułków (nż)', - 'b739' => 'Swoszowice Autostrada (nż)', - 'b732' => 'Swoszowice Poczta', - 'b3129' => 'Swoszowice Szkoła', - 'b869' => 'Szafrańska', - 'b562' => 'Szczecińska', - 'b2593' => 'Szczegów', - 'b220' => 'Szczyglice', - 'b3045' => 'Szczyglice Autostrada', - 'b871' => 'Szczyglice Dom Kultury', - 'b224' => 'Szczyglice Most (nż)', - 'b2910' => 'Szczyglice Podkamycze', - 'b651' => 'Szparagowa', - 'b3203' => 'Szpital Jana Pawła II', - 'b3036' => 'Szpital Narutowicza', - 'b2759' => 'Szpital Okulistyczny', - 'b827' => 'Szpital Rydygiera', - 'b3383' => 'Szpital Uniwersytecki / Instytut Pediatrii', # poprawione # 'b3383' => 'Szpital Uniwersytecki / Instytut Pediatr', - 'b425' => 'Szpital Żeromskiego', - 'b575' => 'Szwedzka', - 'b971' => 'Szyce I (nż)', - 'b970' => 'Szyce II (nż)', - 'b2646' => 'Szymańskiego (nż)', - 'b628' => 'Sławka (nż)', - 'b2607' => 'Słomczyńskiego', - 'b577' => 'Słomiana', - 'b2733' => 'Słomniki Kościuszki', - 'b1315' => 'Słomniki Osiedle', - 'b1316' => 'Słomniki Rynek', - 'b1317' => 'Słomniki Zagłoby (nż)', - 'b2584' => 'Słona Woda', - 'b3138' => 'Słoneckiego', - 'b314' => 'Słonecznikowa', -# 'b3293' => 'Słowiańska', # tymczasowy - przebudowa linii do Bronowic - 'b2872' => 'TAURON Arena Kraków', - 'b2871' => 'TAURON Arena Kraków Al. Pokoju (nż)', - 'b3040' => 'TAURON Arena Kraków Wieczysta', - 'b2724' => 'TR', - 'b3172' => 'Taklińskiego (nż)', - 'b77' => 'Teatr Bagatela', - 'b420' => 'Teatr Ludowy', - 'b3242' => 'Teatr Słowackiego', - 'b681' => 'Teligi', - 'b919' => 'Tischnera', - 'b3218' => 'Tomaszkowice', - 'b989' => 'Tomaszowice', - 'b2697' => 'Tomaszowice Gliniki (nż)', - 'b988' => 'Tomaszowice I (nż)', - 'b3167' => 'Tomaszowice Kolberga (nż)', - 'b987' => 'Tomaszowice Wedonka (nż)', - 'b139' => 'Tondosa (nż)', - 'b21' => 'Tonie', - 'b990' => 'Tonie Gliniki (nż)', - 'b25' => 'Tonie Kąty (nż)', - 'b23' => 'Tonie Skrzyżowanie', - 'b966' => 'Tor Kajakowy', - 'b936' => 'Torfowa', - 'b3450' => 'Tretówka', # tymczasowy - przebudowa ul. Wrony - 'b994' => 'Trojadyn Skrzyżowanie (nż)', - 'b184' => 'Trojanowice', - 'b2977' => 'Trojanowice Krakowska (nż)', - 'b178' => 'Trojanowice Pętla', - 'b183' => 'Trojanowice Strugi (nż)', - 'b2650' => 'Truskawkowa (nż)', -# 'b2720' => 'Trzecia Góra (nż)', # nowa nazwa # 'b3341' => 'Węgrzce Trzecia Góra (nż)', - 'b3222' => 'Trąbki I (nż)', - 'b3223' => 'Trąbki OSP', - 'b3245' => 'Trąbki P+R', - 'b714' => 'Tuchowska', - 'b999' => 'Turowicza (nż)', - 'b593' => 'Tyniec', - 'b591' => 'Tyniec Kamieniołom', - 'b2562' => 'Tyniecka Autostrada (nż)', - 'b3140' => 'UR Aleja 29 Listopada', - 'b5' => 'UR Balicka', - 'b115' => 'Ugorek', - 'b1017' => 'Ujazd Pętla', - 'b723' => 'Ukraina (nż)', - 'b127' => 'Uniwersytet Ekonomiczny', - 'b321' => 'Uniwersytet Jagielloński', - 'b88' => 'Uniwersytet Pedagogiczny', - 'b67' => 'Urząd Marszałkowski', - 'b957' => 'Urząd Skarbowy Nowa Huta', - 'b83' => 'Urzędnicza', - 'b486' => 'Wadowska (nż)', - 'b485' => 'Wadów', - 'b492' => 'Wadów Działki (nż)', - 'b2554' => 'Wadów Glinik (nż)', - 'b2738' => 'Wadów Os.Kolejowe', - 'b483' => 'Wadów Osiedle (nż)', - 'b484' => 'Wadów Szkoła', - 'b463' => 'Walcownia', - 'b2599' => 'Warchałowskiego', -# 'b3264' => 'Warmijska', # tymczasowy - przebudowa linii do Bronowic - 'b3131' => 'Warszewicza (nż)', -# 'b338' => 'Warszówka (nż)', # nowa nazwa # 'b3347' => 'Michałowice Warszawka (nż)', - 'b2564' => 'Wały Wiślane (nż)', - 'b2543' => 'Wańkowicza', - 'b2639' => 'Ważewskiego', - 'b2578' => 'Weigla', - 'b133' => 'Wesele', - 'b434' => 'Wiadukty (nż)', - 'b3382' => 'Widłakowa (nż)', - 'b2722' => 'Wielicka Granica Miasta', - 'b3380' => 'Wieliczka Centrum', - 'b898' => 'Wieliczka Cmentarz', - 'b3246' => 'Wieliczka Gdowska', - 'b2852' => 'Wieliczka Goliana', -# 'b2862' => 'Wieliczka Kampus', # nowa nazwa # 'b3429' => 'Wieliczka Miasto', - 'b3430' => 'Wieliczka Klasztor', - 'b2814' => 'Wieliczka Klaśnieńska (nż)', - 'b1167' => 'Wieliczka Kopalnia Soli', -# 'b911' => 'Wieliczka Kościół', # nowa nazwa # 'b3430' => 'Wieliczka Klasztor' - 'b3431' => 'Wieliczka Mediateka', - 'b3429' => 'Wieliczka Miasto', - 'b2730' => 'Wieliczka Niepołomska (nż)', - 'b3006' => 'Wieliczka Os.Asnyka', - 'b2503' => 'Wieliczka Park', - 'b3247' => 'Wieliczka Polna (nż)', -# 'b1168' => 'Wieliczka Rynek', # nowa nazwa # 'b3431' => 'Wieliczka Mediateka', - 'b2816' => 'Wieliczka Solne Miasto', - 'b3235' => 'Wieliczka Stacja Paliw', - 'b2815' => 'Wieliczka Sąd', - 'b972' => 'Wielka Wieś (nż)', - 'b1364' => 'Wielkie Drogi (nż)', - 'b1232' => 'Wielkie Drogi Ośrodek Zdrowia (nż)', - 'b1113' => 'Wielkie Drogi PKP (nż)', - 'b1233' => 'Wielkie Drogi Szkoła (nż)', - 'b1112' => 'Wielkie Drogi Trzebol (nż)', - 'b866' => 'Wiklinowa (nż)', - 'b1267' => 'Wiktorowice Centrum (nż)', - 'b1264' => 'Wiktorowice Granica (nż)', - 'b3189' => 'Wiktorowice Rozlewnia Wód (nż)', - 'b1266' => 'Wiktorowice Skrzyżowanie (nż)', - 'b2515' => 'Wileńska', - 'b737' => 'Wilga (nż)', - 'b1372' => 'Winnicka (nż)', - 'b29' => 'Witkowice', - 'b30' => 'Witkowice Nowe', - 'b718' => 'Witosa', -# 'b1025' => 'Więckowice (nż)', # nowa nazwa # 'b3416' => 'Więckowice Ogrodowa (nż)', - 'b2921' => 'Więckowice Lipka (nż)', - 'b3416' => 'Więckowice Ogrodowa (nż)', -# 'b348' => 'Więcławice Stare (nż)', # nowa nazwa # 'b3372' => 'Więcławice Stare Centrum (nż)', - 'b3372' => 'Więcławice Stare Centrum (nż)', - 'b2987' => 'Więcławice Stare Wysyłek (nż)', - 'b110' => 'Wiślicka', - 'b634' => 'Wlotowa', - 'b263' => 'Wodociągi (nż)', - 'b3115' => 'Wodociągowa (nż)', - 'b1284' => 'Wola Batorska Borek (nż)', - 'b1283' => 'Wola Batorska Cmentarz (nż)', - 'b1282' => 'Wola Batorska Kościół (nż)', - 'b1285' => 'Wola Batorska Mikoniowiec (nż)', - 'b1280' => 'Wola Batorska Ruskie (nż)', - 'b1286' => 'Wola Batorska Zamoglice (nż)', - 'b1281' => 'Wola Batorska Żwirownia (nż)', - 'b629' => 'Wola Duchacka', -# 'b949' => 'Wola Luborzycka (nż)', # nowa nazwa # 'b3284' => 'Wola Luborzycka Skrzyżowanie (nż)', - 'b1332' => 'Wola Luborzycka Działki (nż)', - 'b950' => 'Wola Luborzycka Las (nż)', - 'b3284' => 'Wola Luborzycka Skrzyżowanie (nż)', -# 'b1128' => 'Wola Radziszowska', # nowa nazwa # 'b3330' => 'Wola Radziszowska Pętla', - 'b1127' => 'Wola Radziszowska Centrum', - 'b1129' => 'Wola Radziszowska Chorzyny (nż)', -# 'b3185' => 'Wola Radziszowska Kapelanka (nż)', # nowa nazwa # 'b3362' => 'Wola Radziszowska Kapelanka (nż)', - 'b3362' => 'Wola Radziszowska Kapelanka (nż)', - 'b1126' => 'Wola Radziszowska Lipki (nż)', - 'b1124' => 'Wola Radziszowska Mała Ostra Góra (nż)', - 'b1125' => 'Wola Radziszowska Most (nż)', - 'b1336' => 'Wola Radziszowska Podgaźle (nż)', - 'b3330' => 'Wola Radziszowska Pętla', -# 'b1337' => 'Wola Radziszowska Łęg (nż)', # dawny - 'b1291' => 'Wola Zabierzowska (nż)', -# 'b172' => 'Wola Zachariaszowska', # nowa nazwa # 'b3343' => 'Wola Zachariaszowska Szkoła', -# 'b2702' => 'Wola Zachariaszowska Kresy', # nowa nazwa # 'b3356' => 'Michałowice Las Michałowski', - 'b3343' => 'Wola Zachariaszowska Szkoła', - 'b3360' => 'Wola Zachariaszowska Słoneczna', -# 'b2976' => 'Wola Zachariaszowska Zakońce', # nowa nazwa # 'b3360' => 'Wola Zachariaszowska Słoneczna', - 'b539' => 'Wolica (nż)', - 'b538' => 'Wolica Kościół (nż)', - 'b537' => 'Wolica Las', - 'b536' => 'Wolica Most', -# 'b540' => 'Wolica Sklep (nż)', # nowa nazwa # 'b3427' => 'Wolica Szkoła (nż)', - 'b3427' => 'Wolica Szkoła (nż)', -# 'b894' => 'Wołowice (nż)', # nowa nazwa # 'b3397' => 'Wołowice Remiza (nż)', - 'b3231' => 'Wołowice Grotowa (nż)', - 'b3227' => 'Wołowice Grotowa Skrzyżowanie (nż)', - 'b909' => 'Wołowice Kapliczka', -# 'b1207' => 'Wołowice Niwa (nż)', # nowa nazwa # 'b3403' => 'Wołowice Niwka (nż)', - 'b3403' => 'Wołowice Niwka (nż)', - 'b2907' => 'Wołowice Pichonówka (nż)', - 'b3397' => 'Wołowice Remiza (nż)', - 'b1205' => 'Wołowice Sklep (nż)', - 'b3401' => 'Wołowice Skrzyżowanie (nż)', - 'b893' => 'Wołowice Szkoła', - 'b3229' => 'Wołowice Zawierzbie (nż)', - 'b643' => 'Wrobela', # nieczynny - przebudowa ul. Wrobela - 'b68' => 'Wrocławska', - 'b2598' => 'Wrony', -# 'b2948' => 'Wrząsowice (nż)', # nowa nazwa # 'b3319' => 'Wrząsowice Bonifraterska (nż)', - 'b3426' => 'Wrząsowice Bonifraterska (nż)', -# 'b3319' => 'Wrząsowice Bonifraterska (nż)', # nowa nazwa # 'b3426' => 'Wrząsowice Bonifraterska (nż)', - 'b2946' => 'Wrząsowice Centrum', - 'b1234' => 'Wrząsowice Kowaleca (nż)', - 'b2950' => 'Wrząsowice Nad Wilgą', - 'b2947' => 'Wrząsowice Pileckiego (nż)', - 'b2952' => 'Wrząsowice Pod Skałą (nż)', - 'b3212' => 'Wrząsowice Rondo', - 'b2945' => 'Wrząsowice Wrzosowa (nż)', - 'b2944' => 'Wrząsowice Zielona (nż)', - 'b3148' => 'Wróblowice', - 'b729' => 'Wróblowice Szkoła', # nieczynny - przebudowa ul. Myślenickiej - 'b499' => 'Wróżenice', - 'b2641' => 'Wróżenice Górka (nż)', - 'b2640' => 'Wróżenicka (nż)', - 'b60' => 'Wybickiego', - 'b2647' => 'Wyciąska (nż)', - 'b508' => 'Wyciąże (nż)', - 'b515' => 'Wyciąże Sklep (nż)', - 'b521' => 'Wyciąże Wiadukt (nż)', - 'b2645' => 'Wyciąże Zachód (nż)', - 'b683' => 'Wydział Farmaceutyczny UJ', - 'b43' => 'Wyki', - 'b2998' => 'Wysiołek Luborzycki (nż)', - 'b2999' => 'Wysiołek Luborzycki Kapkazy (nż)', - 'b1320' => 'Wysiołek Luborzycki Radwany (nż)', - 'b2997' => 'Wysiołek Luborzycki Skrzyżowanie (nż)', - 'b1259' => 'Wysłouchów', -# 'b292' => 'Wyźrał Szkoła (nż)', # nowa nazwa # 'b3303' => 'Kaszów Szkoła nr 2 (nż)', -# 'b293' => 'Wyźrał Wielka Droga (nż)', # nowa nazwa # 'b3304' => 'Kaszów Wielka Droga (nż)', - 'b442' => 'Wzgórza Krzesławickie', - 'b328' => 'Węgrzce', - 'b3442' => 'Węgrzce B1 (nż)', - 'b3443' => 'Węgrzce B4 (nż)', -# 'b2980' => 'Węgrzce Bosutów (nż)', # nowa nazwa # 'b3444' => 'Węgrzce Sudół (nż)', -# 'b2979' => 'Węgrzce Bosutów Sudół (nż)', # nowa nazwa # 'b3443' => 'Węgrzce B4 (nż)', - 'b1079' => 'Węgrzce Błonie', - 'b165' => 'Węgrzce Centrum', - 'b1074' => 'Węgrzce Centrum Medyczne (nż)', - 'b1073' => 'Węgrzce Magiczne Wzgórze (nż)', - 'b1080' => 'Węgrzce Pętla', - 'b327' => 'Węgrzce Starostwo Powiatowe', - 'b3444' => 'Węgrzce Sudół (nż)', - 'b3341' => 'Węgrzce Trzecia Góra (nż)', - 'b1163' => 'Węgrzce Wielkie II (nż)', - 'b1161' => 'Węgrzce Wielkie III (nż)', - 'b3270' => 'Węgrzce Wielkie Pętla', - 'b487' => 'Węgrzynowice', - 'b488' => 'Węgrzynowice Centrum (nż)', - 'b2552' => 'Węgrzynowice Dół (nż)', - 'b3277' => 'Węgrzynowicka (nż)', - 'b3127' => 'Węzeł Wielicki (nż)', - 'b3118' => 'Władysława Jagiełły', - 'b3110' => 'Władysława Łokietka', -# 'b807' => 'Włosań', # nowa nazwa # 'b3314' => 'Włosań Centrum', - 'b3314' => 'Włosań Centrum', - 'b3053' => 'Włosań Dział Wschodni (nż)', - 'b809' => 'Włosań Kopań (nż)', - 'b808' => 'Włosań Krzyżówka (nż)', - 'b146' => 'ZOO', - 'b2495' => 'Zabawa (nż)', - 'b2510' => 'Zabawa I (nż)', - 'b199' => 'Zabierzów', - 'b1287' => 'Zabierzów Bocheński Centrum (nż)', - 'b198' => 'Zabierzów Działki (nż)', - 'b3248' => 'Zabierzów Eximius Park', - 'b202' => 'Zabierzów I', - 'b961' => 'Zabierzów Młyn', - 'b213' => 'Zabierzów Ośrodek Zdrowia', - 'b204' => 'Zabierzów PKP', - 'b203' => 'Zabierzów Piaski (nż)', - 'b201' => 'Zabierzów Piekarnia', - 'b3249' => 'Zabierzów Rynek', - 'b200' => 'Zabierzów Sklep', - 'b503' => 'Zabłocie Kościelnickie (nż)', - 'b590' => 'Zachodnia', -# 'b2888' => 'Zagacie (nż)', # nowa nazwa # 'b3305' => 'Zagacie Górka (nż)', - 'b3305' => 'Zagacie Górka (nż)', - 'b2889' => 'Zagacie Witkówki (nż)', -# 'b916' => 'Zagórzyce Dworskie', # nowa nazwa # 'b3375' => 'Zagórzyce Dworskie Remiza', - 'b3375' => 'Zagórzyce Dworskie Remiza', -# 'b917' => 'Zagórzyce Stare (nż)', # nowa nazwa # 'b3376' => 'Zagórzyce Stare Owocowa (nż)', - 'b3376' => 'Zagórzyce Stare Owocowa (nż)', - 'b397' => 'Zajezdnia Bieńczyce', - 'b465' => 'Zajezdnia Nowa Huta', - 'b2576' => 'Zajezdnia Płaszów', - 'b1254' => 'Zajezdnia Wola Duchacka', - 'b155' => 'Zakamycze', - 'b3179' => 'Zakarnie (nż)', - 'b7' => 'Zakliki (nż)', - 'b2789' => 'Zakole', - 'b1305' => 'Zakrzów (nż)', - 'b2649' => 'Zakępie (nż)', - 'b511' => 'Zakład Przeróbki (nż)', - 'b137' => 'Zarzecze', - 'b274' => 'Zaskale (nż)', - 'b356' => 'Zastów', - 'b1265' => 'Zastów Działki (nż)', - 'b839' => 'Zatyka (nż)', - 'b755' => 'Zawiszy', - 'b751' => 'Zawiła (nż)', - 'b721' => 'Zbydniowice', - 'b3147' => 'Zbydniowicka', - 'b1116' => 'Zelczyna I (nż)', - 'b1115' => 'Zelczyna Sklep', - 'b1170' => 'Zelczyna Szkoła (nż)', - 'b3200' => 'Zelków Kościuszki (nż)', - 'b3198' => 'Zelków Pętla', - 'b2918' => 'Zelków Spławy (nż)', - 'b210' => 'Zelków Staw', - 'b209' => 'Zelków Wola (nż)', - 'b447' => 'Zesławice', - 'b2621' => 'Zesławice Ogródki Działkowe (nż)', - 'b581' => 'Zielińskiego (nż)', - 'b2784' => 'Zielonki Galicyjska (nż)', - 'b3358' => 'Zielonki Jaskinia Zielonkowska (nż)', - 'b2978' => 'Zielonki Marszowiec Pętla', - 'b177' => 'Zielonki Rozjazd', - 'b182' => 'Zielonki Skrzyżowanie', - 'b180' => 'Zielonki Transformator', - 'b181' => 'Zielonki UG', - 'b149' => 'Zielony Dół', - 'b2577' => 'Złocieniowa', - 'b811' => 'Złocień', - 'b679' => 'Ćwiklińskiej', - 'b922' => 'Łagiewniki', - 'b563' => 'Łanowa', - 'b3069' => 'Łobzów SKA', -# 'b951' => 'Łososkowice', # nowa nazwa # 'b3285' => 'Łososkowice Remiza', - 'b3285' => 'Łososkowice Remiza', - 'b952' => 'Łososkowice Szkoła (nż)', - 'b480' => 'Łuczanowice', - 'b482' => 'Łuczanowice Skrzyżowanie', - 'b3066' => 'Łuczanowicka (nż)', -# 'b1121' => 'Łuczyce', # nowa nazwa # 'b3287' => 'Łuczyce Kosynierów', - 'b3287' => 'Łuczyce Kosynierów', - 'b1120' => 'Łuczyce Las (nż)', - 'b1231' => 'Łuczyce Zjawienie (nż)', - 'b2761' => 'Łuczyce Zwierzyniec (nż)', - 'b2604' => 'Łuczyńskiego (nż)', - 'b120' => 'Łukasiewicza', - 'b640' => 'Łutnia', - 'b2596' => 'Łużycka (nż)', - 'b384' => 'Łęczycka', -# 'b301' => 'Ściejowice Granica (nż)', # nowa nazwa # 'b3395' => 'Rączna Bażanty (nż)', - 'b3226' => 'Ściejowice Kościel (nż)', - 'b1246' => 'Ściejowice Na Bagnach (nż)', - 'b3225' => 'Ściejowice Remiza (nż)', - 'b2610' => 'Ślaskiego (nż)', - 'b1374' => 'Śliwiaka (nż)', - 'b2517' => 'Śliwiaka Zakłady', - 'b903' => 'Ślósarczyka', - 'b2742' => 'Św.Wawrzyńca', - 'b2605' => 'Świdzińskiego (nż)', -# 'b2942' => 'Świątniki Bielowicza Szkoła', # nowa nazwa # 'b3316' => 'Świątniki Górne Bielowicza Szkoła', -# 'b2949' => 'Świątniki Buk (nż)', # nowa nazwa # 'b3320' => 'Świątniki Górne Buk (nż)', -# 'b847' => 'Świątniki Centrum', # nowa nazwa # 'b3317' => 'Świątniki Górne Centrum', - 'b3316' => 'Świątniki Górne Bielowicza Szkoła', - 'b3320' => 'Świątniki Górne Buk (nż)', - 'b3317' => 'Świątniki Górne Centrum', - 'b3325' => 'Świątniki Górne Krakowska (nż)', - 'b3051' => 'Świątniki Górne Piasna Górka (nż)', - 'b3315' => 'Świątniki Górne Skrzyżowanie (nż)', - 'b3318' => 'Świątniki Górne Urząd Miasta i Gminy', -# 'b2768' => 'Świątniki Krakowska (nż)', # nowa nazwa # 'b3325' => 'Świątniki Górne Krakowska (nż)', -# 'b845' => 'Świątniki Skrzyżowanie (nż)', # nowa nazwa # 'b3315' => 'Świątniki Górne Skrzyżowanie (nż)', -# 'b2943' => 'Świątniki Urząd Miasta i Gminy', # nowa nazwa # 'b3318' => 'Świątniki Górne Urząd Miasta i Gminy', - 'b2592' => 'Żelazowskiego (nż)', -# 'b343' => 'Żerkowice Kolonia (nż)', # nowa nazwa # 'b3349' => 'Narama Księża (nż)', -# 'b344' => 'Żerkowice Skrzyżowanie (nż)', # nowa nazwa # 'b3350' => 'Krasieniec Stary Skrzyżowanie (nż)', - 'b417' => 'Żeromskiego', - 'b534' => 'Żwirownia', - 'b748' => 'Żywiecka', - 'b834' => 'Żyzna (nż)', -); -- Gitblit v1.9.1