More between points work + mobile UI work:
More between points work + mobile UI work:

  <?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;
  }
 
  /*
  * GeoPo Decode in PHP
  * @author : Shintaro Inagaki
  * @param $geopo (String)
  * @return $location (Array)
  */
  function geopoDecode($geopo) {
  // 64characters (number + big and small letter + hyphen + underscore)
  $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
  // Array for geolocation
  $location = array ();
 
  for ($i = 0; $i < strlen($geopo); $i++) {
  // What number of character that equal to a GeoPo code (0-63)
  $order = strpos($chars, substr($geopo, $i, 1));
  // Lat/Lng plus geolocation value of scale
  $location['lat'] = $location['lat'] + 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
  $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['scale'] = strlen($geopo);
 
  return $location;
  }
 
  $conn = pg_connect("dbname=bus user=postgres password=snmc");
  if (!$conn) {
  echo "An error occured.\n";
  exit;
  }
  $xml = simplexml_load_file("04-locatebetweenpoints.osm");
 
  /* Access the <rating> nodes of the first movie.
  * Output the rating scale, too. */
  foreach ($xml->node as $node) {
  $geoPo = geopoEncode((float)$node['lat'],(float)$node['lon']);
  $node['lat'] = (int) ((float)$node['lat']*10000000);
  $node['lon'] = (int) ((float)$node['lon']*10000000);
  echo($node['lat'].",".$node['lon']."=$geoPo<br>");
  $sql = "INSERT INTO stops (geohash, lat, lng) VALUES('$geoPo','{$node['lat']}','{$node['lon']}')";
  $result = pg_query($conn, $sql);
  if (!$result) {
  echo("Error in SQL query: " . pg_last_error() ."<br>\n");
  }
  flush();
 
  }
  ?>
 
file:b/betweenpoint.php (new)
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <script src="openlayers/OpenLayers.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">
 
  function init()
  {
  // create the ol map object
  var map = new OpenLayers.Map('map');
 
  var osmtiles = new OpenLayers.Layer.OSM("local", "http://127.0.0.1/Maps/OSM/${z}/${x}/${y}.png")
  // 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");
 
 
  <?php
  $conn = pg_connect("dbname=bus user=postgres password=snmc");
  if (!$conn) {
  echo "An error occured.\n";
  exit;
  }
  $result_stops = pg_query($conn, "Select * FROM stops");
 
  while ($stop = pg_fetch_assoc($result_stops)) {
  echo 'marker = new OpenLayers.Marker(new OpenLayers.LonLat('.($stop['lng']/10000000).",".($stop['lat']/10000000).')
  .transform(
  new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
  new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
  ));';
 
  echo '
  marker.id="'.$stop['geohash'].'";
  markers.addMarker(marker);
  marker.events.register("mousedown", marker, function() {
  document.getElementById("between_points").innerHTML += this.id+";";
  });