Your SlideShare is downloading. ×
Fun with Maps and PHP
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Fun with Maps and PHP

4,919
views

Published on

On a recent road trip around Iceland, my friends (PHP developers Andrei and Helgi) and I decided to make a travel site. We brought our cameras, GPS, and Flips, and we used PHP to: …

On a recent road trip around Iceland, my friends (PHP developers Andrei and Helgi) and I decided to make a travel site. We brought our cameras, GPS, and Flips, and we used PHP to:

* Aggregate our experience in the form of photos (Flickr), tweets (Twitter), and videos (Vimeo).
* Geotag all of these assets, so we'd remember precisely where we were.
* Create a map that marks our path each day and plots our photos, tweets, and videos.

We made most of this while taking in scenic views and experiencing all Iceland has to offer, and we learned a lot about geotagging, GPSes, time zones, and maps along the way. This talks shows you how to do the same, but you'll have to buy your own flight.

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,919
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. FUN WITH MAPS & PHP Chris Shiflett — @shiflett — shiflett.org
  • 2. Web aficionado, author, blogger, soccer player, bike Who am I? rider, beer drinker, music lover, Brooklynite.
  • 3. 0. Landice Dettifoss
  • 4. TRAVELOG Tag everything – #landice Blog – every night Timeline Visualizations – maps? A!regate and Plot – photos, tweets, videos, etc.
  • 5. 1. Research Sjónarsker
  • 6. EXISTING TOOLS GPS – Garmin GPS 60CSx GPSBabel – gpsbabel.org EveryTrail – everytrail.com HoudahGeo – houdah.com/houdahGeo/
  • 7. 2. Reykjavík Stóra-Víti
  • 8. 3. Photos Kirkjufell
  • 9. <?xml version="1.0" encoding="UTF-8"?> <gpx version="1.0" creator="GPSBabel - http://gpsbabel.org/" xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xmlns="http://topografix.com/GPX/1/0" xsi:schemaLocation="http://topografix.com/GPX/1/0 http://topografix.com/GPX/1/0/gpx.xsd"> <time>2009-06-14T23:52:23Z</time> <bounds minlat="64.143006038" minlon="-21.955686333" maxlat="64.153455254" maxlon="-21.915427381"/> <trk> <name>14-JUN-09 01</name> <number>1</number> <trkseg> <trkpt lat="64.150910676" lon="-21.946594650"> <ele>13.115112</ele> <time>2009-06-14T21:01:25Z</time> </trkpt> <trkpt lat="64.150785115" lon="-21.945423950"> <ele>13.595825</ele> <time>2009-06-14T21:02:08Z</time> </trkpt> </trkseg> </trk> </gpx>
  • 10. PARSING GPX $xml = simplexml_load_file('trip.gpx'); foreach($xml->trk as $part) { foreach ($part->trkseg->trkpt as $point) { /* $point['lat'] $point['lon'] $point->time $point->ele */ } }
  • 11. 4. Maps Bláa lónið
  • 12. Garmin GPS 60CSx Nikon D300 HoudahGeo
  • 13. EVERYTRAIL
  • 14. $query = $db->prepare("SELECT lat, lon FROM points WHERE timestamp > '$start' AND timestamp < '$end' ORDER BY timestamp"); $query->execute(); $points = array(); while ($row = $query->fetch()) { $points[] = array('lat' => $row['lat'], 'lon' => $row['lon']); } $trip['points'] = $points; $json = json_encode($trip); file_put_contents("/tmp/landice-$day.json", $json);
  • 15. // FIXME: http://tr.im/selectclosest $sql = "SELECT lat, lon, elevation, ABS(timestamp - :timestamp) as distance FROM points ORDER BY distance LIMIT 1" $select = $this->db->prepare($sql);   foreach ($this->photos as $photo) { $id = (string)$photo['id'];   // Get lat and lon from points table. $select->execute(array('timestamp' => $photo['timestamp'])); $row = $select->fetch(); $this->photos[$id]['lat'] = $row['lat']; $this->photos[$id]['lon'] = $row['lon']; $this->photos[$id]['elevation'] = $row['elevation']; }
  • 16. FLICKR API $flickrMethod = 'flickr.photos.getInfo'; $apiUrl = "http://api.flickr.com/services/rest/? method={$flickrMethod}&api_key={$this->apiKey}&photo_id={$id}"; $xml = simplexml_load_file($apiUrl);   $title = (string)$xml->photo->title; $desc = (string)$xml->photo->description;
  • 17. Google Maps OpenStreetMaps
  • 18. 5. Challenges Stykkishólmur
  • 19. CLUSTERS
  • 20. PERFORMANCE 20,000 points loaded on a single map is very slow You don’t need a# points for every view Mature solutions exist –http://tr.im/polyline
  • 21. 6. Storytelling Reykjavík
  • 22. 7. Future Tjörnin
  • 23. TRAILS GPX Tracking
  • 24. GEOLOCATION API http://mozi#a.com/en-US/firefox/geolocation/ http://dev.w3.org/geo/api/spec-source.html
  • 25. Click here
  • 26. FEEDBACK? Fo#ow me on Twitter – @shiflett Comment on my blog – shiflett.org Email me – chris@shiflett.org
  • 27. Thanks for listening! Chris Shiflett — @shiflett — shiflett.org