<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>server/database_template.py</filename>
    </added>
    <added>
      <filename>server/test/test_server.py</filename>
    </added>
    <added>
      <filename>testall.sh</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -3,4 +3,4 @@
 *.pyc
 */*.pyc
 commit.msg
-
+server/database.py*</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -10,13 +10,14 @@ import unittest
 class TestAltitudeServerInteraction(unittest.TestCase):
   def testRoutes(self):
     for route in [route1, route2, route3, route4]:
-      expected_result = []
-      for point in route:
-        point['alt'] = 1
-        expected_result.append(point)
-
       result = server.server.altitude_profile(route)
-      self.assertEqual(result,expected_result)
+
+      for i in range(len(route)):
+        self.assertEqual(result[i]['lat'],route[i]['lat'])
+        self.assertEqual(result[i]['lon'],route[i]['lon'])
+        # We'll just trust the produced altitude; that tested elsewhere.
+        # Just make sure that an altitude is returned.
+        self.assert_(result[i]['alt'])
 
 if __name__ == '__main__':
     unittest.main()</diff>
      <filename>example_route_server/test/test_server.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,65 @@
 from SimpleXMLRPCServer import SimpleXMLRPCServer
 from numpy import ones
+from math import floor, ceil
+import database
+import pg
 
-# Create server
-server = SimpleXMLRPCServer((&quot;localhost&quot;, 8000))
-server.register_introspection_functions()
+##### XML_RPC functions ######
 
 def altitude_profile_function(route):
     # Just return a list of ones:
     # Can't use numpy for this.
     answer = []
     for point in route:
-      point['alt'] = 1
+      point['alt'] = getAltitude(point['lat'], point['lon'])
       answer.append(point)
 
     return answer
-server.register_function(altitude_profile_function, 'altitude_profile')
+    
+##### Database functions #####
+
+def connectToDatabase(database):
+    return pg.DB(dbname=database.db,host='localhost', user=database.db_user, passwd=database.db_pass)
+ 
+def getAltitude(lat,lon):
+  pos = posFromLatLon(lat,lon)
+  sql = db.query(&quot;SELECT alt FROM altitude WHERE pos = &quot; + str(pos))
+  res = sql.getresult()
+  return res[0][0]
+
+##### Helper functions ######
+
+def posFromLatLon(lat,lon):
+  # First we determine the tile and its offset, pos0:
+  lat0 = ceil(lat)
+  lon0 = floor(lon)
+  pos0 = (-lat0 * 360 + lon0) * 1200 * 1200
+  
+  # Then we determine the position within the tile
+  lat_pos = (ceil(lat) - lat) * 1200 * 1200
+  lon_pos = (lon - floor(lon)) * 1200
+
+  # We then round lat_pos and lon_pos in case the coordinate was somewhere
+  # between the grid points.
+
+  lat_pos = round(lat_pos / 1200) * 1200
+  lon_pos = round(lon_pos)
+
+  # Add them up to get the position:
+  pos = pos0 + lat_pos + lon_pos 
+
+  return int(pos) 
+
+# Whether testing or runnins, always connect to the database
+
+db = connectToDatabase(database)
 
 if __name__ == '__main__':
-  # Run the server's main loop
+  # Create server
+  server = SimpleXMLRPCServer((&quot;localhost&quot;, 8000))
+  server.register_introspection_functions()
+
+  server.register_function(altitude_profile_function, 'altitude_profile')
   try:
     print 'started server...'
     server.serve_forever()</diff>
      <filename>server/altitude.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>3b4f2afd2e89781138f5119537db95b9e42f556b</id>
    </parent>
  </parents>
  <author>
    <name>Sjors</name>
    <email>sjors@sprovoost.nl</email>
  </author>
  <url>http://github.com/Sjors/openstreetmap-route-altitude-profile/commit/557e0c234b5ee65efd1cfbcea627b6c32c31a7bc</url>
  <id>557e0c234b5ee65efd1cfbcea627b6c32c31a7bc</id>
  <committed-date>2008-06-05T06:29:17-07:00</committed-date>
  <authored-date>2008-06-05T06:29:17-07:00</authored-date>
  <message>Gets altitude from database.

* At first glance, there seems to be an error somewhere; route 3 should start at roughly 200 meters and go up several hundreds of meters, but this is not reflected in the result.</message>
  <tree>b17bb533a593923c84e4f9e20cb1c3888402e359</tree>
  <committer>
    <name>Sjors</name>
    <email>sjors@sprovoost.nl</email>
  </committer>
</commit>
