Add and Remove operations for between stops
Add and Remove operations for between stops

  <?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();
} }
   
?> ?>