<?php | |
/* | |
* GeoPo Encode in PHP | |
* @author : Shintaro Inagaki | |
* @param $location (Array) | |
* @return $geopo (String) | |
*/ | |
function geopoEncode($lat, $lng) | |
{ | |
// 64characters (number + big and small letter + hyphen + underscore) | |
$chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"; | |
$geopo = ""; | |
$scale = 7; | |
// Change a degree measure to a decimal number | |
$lat = ($lat + 90) / 180 * pow(8, 10); | |
$lng = ($lng + 180) / 360 * pow(8, 10); | |
// Compute a GeoPo code from head and concatenate | |
for ($i = 0; $i < $scale; $i++) { | |
$geopo .= substr($chars, floor($lat / pow(8, 9 - $i) % 8) + floor($lng / pow(8, 9 - $i) % 8) * 8, 1); | |
} | |
return $geopo; | |
} | |
$conn = pg_connect("dbname=bus user=postgres password=snmc"); | |
if (!$conn) { | |
echo "An error occured.\n"; | |
exit; | |
} | |
if ($_REQUEST['newlatlng']) { | |
$latlng = explode(";", $_REQUEST['newlatlng']); | |
$lat = (float)$latlng[0]; | |
$lng = (float)$latlng[1]; | |
$geoPo = geopoEncode($lat, $lng); | |
$nodelat = (int)($lat * 10000000); | |
$nodelon = (int)($lng * 10000000); | |
echo($nodelat . "," . $nodelon . "=$geoPo<br>"); | |
$sql = "INSERT INTO stops (geohash,lat,lng) VALUES ('$geoPo', '$nodelat', '$nodelon')"; | |
$result = pg_query($conn, $sql); | |
if (!$result) { | |
echo("Error in SQL query: " . pg_last_error() . "<br>\n"); | |
} else { | |
echo "Inserted new point at $geoPo <br>"; | |
} | |
} | |
flush(); | |
?> |
<?php | |
$conn = pg_connect("dbname=bus user=postgres password=snmc"); | |
if (!$conn) { | |
echo "An error occured.\n"; | |
exit; | |
} | |
if ($_REQUEST['oldgeopo']) { | |
$sql = " DELETE from stops WHERE geohash = '{$_REQUEST['oldgeopo']}'"; | |
$result = pg_query($conn, $sql); | |
if (!$result) { | |
echo("Error in SQL query: " . pg_last_error() . "<br>\n"); | |
} else { | |
echo "Deleted {$_REQUEST['oldgeopo']}<br>"; | |
} | |
} | |
flush(); | |
?> |
<?php | <?php |
/* | /* |
* GeoPo Encode in PHP | * GeoPo Encode in PHP |
* @author : Shintaro Inagaki | * @author : Shintaro Inagaki |
* @param $location (Array) | * @param $location (Array) |
* @return $geopo (String) | * @return $geopo (String) |
*/ | */ |
function geopoEncode($lat, $lng) | function geopoEncode($lat, $lng) |
{ | { |
// 64characters (number + big and small letter + hyphen + underscore) | // 64characters (number + big and small letter + hyphen + underscore) |
$chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"; | $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"; |
$geopo = ""; | $geopo = ""; |
$scale = 7; | $scale = 7; |
// Change a degree measure to a decimal number | // Change a degree measure to a decimal number |
$lat = ($lat + 90) / 180 * pow(8, 10); | $lat = ($lat + 90) / 180 * pow(8, 10); |
$lng = ($lng + 180) / 360 * pow(8, 10); | $lng = ($lng + 180) / 360 * pow(8, 10); |
// Compute a GeoPo code from head and concatenate | // Compute a GeoPo code from head and concatenate |
for ($i = 0; $i < $scale; $i++) { | for ($i = 0; $i < $scale; $i++) { |
$geopo .= substr($chars, floor($lat / pow(8, 9 - $i) % 8) + floor($lng / pow(8, 9 - $i) % 8) * 8, 1); | $geopo .= substr($chars, floor($lat / pow(8, 9 - $i) % 8) + floor($lng / pow(8, 9 - $i) % 8) * 8, 1); |
} | } |
return $geopo; | return $geopo; |
} | } |
/* | /* |
* GeoPo Decode in PHP | * GeoPo Decode in PHP |
* @author : Shintaro Inagaki | * @author : Shintaro Inagaki |
* @param $geopo (String) | * @param $geopo (String) |
* @return $location (Array) | * @return $location (Array) |
*/ | */ |
function geopoDecode($geopo) | function geopoDecode($geopo) |
{ | { |
// 64characters (number + big and small letter + hyphen + underscore) | // 64characters (number + big and small letter + hyphen + underscore) |
$chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"; | $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"; |
// Array for geolocation | // Array for geolocation |
$location = array(); | $location = array(); |
for ($i = 0; $i < strlen($geopo); $i++) { | for ($i = 0; $i < strlen($geopo); $i++) { |
// What number of character that equal to a GeoPo code (0-63) | // What number of character that equal to a GeoPo code (0-63) |
$order = strpos($chars, substr($geopo, $i, 1)); | $order = strpos($chars, substr($geopo, $i, 1)); |
// Lat/Lng plus geolocation value of scale | // Lat/Lng plus geolocation value of scale |
$location['lat'] = $location['lat'] + floor($order % 8) * pow(8, 9 - $i); | $location['lat'] = $location['lat'] + floor($order % 8) * pow(8, 9 - $i); |
$location['lng'] = $location['lng'] + floor($order / 8) * pow(8, 9 - $i); | $location['lng'] = $location['lng'] + floor($order / 8) * pow(8, 9 - $i); |
} | } |
// Change a decimal number to a degree measure, and plus revised value that shift center of area | // Change a decimal number to a degree measure, and plus revised value that shift center of area |
$location['lat'] = $location['lat'] * 180 / pow(8, 10) + 180 / pow(8, strlen($geopo)) / 2 - 90; | $location['lat'] = $location['lat'] * 180 / pow(8, 10) + 180 / pow(8, strlen($geopo)) / 2 - 90; |
$location['lng'] = $location['lng'] * 360 / pow(8, 10) + 360 / pow(8, strlen($geopo)) / 2 - 180; | $location['lng'] = $location['lng'] * 360 / pow(8, 10) + 360 / pow(8, strlen($geopo)) / 2 - 180; |
$location['scale'] = strlen($geopo); | $location['scale'] = strlen($geopo); |
return $location; | return $location; |
} | } |
$conn = pg_connect("dbname=bus user=postgres password=snmc"); | $conn = pg_connect("dbname=bus user=postgres password=snmc"); |
if (!$conn) { | if (!$conn) { |
echo "An error occured.\n"; | echo "An error occured.\n"; |
exit; | exit; |
} | } |
if ($_REQUEST['newlatlng']) { | if ($_REQUEST['newlatlng']) { |
$latlng = explode(";", $_REQUEST['newlatlng']); | $latlng = explode(";", $_REQUEST['newlatlng']); |
$lat = (float)$latlng[0]; | $lat = (float)$latlng[0]; |
$lng = (float)$latlng[1]; | $lng = (float)$latlng[1]; |
$geoPo = geopoEncode($lat, $lng); | $geoPo = geopoEncode($lat, $lng); |
$nodelat = (int)($lat * 10000000); | $nodelat = (int)($lat * 10000000); |
$nodelon = (int)($lng * 10000000); | $nodelon = (int)($lng * 10000000); |
echo($nodelat . "," . $nodelon . "=$geoPo<br>"); | echo($nodelat . "," . $nodelon . "=$geoPo<br>"); |
$sql = "UPDATE stops SET geohash='$geoPo', lat='$nodelat', lng='$nodelon' WHERE geohash = '{$_REQUEST['oldgeopo']}'"; | $sql = "UPDATE stops SET geohash='$geoPo', lat='$nodelat', lng='$nodelon', name=null, suburb=null WHERE geohash = '{$_REQUEST['oldgeopo']}'"; |
$result = pg_query($conn, $sql); | $result = pg_query($conn, $sql); |
if (!$result) { | if (!$result) { |
echo("Error in SQL query: " . pg_last_error() . "<br>\n"); | echo("Error in SQL query: " . pg_last_error() . "<br>\n"); |
} else if (pg_affected_rows($result) == 0) { | |
echo ("Error 0 points moved, please refresh page and try again"); | |
} else { | } else { |
echo $_REQUEST['oldgeopo'] . " replaced with $geoPo <br>"; | echo $_REQUEST['oldgeopo'] . " replaced with $geoPo <br>"; |
$updatedroutes = 0; | $updatedroutes = 0; |
$result_outdatedroutes = pg_query($conn, "Select * FROM between_stops where points LIKE '%" . $_REQUEST['oldgeopo'] . ";%'"); | $result_outdatedroutes = pg_query($conn, "Select * FROM between_stops where points LIKE '%" . $_REQUEST['oldgeopo'] . ";%'"); |
while ($outdatedroute = pg_fetch_assoc($result_outdatedroutes)) { | while ($outdatedroute = pg_fetch_assoc($result_outdatedroutes)) { |
$newpoints = str_replace($_REQUEST['oldgeopo'], $geoPo, $outdatedroute['points']); | $newpoints = str_replace($_REQUEST['oldgeopo'], $geoPo, $outdatedroute['points']); |
$sql = "UPDATE between_stops set points='$newpoints' where fromlocation = '{$outdatedroute['fromlocation']}' AND tolocation = '{$outdatedroute['tolocation']}' "; | $sql = "UPDATE between_stops set points='$newpoints' where fromlocation = '{$outdatedroute['fromlocation']}' AND tolocation = '{$outdatedroute['tolocation']}' "; |
$result = pg_query($conn, $sql); | $result = pg_query($conn, $sql); |
if (!$result) { | if (!$result) { |
echo("Error in SQL query: " . pg_last_error() . "<br>\n"); | echo("Error in SQL query: " . pg_last_error() . "<br>\n"); |
} | } |
$updatedroutes++; | $updatedroutes++; |
} | } |
echo "updated $updatedroutes routes<br>"; | echo "updated $updatedroutes routes<br>"; |
} | } |
} | } |
flush(); | flush(); |
?> | ?> |
<html xmlns="http://www.w3.org/1999/xhtml"> | <html xmlns="http://www.w3.org/1999/xhtml"> |
<head> | <head> |
<script src="openlayers/OpenLayers.js"></script> | <script src="openlayers/OpenLayers.js"></script> |
<SCRIPT TYPE="text/javascript" SRC="OpenStreetMap.js"></SCRIPT> | <SCRIPT TYPE="text/javascript" SRC="OpenStreetMap.js"></SCRIPT> |
<script type="text/javascript" src="jquery.1.3.2.min.js"></script> | <script type="text/javascript" src="jquery.1.3.2.min.js"></script> |
<script type="text/javascript"> | <script type="text/javascript"> |
function init() | function init() |
{ | { |
// create the ol map object | // create the ol map object |
var map = new OpenLayers.Map('map'); | var map = new OpenLayers.Map('map'); |
var osmtiles = new OpenLayers.Layer.OSM("local", "http://10.0.1.154/tiles/${z}/${x}/${y}.png") | var osmtiles = new OpenLayers.Layer.OSM("local", "http://10.0.1.154/tiles/${z}/${x}/${y}.png") |
// use http://open.atlas.free.fr/GMapsTransparenciesImgOver.php and http://code.google.com/p/googletilecutter/ to make tiles | // use http://open.atlas.free.fr/GMapsTransparenciesImgOver.php and http://code.google.com/p/googletilecutter/ to make tiles |
markers = new OpenLayers.Layer.Markers("Between Stop Markers"); | markers = new OpenLayers.Layer.Markers("Between Stop Markers"); |
//hanlde mousedown on regions that are not points by reporting latlng | //hanlde mousedown on regions that are not points by reporting latlng |
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { | OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { |
defaultHandlerOptions: { | defaultHandlerOptions: { |
'single': true, | 'single': true, |
'double': false, | 'double': false, |
'pixelTolerance': 0, | 'pixelTolerance': 0, |
'stopSingle': false, | 'stopSingle': false, |
'stopDouble': false | 'stopDouble': false |
}, | }, |
initialize: function(options) { | initialize: function(options) { |
this.handlerOptions = OpenLayers.Util.extend( | this.handlerOptions = OpenLayers.Util.extend( |
{}, this.defaultHandlerOptions | {}, this.defaultHandlerOptions |
); | ); |
OpenLayers.Control.prototype.initialize.apply( | OpenLayers.Control.prototype.initialize.apply( |
this, arguments | this, arguments |
); | ); |
this.handler = new OpenLayers.Handler.Click( | this.handler = new OpenLayers.Handler.Click( |
this, { | this, { |
'click': this.trigger | 'click': this.trigger |
}, this.handlerOptions | }, this.handlerOptions |
); | ); |
}, | }, |
trigger: function(e) { | trigger: function(e) { |
var lonlat = map.getLonLatFromViewPortPx(e.xy).transform( | var lonlat = map.getLonLatFromViewPortPx(e.xy).transform( |
new OpenLayers.Projection("EPSG:900913"), | new OpenLayers.Projection("EPSG:900913"), |
new OpenLayers.Projection("EPSG:4326") | new OpenLayers.Projection("EPSG:4326") |
); | ); |
$('form input[name="newlatlng"]').val(lonlat.lat + ";" + lonlat.lon ); | $('form input[name="newlatlng"]').val(lonlat.lat + ";" + lonlat.lon ); |
} | } |
}); | }); |
var click = new OpenLayers.Control.Click(); | var click = new OpenLayers.Control.Click(); |
map.addControl(click); | map.addControl(click); |
click.activate(); | click.activate(); |
<?php | <?php |
$conn = pg_connect("dbname=bus user=postgres password=snmc"); | $conn = pg_connect("dbname=bus user=postgres password=snmc"); |
if (!$conn) { | if (!$conn) { |
echo "An error occured.\n"; | echo "An error occured.\n"; |
exit; | exit; |
} | } |
$result_stops = pg_query($conn, "Select * FROM stops"); | $result_stops = pg_query($conn, "Select * FROM stops"); |
while ($stop = pg_fetch_assoc($result_stops)) { | while ($stop = pg_fetch_assoc($result_stops)) { |
echo 'marker = new OpenLayers.Marker(new OpenLayers.LonLat(' . ($stop['lng'] / 10000000) . "," . ($stop['lat'] / 10000000) . ') | echo 'marker = new OpenLayers.Marker(new OpenLayers.LonLat(' . ($stop['lng'] / 10000000) . "," . ($stop['lat'] / 10000000) . ') |
.transform( | .transform( |
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984 | new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984 |
new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection | new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection |
));'; | ));'; |
echo ' | echo ' |
marker.id="' . $stop['geohash'] . '"; | marker.id="' . $stop['geohash'] . '"; |
markers.addMarker(marker); | markers.addMarker(marker); |
marker.events.register("mousedown", marker, function() { | marker.events.register("mousedown", marker, function() { |
document.getElementById("between_points").innerHTML += this.id+";"; | document.getElementById("between_points").innerHTML += this.id+";"; |
$(\'form input[name="oldgeopo"]\').val(this.id); | $(\'form input[name="oldgeopo"]\').val(this.id); |
}); | }); |
'; | '; |
} | } |
?> | ?> |
var timeicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png",new OpenLayers.Size(32,32)); | var timeicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png",new OpenLayers.Size(32,32)); |
var timepoints = new OpenLayers.Layer.GeoRSS("Timing Points", "displaytimepoints.georss.php", { icon: timeicon }); | var timepoints = new OpenLayers.Layer.GeoRSS("Timing Points", "displaytimepoints.georss.php", { icon: timeicon }); |
map.addLayers([osmtiles, markers,timepoints]); | map.addLayers([osmtiles, markers,timepoints]); |
map.addControl(new OpenLayers.Control.LayerSwitcher()); | map.addControl(new OpenLayers.Control.LayerSwitcher()); |
map.zoomToExtent(markers.getDataExtent()); | map.zoomToExtent(markers.getDataExtent()); |
} | } |
</script> | </script> |
<script type="text/javascript"> | <script type="text/javascript"> |
function submitBetween () { | function submitBetween () { |
$.post("betweenpoint.submit.php", $("#inputform").serialize(), function(html){ | $.post("betweenpoint.submit.php", $("#inputform").serialize(), function(html){ |
$("#response").html(html); | $("#response").html(html); |
//clearForms(); | //clearForms(); |
return false; | return false; |
}); | }); |
}; | }; |
function submitMove () { | function submitMove () { |
$.post("betweenpoint.move.php", $("#moveform").serialize(), function(html){ | $.post("betweenpoint.move.php", $("#moveform").serialize(), function(html){ |
$("#response").html(html); | $("#response").html(html); |
clearForms(); | |
return false; | |
}); | |
}; | |
function submitDelete () { | |
$.post("betweenpoint.delete.php", $("#moveform").serialize(), function(html){ | |
$("#response").html(html); | |
clearForms(); | |
return false; | |
}); | |
}; | |
function submitAdd () { | |
$.post("betweenpoint.add.php", $("#moveform").serialize(), function(html){ | |
$("#response").html(html); | |
clearForms(); | |
return false; | return false; |
}); | }); |
}; | }; |
function OnChange(dropdown) | function OnChange(dropdown) |
{ | { |
var myindex = dropdown.selectedIndex | var myindex = dropdown.selectedIndex |
var selValue = dropdown.options[myindex].value; | var selValue = dropdown.options[myindex].value; |
$("#routes").val(selValue.split(":",2)[0]); | $("#routes").val(selValue.split(":",2)[0]); |
fromto = selValue.split(":",2)[1]; | fromto = selValue.split(":",2)[1]; |
$("#from").val(fromto.split("->",2)[0]); | $("#from").val(fromto.split("->",2)[0]); |
$("#to").val(fromto.split("->",2)[1]); | $("#to").val(fromto.split("->",2)[1]); |
document.getElementById("between_points").innerHTML = ""; | document.getElementById("between_points").innerHTML = ""; |
return true; | return true; |
} | } |
// function will clear input elements on each form | // function will clear input elements on each form |
function clearForms(){ | function clearForms(){ |
document.getElementById("between_points").innerHTML = ""; | document.getElementById("between_points").innerHTML = ""; |
// declare element type | // declare element type |
var type = null; | var type = null; |
// loop through forms on HTML page | // loop through forms on HTML page |
for (var x=0; x<document.forms.length; x++){ | for (var x=0; x<document.forms.length; x++){ |
// loop through each element on form | // loop through each element on form |
for (var y=0; y<document.forms[x].elements.length; y++){ | for (var y=0; y<document.forms[x].elements.length; y++){ |
// define element type | // define element type |
type = document.forms[x].elements[y].type | type = document.forms[x].elements[y].type |
// alert before erasing form element | // alert before erasing form element |
//alert('form='+x+' element='+y+' type='+type); | //alert('form='+x+' element='+y+' type='+type); |
// switch on element type | // switch on element type |
switch(type){ | switch(type){ |
case "text": | case "text": |
case "textarea": | case "textarea": |
case "password": | case "password": |
//case "hidden": | //case "hidden": |
document.forms[x].elements[y].value = ""; | document.forms[x].elements[y].value = ""; |
break; | break; |
case "radio": | case "radio": |
case "checkbox": | case "checkbox": |
document.forms[x].elements[y].checked = true; | document.forms[x].elements[y].checked = true; |
break; | break; |
case "select-one": | case "select-one": |
document.forms[x].elements[y].options[0].selected = true; | document.forms[x].elements[y].options[0].selected = true; |
break; | break; |
case "select-multiple": | case "select-multiple": |
for (z=0; z<document.forms[x].elements[y].options.length; z++){ | for (z=0; z<document.forms[x].elements[y].options.length; z++){ |
document.forms[x].elements[y].options[z].selected = false; | document.forms[x].elements[y].options[z].selected = false; |
} | } |
break; | break; |
} | } |
} | } |
} | } |
} | } |
</script> | </script> |
</head> | </head> |
<body onload="init()"> | <body onload="init()"> |
<div id="inputpane"><form id="inputform"> | <div id="inputpane"><form id="inputform"> |
<select name=selectPair onchange='OnChange(this.form.selectPair);'> | <select name=selectPair onchange='OnChange(this.form.selectPair);'> |
<option>Select a from/to pair...</option> | <option>Select a from/to pair...</option> |
<?php | <?php |
include('spyc/spyc.php'); | include('spyc/spyc.php'); |
//$timetable = Spyc::YAMLLoad('../spyc.yaml'); | //$timetable = Spyc::YAMLLoad('../spyc.yaml'); |
$path = "maxious-canberra-transit-feed/output/"; | $path = "maxious-canberra-transit-feed/output/"; |
$dhandle = opendir("maxious-canberra-transit-feed/output/"); | $dhandle = opendir("maxious-canberra-transit-feed/output/"); |
// define an array to hold the files | // define an array to hold the files |
$files = array(); | $files = array(); |
$paths = array(); | $paths = array(); |
if ($dhandle) { | if ($dhandle) { |
// loop through all of the files | // loop through all of the files |
while (false !== ($fname = readdir($dhandle))) { | while (false !== ($fname = readdir($dhandle))) { |
if (($fname != '.') && ($fname != '..')) { | if (($fname != '.') && ($fname != '..')) { |
$timetable = Spyc::YAMLLoad("maxious-canberra-transit-feed/output/" . $fname); | $timetable = Spyc::YAMLLoad("maxious-canberra-transit-feed/output/" . $fname); |
// Strip off individual platforms because it usually doesn't matter for routes | // Strip off individual platforms because it usually doesn't matter for routes |
$timetable["time_points"] = preg_replace("/\(Platform.*/","",$timetable["time_points"]); | $timetable["time_points"] = preg_replace("/\(Platform.*/","",$timetable["time_points"]); |
for ($i = 0; $i < sizeof($timetable["time_points"]) - 1; $i++) { | for ($i = 0; $i < sizeof($timetable["time_points"]) - 1; $i++) { |
$key = trim($timetable["time_points"][$i]) . "->" . trim($timetable["time_points"][$i + 1]); | $key = trim($timetable["time_points"][$i]) . "->" . trim($timetable["time_points"][$i + 1]); |
if (strstr($paths[$key],";" . $timetable["short_name"] . ";") === false) | if (strstr($paths[$key],";" . $timetable["short_name"] . ";") === false) |
@$paths[$key] .= $timetable["short_name"] . ";"; | @$paths[$key] .= $timetable["short_name"] . ";"; |
} | } |
} | } |
} | } |
} | } |
ksort($paths); | ksort($paths); |
$completedPaths = array(); | $completedPaths = array(); |
$result_betweenstops = pg_query($conn, "Select * FROM between_stops"); | $result_betweenstops = pg_query($conn, "Select * FROM between_stops"); |
while ($path = pg_fetch_assoc($result_betweenstops)) { | while ($path = pg_fetch_assoc($result_betweenstops)) { |
$key = trim($path['fromlocation']) . "->" . trim($path['tolocation']); | $key = trim($path['fromlocation']) . "->" . trim($path['tolocation']); |
$completedPaths[$key].= trim($path['routes']); | $completedPaths[$key].= trim($path['routes']); |
} | } |
foreach ($paths as $path => $routes) { | foreach ($paths as $path => $routes) { |
if (!in_array($path, array_keys($completedPaths))) { | if (!in_array($path, array_keys($completedPaths))) { |
echo "<option value=\"$routes:$path\">" . sizeof(explode(";", $routes)) . " $path</option>\n"; | echo "<option value=\"$routes:$path\">" . sizeof(explode(";", $routes)) . " $path</option>\n"; |
} else { | } else { |
$completedRoutes = explode(";", $completedPaths[$path]); | $completedRoutes = explode(";", $completedPaths[$path]); |
$incompleteRoutes = ""; | $incompleteRoutes = ""; |
foreach (explode(";", $routes) as $route) { | foreach (explode(";", $routes) as $route) { |
if (!in_array($route,$completedRoutes) && strstr($incompleteRoutes,';'.$route.';') === false) { | if (!in_array($route,$completedRoutes) && strstr($incompleteRoutes,';'.$route.';') === false) { |
$incompleteRoutes .= $route.';'; | $incompleteRoutes .= $route.';'; |
} | } |
} | } |
if ($incompleteRoutes != "") { | if ($incompleteRoutes != "") { |
echo "<option value=\"$incompleteRoutes:$path\">" . sizeof(explode(";", $incompleteRoutes)) . " $path</option>\n"; | echo "<option value=\"$incompleteRoutes:$path\">" . sizeof(explode(";", $incompleteRoutes)) . " $path</option>\n"; |
} | } |
} | } |
} | } |
?> | ?> |
</select> | </select> |
from <input type="text" name="from" id="from"/> | from <input type="text" name="from" id="from"/> |
to <input type="text" name="to" id="to"/> | to <input type="text" name="to" id="to"/> |
<br> | <br> |
on routes <input type="text" name="routes" id="routes"/> | on routes <input type="text" name="routes" id="routes"/> |
Reverse? <input type="checkbox" name="reverse" id="reverse" checked="true"/> | Reverse? <input type="checkbox" name="reverse" id="reverse" checked="true"/> |
<input type="button" onclick="javascript:submitBetween()" value="Submit!"> | <input type="button" onclick="javascript:submitBetween()" value="Submit!"> |
<input type="button" value="Clear" onclick="javascript:clearForms()" title="Start clearForms() JavaScript function"> | <input type="button" value="Clear" onclick="javascript:clearForms()" title="Start clearForms() JavaScript function"> |
<br> | <br> |
<textarea name="between_points" id="between_points" rows="1" cols="120"></textarea> | <textarea name="between_points" id="between_points" rows="1" cols="120"></textarea> |
</form> | </form> |
<form id="moveform"> | <form id="moveform"> |
oldgeopo <input type="text" name="oldgeopo" id="oldgeopo"/> | oldgeopo <input type="text" name="oldgeopo" id="oldgeopo"/> |
newlatlng <input type="text" name="newlatlng" id="newlatlng" size="60"/> | newlatlng <input type="text" name="newlatlng" id="newlatlng" size="60"/> |
<input type="button" onclick="javascript:submitMove()" value="Move!"> | <input type="button" onclick="javascript:submitMove()" value="Move!"> |
<input type="button" onclick="javascript:submitAdd()" value="Add!"> | |
<input type="button" onclick="javascript:submitDelete()" value="Delete!"> | |
</form> | </form> |
<div id="response"> | <div id="response"> |
<!-- Our message will be echoed out here --> | <!-- Our message will be echoed out here --> |
</div> | </div> |
</div> | </div> |
<div id="map" width="100%" height="100%"></div> | <div id="map" width="100%" height="100%"></div> |
</body> | </body> |
</html> | </html> |
<html xmlns="http://www.w3.org/1999/xhtml"> | <html xmlns="http://www.w3.org/1999/xhtml"> |
<head> | <head> |
<script src="openlayers/OpenLayers.js"></script> | <script src="openlayers/OpenLayers.js"></script> |
<SCRIPT TYPE="text/javascript" SRC="OpenStreetMap.js"></SCRIPT> | <SCRIPT TYPE="text/javascript" SRC="OpenStreetMap.js"></SCRIPT> |
<script type="text/javascript"> | <script type="text/javascript"> |
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); |
// set up the map options | // set up the map options |
var options = | var options = |
{ | { |
maxExtent: extent, | maxExtent: extent, |
numZoomLevels: 20, | numZoomLevels: 20, |
}; | }; |
// create the ol map object | // create the ol map object |
var map = new OpenLayers.Map('map', options); | var map = new OpenLayers.Map('map', options); |
var osmtiles = new OpenLayers.Layer.OSM("local", "http://localhost/tiles/${z}/${x}/${y}.png"); | var osmtiles = new OpenLayers.Layer.OSM("local", "http://10.0.1.154/tiles/${z}/${x}/${y}.png"); |
// use http://open.atlas.free.fr/GMapsTransparenciesImgOver.php and http://code.google.com/p/googletilecutter/ to make tiles | // use http://open.atlas.free.fr/GMapsTransparenciesImgOver.php and http://code.google.com/p/googletilecutter/ to make tiles |
var graphic = new OpenLayers.Layer.Image( | var graphic = new OpenLayers.Layer.Image( |
'Weekday Bus Map', | 'Weekday Bus Map', |
'weekday_bus_map.png', | 'weekday_bus_map.png', |
new OpenLayers.Bounds(149.0, -35.47, 149.16, -35.16), | new OpenLayers.Bounds(149.0, -35.47, 149.16, -35.16), |
new OpenLayers.Size(1191, 2268), | new OpenLayers.Size(1191, 2268), |
{baseLayer: false} | {baseLayer: false} |
); | ); |
var nearmap = new OpenLayers.Layer.OSM.NearMap("NearMap"); | var nearmap = new OpenLayers.Layer.OSM.NearMap("NearMap"); |
var routes = new OpenLayers.Layer.GML("Routes", "displayroutes.kml.php", { | var routes = new OpenLayers.Layer.GML("Routes", "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 |
} | } |
}); | }); |
var stopicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png",new OpenLayers.Size(32,32)); | var stopicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png",new OpenLayers.Size(32,32)); |
var stops = new OpenLayers.Layer.GeoRSS("Stops", "displaystops.georss.php", { icon: stopicon }); | var stops = new OpenLayers.Layer.GeoRSS("Stops", "displaystops.georss.php", { icon: stopicon }); |
var timeicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png",new OpenLayers.Size(32,32)); | var timeicon = new OpenLayers.Icon("http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png",new OpenLayers.Size(32,32)); |
var timepoints = new OpenLayers.Layer.GeoRSS("Timing Points", "displaytimepoints.georss.php", { icon: timeicon }); | var timepoints = new OpenLayers.Layer.GeoRSS("Timing Points", "displaytimepoints.georss.php", { icon: timeicon }); |
map.addLayers([osmtiles,stops,routes,timepoints,nearmap]); | map.addLayers([osmtiles,stops,routes,timepoints,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") |
})); | })); |
} | } |
</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> |
<?php | <?php |
header('Content-Type: application/xml'); | header('Content-Type: application/xml'); |
echo "<?xml version='1.0' encoding='UTF-8'?> | echo "<?xml version='1.0' encoding='UTF-8'?> |
<osm version='0.6' generator='xapi: OSM Extended API 2.0' xmlns:xapi='http://www.informationfreeway.org/xapi/0.6' | <osm version='0.6' generator='xapi: OSM Extended API 2.0' xmlns:xapi='http://www.informationfreeway.org/xapi/0.6' |
xapi:uri='/api/0.6/*[bbox=148.98,-35.48,149.25,-35.15]' xapi:planetDate='20100630' xapi:copyright='2010 OpenStreetMap contributors' | xapi:uri='/api/0.6/*[bbox=148.98,-35.48,149.21,-35.15]' xapi:planetDate='20100630' xapi:copyright='2010 OpenStreetMap contributors' |
xapi:license='Creative commons CC-BY-SA 2.0' xapi:bugs='For assistance or to report bugs contact 80n80n@gmail.com' xapi:instance='zappyHyper'> | xapi:license='Creative commons CC-BY-SA 2.0' xapi:bugs='For assistance or to report bugs contact 80n80n@gmail.com' xapi:instance='zappyHyper'> |
"; | "; |
$conn = pg_connect("dbname=openstreetmap user=postgres password=snmc"); | $conn = pg_connect("dbname=openstreetmap user=postgres password=snmc"); |
if (!$conn) { | if (!$conn) { |
echo "An error occured.\n"; | echo "An error occured.\n"; |
exit; | exit; |
} | } |
$result_stops = pg_query($conn, "Select * FROM current_node_tags INNER JOIN current_nodes ON | $result_stops = pg_query($conn, "Select * FROM current_node_tags INNER JOIN current_nodes ON |
current_node_tags.id=current_nodes.id WHERE v LIKE '%bus%' "); | current_node_tags.id=current_nodes.id WHERE v LIKE '%bus%' "); |
if (!$result_stops) { | if (!$result_stops) { |
echo "An stops retirieve error occured.\n"; | echo "An stops retirieve error occured.\n"; |
exit; | exit; |
} | } |
while ($stop = pg_fetch_assoc($result_stops)) { | while ($stop = pg_fetch_assoc($result_stops)) { |
$stop['latitude'] = $stop['latitude']/10000000; | $stop['latitude'] = $stop['latitude']/10000000; |
$stop['longitude'] = $stop['longitude']/10000000; | $stop['longitude'] = $stop['longitude']/10000000; |
echo "<node id='{$stop['id']}' lat='{$stop['latitude']}' lon='{$stop['longitude']}' version='1' changeset='242919' | echo "<node id='{$stop['id']}' lat='{$stop['latitude']}' lon='{$stop['longitude']}' version='1' changeset='242919' |
user='latch' uid='6647' visible='true' timestamp='2007-08-22T05:03:00Z'>\n"; | user='latch' uid='6647' visible='true' timestamp='2007-08-22T05:03:00Z'>\n"; |
$result_stopkeys = pg_query($conn, "SELECT * from current_node_tags where id = {$stop['id']};"); | $result_stopkeys = pg_query($conn, "SELECT * from current_node_tags where id = {$stop['id']};"); |
if (!$result_stopkeys) { | if (!$result_stopkeys) { |
echo "An stops keys retirieve error occured.\n"; | echo "An stops keys retirieve error occured.\n"; |
exit; | exit; |
} | } |
$name = ""; | $name = ""; |
while ($stopkeys = pg_fetch_assoc($result_stopkeys)) { | while ($stopkeys = pg_fetch_assoc($result_stopkeys)) { |
echo "<tag k='{$stopkeys['k']}' v='".htmlentities($stopkeys['v'])."'/>\n"; | echo "<tag k='{$stopkeys['k']}' v='".htmlentities($stopkeys['v'])."'/>\n"; |
} | } |
echo "</node>\n"; | echo "</node>\n"; |
} | } |
echo "\n</osm>\n"; | echo "\n</osm>\n"; |
?> | ?> |
<?php | <?php |
function getPage($url) | function getPage($url) |
{ | { |
$ch = curl_init($url); | $ch = curl_init($url); |
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); | curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); |
curl_setopt( $ch, CURLOPT_HEADER, 0 ); | curl_setopt( $ch, CURLOPT_HEADER, 0 ); |
$page = curl_exec($ch); | $page = curl_exec($ch); |
curl_close($ch); | curl_close($ch); |
return $page; | return $page; |
} | } |
// | // |
// http://developers.cloudmade.com/wiki/geocoding-http-api/Documentation | // http://developers.cloudmade.com/wiki/geocoding-http-api/Documentation |
$conn = pg_connect("dbname=bus user=postgres password=snmc"); | $conn = pg_connect("dbname=bus user=postgres password=snmc"); |
if (!$conn) { | if (!$conn) { |
echo "An error occured.\n"; | echo "An error occured.\n"; |
exit; | exit; |
} | } |
$sql = "Select * from stops where name is null or suburb is null"; | $sql = "Select * from stops where name is null or suburb is null"; |
$result_stops = pg_query($conn, $sql); | $result_stops = pg_query($conn, $sql); |
if (!$result_stops) { | if (!$result_stops) { |
echo("Error in SQL query: " . pg_last_error() ."<br>\n"); | echo("Error in SQL query: " . pg_last_error() ."<br>\n"); |
} | } |
while ($stop = pg_fetch_assoc($result_stops)) { | while ($stop = pg_fetch_assoc($result_stops)) { |
if ($stop['name'] == "") { | if ($stop['name'] == "") { |
echo "Processing ".$stop['geohash'] . " streetname ... "; | echo "Processing ".$stop['geohash'] . " streetname ... "; |
$url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?around=".($stop['lat']/10000000).",".($stop['lng']/10000000)."&distance=closest&object_type=road"; | $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?around=".($stop['lat']/10000000).",".($stop['lng']/10000000)."&distance=closest&object_type=road"; |
$contents = json_decode(getPage($url)); | $contents = json_decode(getPage($url)); |
print_r($contents); | //print_r($contents); |
$name = $contents->features[0]->properties->name; | $name = $contents->features[0]->properties->name; |
//todo suburb/locality select * from suburbs where the_geom @> 'POINT(149.075704592122 -35.21751569325)'::geometry | |
echo "Saving $name ! <br>" ; | echo "Saving $name ! <br>" ; |
$result_save = pg_query($conn, "UPDATE stops set name = '".pg_escape_string($name)."' where geohash = '{$stop['geohash']}' "); | $result_save = pg_query($conn, "UPDATE stops set name = '".pg_escape_string($name)."' where geohash = '{$stop['geohash']}' "); |
if (!$result_save) { | if (!$result_save) { |
echo("Error in SQL query: " . pg_last_error() ."<br>\n"); | echo("Error in SQL query: " . pg_last_error() ."<br>\n"); |
} | } |
} | } |
if ($stop['suburb'] == "") { | if ($stop['suburb'] == "") { |
echo "Processing ".$stop['geohash'] . " suburb ... "; | echo "Processing ".$stop['geohash'] . " suburb ... "; |
$sql = "select * from suburbs where the_geom @> 'POINT(".($stop['lng']/10000000)." ".($stop['lat']/10000000).")'::geometry"; | $sql = "select * from suburbs where the_geom @> 'POINT(".($stop['lng']/10000000)." ".($stop['lat']/10000000).")'::geometry"; |
$result_suburbs = pg_query($conn, $sql); | $result_suburbs = pg_query($conn, $sql); |
if (!$result_suburbs) { | if (!$result_suburbs) { |
echo("Error in SQL query: " . pg_last_error() ."<br>\n"); | echo("Error in SQL query: " . pg_last_error() ."<br>\n"); |
} | } |
$suburbs = ""; | $suburbs = ""; |
while ($suburb = pg_fetch_assoc($result_suburbs)) { | while ($suburb = pg_fetch_assoc($result_suburbs)) { |
$suburbs .= $suburb['name_2006'].";"; | $suburbs .= $suburb['name_2006'].";"; |
} | } |
echo "Saving $suburbs ! <br>" ; | echo "Saving $suburbs ! <br>" ; |
$result_save = pg_query($conn, "UPDATE stops set suburb = '".pg_escape_string($suburbs)."' where geohash = '{$stop['geohash']}' "); | $result_save = pg_query($conn, "UPDATE stops set suburb = '".pg_escape_string($suburbs)."' where geohash = '{$stop['geohash']}' "); |
if (!$result_save) { | if (!$result_save) { |
echo("Error in SQL query: " . pg_last_error() ."<br>\n"); | echo("Error in SQL query: " . pg_last_error() ."<br>\n"); |
} | } |
} | } |
flush(); | flush(); |
} | } |
?> | ?> |