Add initial between point adding prototype
[bus.git] / betweenpoint.submit.php
blob:a/betweenpoint.submit.php -> blob:b/betweenpoint.submit.php
--- a/betweenpoint.submit.php
+++ b/betweenpoint.submit.php
@@ -1,1 +1,76 @@
+<?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();

+    

+}

+?>