]> dev.renevier.net Git - syj.git/blob - application/controllers/GeomController.php
add mapquest layer back
[syj.git] / application / controllers / GeomController.php
1 <?php
2 /*  This file is part of Syj, Copyright (c) 2010-2011 Arnaud Renevier,
3     and is published under the AGPL license. */
4
5 class GeomController extends Zend_Controller_Action
6 {
7
8     public function indexAction() {
9         $request = $this->getRequest();
10         $response = $this->getResponse();
11
12         $idx = $request->idx;
13
14         $pathMapper = new Syj_Model_PathMapper();
15         $path = new Syj_Model_Path();
16
17         $api = $this->_helper->SyjApi;
18
19         $ext = "";
20         $parts = explode('.', $idx);
21         if (count($parts) >= 2) {
22             $ext = end($parts);
23             if (in_array($ext, array('kml', 'gpx', 'json'))) {
24                 $idx = implode('.', explode('.', $idx, -1));
25             } else {
26                 $ext = "";
27             }
28         }
29
30         if (!$pathMapper->find($idx, $path)) {
31             if (!$pathMapper->findByTitle($idx, $path)) {
32                 if ($pathMapper->hasexisted($idx)) {
33                     $api->setCode(410);
34                 } else {
35                     $api->setCode(404);
36                 }
37                 return;
38             }
39         }
40
41         switch ($ext) {
42             case 'kml':
43                 $this->kml($path);
44             break;
45             case 'gpx':
46                 $this->gpx($path);
47             break;
48             case 'json':
49             default:
50                 $this->json($path);
51                 return;
52             break;
53         }
54     }
55
56     protected function kml(Syj_Model_Path $path) {
57         $data = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;   // <? <-- vim syntax goes crazy
58         $data .= '<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">';
59         $data .= '<Placemark>';
60         if ($path->creator) {
61             $data .= '<atom:author><atom:name>'
62                         . htmlspecialchars($path->creator->pseudo, ENT_COMPAT, "UTF-8")
63                         . '</atom:name></atom:author>';
64         }
65         $data .= '<name>' . htmlspecialchars($path->displayTitle, ENT_COMPAT, "UTF-8") . '</name>';
66         $data .= $path->geom->toKML();
67         $data .= '</Placemark>';
68         $data .= '</kml>';
69
70         $api = $this->_helper->SyjApi;
71         $api->setCheckIfNoneMatch(true)->setContentType('application/vnd.google-earth.kml+xml')->setBody($data);
72     }
73
74     protected function gpx(Syj_Model_Path $path) {
75         $data = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;   // <? <-- vim syntax goes crazy
76         $data .= '<gpx creator="syj" version="1.0" xmlns="http://www.topografix.com/GPX/1/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">';
77         $data .= '<trk>';
78         if ($path->creator) {
79             $data .= '<author>' . htmlspecialchars($path->creator->pseudo, ENT_COMPAT, "UTF-8") . '</author>';
80         }
81         $data .= '<name>' . htmlspecialchars($path->displayTitle, ENT_COMPAT, "UTF-8") . '</name>';
82         $data .= $path->geom->toGPX();
83         $data .= '</trk>';
84         $data .= '</gpx>';
85
86         $api = $this->_helper->SyjApi;
87         $api->setCheckIfNoneMatch(true)->setContentType('application/gpx+xml')->setBody($data);
88     }
89
90     protected function json(Syj_Model_Path $path) {
91         $data = json_decode($path->geom->toGeoJSON());
92         $data->title = (string)$path->displayTitle;
93         if ($path->creator) {
94             $data->creator = (string)$path->creator->pseudo;
95         }
96         $api = $this->_helper->SyjApi;
97         $api->setCheckIfNoneMatch(true)->setBodyJson($data);
98     }
99
100 }