/** | |
* Namespace: Util.OSM | |
*/ | |
OpenLayers.Util.OSM = {}; | |
/** | |
* Constant: MISSING_TILE_URL | |
* {String} URL of image to display for missing tiles | |
*/ | |
OpenLayers.Util.OSM.MISSING_TILE_URL = "/404.php"; | |
/** | |
* Property: originalOnImageLoadError | |
* {Function} Original onImageLoadError function. | |
*/ | |
OpenLayers.Util.OSM.originalOnImageLoadError = OpenLayers.Util.onImageLoadError; | |
/** | |
* Function: onImageLoadError | |
*/ | |
OpenLayers.Util.onImageLoadError = function() { | |
if (this.src.match(/^http:\/\/[abc]\.[a-z]+\.openstreetmap\.org\//)) { | |
this.src = OpenLayers.Util.OSM.MISSING_TILE_URL; | |
} else if (this.src.match(/^http:\/\/[def]\.tah\.openstreetmap\.org\//)) { | |
// do nothing - this layer is transparent | |
} else { | |
OpenLayers.Util.OSM.originalOnImageLoadError; | |
} | |
}; | |
/** | |
* Class: OpenLayers.Layer.OSM.Mapnik | |
* | |
* Inherits from: | |
* - <OpenLayers.Layer.OSM> | |
*/ | |
OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, { | |
/** | |
* Constructor: OpenLayers.Layer.OSM.Mapnik | |
* | |
* Parameters: | |
* name - {String} | |
* options - {Object} Hashtable of extra options to tag onto the layer | |
*/ | |
initialize: function(name, options) { | |
var url = [ | |
"http://a.tiles.bigtincan.com/${z}/${x}/${y}.png", | |
"http://b.tiles.bigtincan.com/${z}/${x}/${y}.png", | |
"http://c.tiles.bigtincan.com/${z}/${x}/${y}.png" | |
]; | |
options = OpenLayers.Util.extend({ numZoomLevels: 19 }, options); | |
var newArguments = [name, url, options]; | |
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); | |
}, | |
CLASS_NAME: "OpenLayers.Layer.OSM.Mapnik" | |
}); | |
OpenLayers.Layer.OSM.NearMap = OpenLayers.Class(OpenLayers.Layer.OSM, { | |
/** | |
* Constructor: OpenLayers.Layer.OSM.Mapnik | |
* | |
* Parameters: | |
* name - {String} | |
* options - {Object} Hashtable of extra options to tag onto the layer | |
*/ | |
initialize: function(name, options) { | |
var url = [ | |
"http://nearmap:findreality@web0.nearmap.com/maps/hl=en&nml=Vert&x=${x}&y=${y}&z=${z}", | |
"http://nearmap:findreality@web1.nearmap.com/maps/hl=en&nml=Vert&x=${x}&y=${y}&z=${z}", | |
"http://nearmap:findreality@web2.nearmap.com/maps/hl=en&nml=Vert&x=${x}&y=${y}&z=${z}", | |
"http://nearmap:findreality@web3.nearmap.com/maps/hl=en&nml=Vert&x=${x}&y=${y}&z=${z}" | |
]; | |
options = OpenLayers.Util.extend({ numZoomLevels: 22 }, options); | |
var newArguments = [name, url, options]; | |
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); | |
}, | |
CLASS_NAME: "OpenLayers.Layer.OSM.NearMap" | |
}); | |
/** | |
* Class: OpenLayers.Layer.OSM.Osmarender | |
* | |
* Inherits from: | |
* - <OpenLayers.Layer.OSM> | |
*/ | |
OpenLayers.Layer.OSM.Osmarender = OpenLayers.Class(OpenLayers.Layer.OSM, { | |
/** | |
* Constructor: OpenLayers.Layer.OSM.Osmarender | |
* | |
* Parameters: | |
* name - {String} | |
* options - {Object} Hashtable of extra options to tag onto the layer | |
*/ | |
initialize: function(name, options) { | |
var url = [ | |
"http://a.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png", | |
"http://b.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png", | |
"http://c.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png" | |
]; | |
options = OpenLayers.Util.extend({ numZoomLevels: 18 }, options); | |
var newArguments = [name, url, options]; | |
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); | |
}, | |
CLASS_NAME: "OpenLayers.Layer.OSM.Osmarender" | |
}); | |
/** | |
* Class: OpenLayers.Layer.OSM.CycleMap | |
* | |
* Inherits from: | |
* - <OpenLayers.Layer.OSM> | |
*/ | |
OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, { | |
/** | |
* Constructor: OpenLayers.Layer.OSM.CycleMap | |
* | |
* Parameters: | |
* name - {String} | |
* options - {Object} Hashtable of extra options to tag onto the layer | |
*/ | |
initialize: function(name, options) { | |
var url = [ | |
"http://a.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png", | |
"http://b.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png", | |
"http://c.andy.sandbox.cloudmade.com/tiles/cycle/${z}/${x}/${y}.png" | |
]; | |
options = OpenLayers.Util.extend({ numZoomLevels: 19 }, options); | |
var newArguments = [name, url, options]; | |
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); | |
}, | |
CLASS_NAME: "OpenLayers.Layer.OSM.CycleMap" | |
}); | |
/** | |
* Class: OpenLayers.Layer.OSM.Maplint | |
* | |
* Inherits from: | |
* - <OpenLayers.Layer.OSM> | |
*/ | |
OpenLayers.Layer.OSM.Maplint = OpenLayers.Class(OpenLayers.Layer.OSM, { | |
/** | |
* Constructor: OpenLayers.Layer.OSM.Maplint | |
* | |
* Parameters: | |
* name - {String} | |
* options - {Object} Hashtable of extra options to tag onto the layer | |
*/ | |
initialize: function(name, options) { | |
var url = [ | |
"http://d.tah.openstreetmap.org/Tiles/maplint/${z}/${x}/${y}.png", | |
"http://e.tah.openstreetmap.org/Tiles/maplint/${z}/${x}/${y}.png", | |
"http://f.tah.openstreetmap.org/Tiles/maplint/${z}/${x}/${y}.png" | |
]; | |
options = OpenLayers.Util.extend({ numZoomLevels: 18, isBaseLayer: false, visibility: false }, options); | |
var newArguments = [name, url, options]; | |
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); | |
}, | |
CLASS_NAME: "OpenLayers.Layer.OSM.Maplint" | |
}); | |
<html xmlns="http://www.w3.org/1999/xhtml"> | <html xmlns="http://www.w3.org/1999/xhtml"> |
<head> | <head> |
<script type="text/javascript" src="http://loki.com/plugin/files/loki.js"></script> | <script type="text/javascript" src="http://loki.com/plugin/files/loki.js"></script> |
<script src="openlayers/OpenLayers.js"></script> | <script src="openlayers/OpenLayers.js"></script> |
<SCRIPT TYPE="text/javascript" SRC="OpenStreetMap.js"></SCRIPT> | |
<script type="text/javascript"> | <script type="text/javascript"> |
var map, layer; | var map, layer; |
function aaa(a) | function aaa(a) |
{ | { |
var lonLat = new OpenLayers.LonLat(a.coords.longitude, a.coords.latitude).transform(new OpenLayers.Projection("EPSG:4326"), | var lonLat = new OpenLayers.LonLat(a.coords.longitude, a.coords.latitude).transform(new OpenLayers.Projection("EPSG:4326"), |
map.getProjectionObject()); | map.getProjectionObject()); |
map.setCenter(lonLat, 13); | map.setCenter(lonLat, 13); |
} | } |
function handleError(a) | function handleError(a) |
{ | { |
alert("error in geoloc"); | alert("error in geoloc"); |
} | } |
function init() | function init() |
{ | { |
var extent = new OpenLayers.Bounds(148.98, -35.48, 149.25, -35.15); | var extent = new OpenLayers.Bounds(148.98, -35.48, 149.25, -35.15); |
map = new OpenLayers.Map('map'); | |
layer = new OpenLayers.Layer.OSM("local", "http://10.0.1.153/tiles/${z}/${x}/${y}.png"); | // set up the map options |
var options = | |
{ | |
maxExtent: extent, | |
numZoomLevels: 20, | |
}; | |
// create the ol map object | |
var map = new OpenLayers.Map('map', options); | |
layer = new OpenLayers.Layer.OSM("local", "http://10.0.1.153/tiles/${z}/${x}/${y}.png"); | |
map.addLayer(layer); | map.addLayer(layer); |
map.addLayer(new OpenLayers.Layer.OSM.NearMap("NearMap")); | |
var lonLat = new OpenLayers.LonLat(149.11, -35.28).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()); | var lonLat = new OpenLayers.LonLat(149.11, -35.28).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()); |
map.setCenter(lonLat, 13); | map.setCenter(lonLat, 13); |
map.addControl( new OpenLayers.Control.LayerSwitcher({'ascending':false})); | map.addControl( new OpenLayers.Control.LayerSwitcher({'ascending':false})); |
map.addControl(new OpenLayers.Control.MousePosition( | map.addControl(new OpenLayers.Control.MousePosition( |
{ | { |
displayProjection: new OpenLayers.Projection("EPSG:4326"), | displayProjection: new OpenLayers.Projection("EPSG:4326"), |
suffix: "__________________________________" | suffix: "__________________________________" |
})); | })); |
map.addControl(new OpenLayers.Control.MousePosition( | map.addControl(new OpenLayers.Control.MousePosition( |
{ | { |
displayProjection: new OpenLayers.Projection("EPSG:900913") | displayProjection: new OpenLayers.Projection("EPSG:900913") |
})); | })); |
if (navigator.geolocation) | if (navigator.geolocation) |
{ | { |
navigator.geolocation.getCurrentPosition(this.aaa, this.handleError); | navigator.geolocation.getCurrentPosition(this.aaa, this.handleError); |
} | } |
else | else |
{ | { |
var loki = LokiAPI(); | var loki = LokiAPI(); |
loki.onSuccess = function (location) | loki.onSuccess = function (location) |
{ | { |
var lonLat = new OpenLayers.LonLat(location.longitude, location.latitude).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()); | var lonLat = new OpenLayers.LonLat(location.longitude, location.latitude).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()); |
map.setCenter(lonLat, 13); | map.setCenter(lonLat, 13); |
} | } |
loki.onFailure = function (error) | loki.onFailure = function (error) |
{ | { |
loki.requestIPLocation(true, loki.NO_STREET_ADDRESS_LOOKUP) | loki.requestIPLocation(true, loki.NO_STREET_ADDRESS_LOOKUP) |
} | } |
loki.setKey('maxious.lambdacomplex.org'); | loki.setKey('maxious.lambdacomplex.org'); |
loki.requestLocation(true, loki.NO_STREET_ADDRESS_LOOKUP); | loki.requestLocation(true, loki.NO_STREET_ADDRESS_LOOKUP); |
} | } |
map.addLayer(new OpenLayers.Layer.GML("KML", "displayroutes.kml.php", { | map.addLayer(new OpenLayers.Layer.GML("KML", "displayroutes.kml.php", { |
format: OpenLayers.Format.KML, | format: OpenLayers.Format.KML, |
formatOptions: { | formatOptions: { |
extractStyles: true, | extractStyles: true, |
extractAttributes: true, | extractAttributes: true, |
maxDepth: 2 | maxDepth: 2 |
} | } |
})); | })); |
map.addLayer(new OpenLayers.Layer.Vector("KML", { | map.addLayer(new OpenLayers.Layer.Vector("KML", { |
projection: map.displayProjection, | projection: map.displayProjection, |
strategies: [new OpenLayers.Strategy.Fixed()], | strategies: [new OpenLayers.Strategy.Fixed()], |
protocol: new OpenLayers.Protocol.HTTP( | protocol: new OpenLayers.Protocol.HTTP( |
{ | { |
url: "displaystops.kml.php", | url: "displaystops.kml.php", |
format: new OpenLayers.Format.KML( | format: new OpenLayers.Format.KML( |
{ | { |
extractStyles: true, | extractStyles: true, |
extractAttributes: true | extractAttributes: true |
}) | }) |
}) | }) |
})); | })); |
} | } |
</script> | </script> |
</head> | </head> |
<body onload="init()"> | <body onload="init()"> |
<div id="map" width="100%" height="100%" class="smallmap"></div> | <div id="map" width="100%" height="100%" class="smallmap"></div> |
</body> | </body> |
</html> | </html> |
#!/usr/bin/ruby | #!/usr/bin/ruby |
require 'postgres' | require 'postgres' |
require 'highline.rb' | require 'highline.rb' |
include HighLine | include HighLine |
require 'rubygems' | |
require 'json' | |
require 'net/http' | |
def cbr_geocode(query) | |
base_url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?query=" | |
url = "#{base_url}#{URI.encode(query)}&bbox=-35.47,148.83,-35.16,149.25&return_location=true" | |
resp = Net::HTTP.get_response(URI.parse(url)) | |
data = resp.body | |
# we convert the returned JSON data to native Ruby | |
# data structure - a hash | |
result = JSON.parse(data) | |
# if the hash has 'Error' as a key, we raise an error | |
if result.has_key? 'Error' | |
raise "web service error" | |
end | |
return result | |
end | |
require 'yaml' | require 'yaml' |
require 'pp' | require 'pp' |
Dir.chdir("output") | Dir.chdir("output") |
def getTimePoints() | def getTimePoints() |
$time_points = [] | $time_points = [] |
$time_points_sources = Hash.new([]) | $time_points_sources = Hash.new([]) |
Dir.glob("*.yml") { |file| | Dir.glob("*.yml") { |file| |
timetable = YAML::load_file(file) | timetable = YAML::load_file(file) |
$time_points = $time_points | timetable["time_points"] | $time_points = $time_points | timetable["time_points"] |
timetable["time_points"].each do |timepoint| | timetable["time_points"].each do |timepoint| |
$time_points_sources[timepoint] = $time_points_sources[timepoint] | [ file ] | $time_points_sources[timepoint] = $time_points_sources[timepoint] | [ file ] |
end | end |
} | } |
end | end |
getTimePoints() | getTimePoints() |
$time_points.sort! | $time_points.sort! |
connbus = PGconn.connect("localhost", 5432, '', '', "bus", "postgres", | connbus = PGconn.connect("localhost", 5432, '', '', "bus", "postgres", |
"snmc") | "snmc") |
connosm = PGconn.connect("localhost", 5432, '', '', "openstreetmap", | connosm = PGconn.connect("localhost", 5432, '', '', "openstreetmap", |
"postgres", "snmc") | "postgres", "snmc") |
if ask_if("Insert Timing Point names to database?") | if ask_if("Insert Timing Point names to database?") |
$time_points.each do |time_point| | $time_points.each do |time_point| |
begin | begin |
time_point = time_point.gsub(/\\/, '\&\&').gsub(/'/, "''") | time_point = time_point.gsub(/\\/, '\&\&').gsub(/'/, "''") |
res = connbus.exec("INSERT INTO timing_point (name) VALUES ('#{time_point}')") | res = connbus.exec("INSERT INTO timing_point (name) VALUES ('#{time_point}')") |
puts "Put '#{time_point}' into DB" | puts "Put '#{time_point}' into DB" |
rescue PGError => e | rescue PGError => e |
puts "Error inserting '#{time_point}' to DB #{e}" | puts "Error inserting '#{time_point}' to DB #{e}" |
#conn.close() if conn | #conn.close() if conn |
end | end |
end | end |
end | end |
if ask_if("Fill null Timing Points from OSM bus_stop database?") | if ask_if("Fill null Timing Points from OSM bus_stop database?") |
begin | begin |
null_points = connbus.exec('SELECT name FROM timing_point WHERE lat IS null OR lng IS null;') | null_points = connbus.exec('SELECT name FROM timing_point WHERE lat IS null OR lng IS null;') |
rescue PGError => e | rescue PGError => e |
puts "Error selecting null points from DB #{e}" | puts "Error selecting null points from DB #{e}" |
#conn.close() if conn | #conn.close() if conn |
end | end |
null_points.each do |null_point_name| | null_points.each do |null_point_name| |
begin | begin |
name = null_point_name.to_s.gsub(/\\/, '\&\&').gsub(/'/, "''") | name = null_point_name.to_s.gsub(/\\/, '\&\&').gsub(/'/, "''") |
pp name | pp name |
matching_nodes = connosm.exec("Select * FROM (SELECT * from current_node_tags, | matching_nodes = connosm.exec("Select * FROM (SELECT * from current_node_tags, |
(Select id as ctagid FROM current_node_tags WHERE v LIKE '%#{name}%') as a | (Select id as ctagid FROM current_node_tags WHERE v LIKE '%#{name}%') as a |
where a.ctagid = current_node_tags.id) as ctags INNER JOIN current_nodes ON | where a.ctagid = current_node_tags.id) as ctags INNER JOIN current_nodes ON |
ctags.id=current_nodes.id") | ctags.id=current_nodes.id") |
rescue PGError => e | rescue PGError => e |
puts "Error selecting matching bus stops from DB #{e}" | puts "Error selecting matching bus stops from DB #{e}" |
#conn.close() if conn | #conn.close() if conn |
end | end |
suggested_nodes = Hash.new() | suggested_nodes = Hash.new() |
matching_nodes.each do |matching_node_row| | matching_nodes.each do |matching_node_row| |
#pp matching_node_row | #pp matching_node_row |
# 0 = id | # 0 = id |
# 1 = k | # 1 = k |
# 2 = v | # 2 = v |
# 3,4 = redundant ids | # 3,4 = redundant ids |
# 5 = lat*100000 | # 5 = lat*100000 |
# 6 = lng*100000 | # 6 = lng*100000 |
suggested_node = suggested_nodes.fetch(matching_node_row[0], {'lat' => Float(matching_node_row[5])/10000000, | suggested_node = suggested_nodes.fetch(matching_node_row[0], {'lat' => Float(matching_node_row[5])/10000000, |
'lng' => Float(matching_node_row[6])/10000000}) | 'lng' => Float(matching_node_row[6])/10000000}) |
if matching_node_row[1] == "ref" | if matching_node_row[1] == "ref" |
matching_node_row[1] = "loc_ref" | matching_node_row[1] = "loc_ref" |
end | end |
suggested_node[matching_node_row[1]] = matching_node_row[2] | suggested_node[matching_node_row[1]] = matching_node_row[2] |
suggested_nodes[matching_node_row[0]] = suggested_node | suggested_nodes[matching_node_row[0]] = suggested_node |
end | end |
pp suggested_nodes | pp suggested_nodes |
nodeID = ask("Enter selected node ID:", :string) | nodeID = ask("Enter selected node ID:", :string) |
if suggested_nodes.has_key?(nodeID) | if suggested_nodes.has_key?(nodeID) |
node = suggested_nodes.fetch(nodeID) | node = suggested_nodes.fetch(nodeID) |
guess = ask_if("Is this a guess?") | guess = ask_if("Is this a guess?") |
puts "Location #{node["lat"]},#{node["lng"]} for #{null_point_name}" | puts "Location #{node["lat"]},#{node["lng"]} for #{null_point_name}" |
begin | begin |
res = connbus.exec("UPDATE timing_point SET lat = #{node["lat"]*10000000}, lng = | res = connbus.exec("UPDATE timing_point SET lat = #{node["lat"]*10000000}, lng = |
#{node["lng"]*10000000},osm_node = |