Changeset 8 for trunk/Modules/Map/Map.php
- Timestamp:
- Jun 1, 2023, 12:18:18 AM (18 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Modules/Map/Map.php
r7 r8 1 1 <?php 2 3 class ModuleMap extends AppModule4 {5 function __construct($System)6 {7 parent::__construct($System);8 $this->Name = 'Map';9 $this->Version = '1.0';10 $this->Creator = 'Chronos';11 $this->License = 'GNU/GPL';12 $this->Description = 'Map';13 $this->Dependencies = array();14 }15 16 function DoStart()17 {18 }19 20 function DoInstall()21 {22 }23 24 function DoUninstall()25 {26 }27 28 function DoUpgrade()29 {30 31 }32 }33 2 34 3 class Map extends Model … … 41 10 var $Key; 42 11 43 function __construct( Application$System)12 function __construct(Core $System) 44 13 { 45 14 parent::__construct($System); … … 70 39 } 71 40 72 class MapSeznam extends Map73 {74 function Geolocate($Text)75 {76 //new SMap.Geocoder(query, odpoved);77 }78 41 79 function Show()80 {81 $Output .= '<div id="m" style="height:380px"></div>';82 $Output .= '<script type="text/javascript">83 var centerMap = SMap.Coords.fromWGS84(14.40, 50.08);84 var m = new SMap(JAK.gel("m"), centerMap, 16);85 var l = m.addDefaultLayer(SMap.DEF_BASE).enable();86 m.addDefaultControls();87 88 89 var nalezeno = function(route) {90 var vrstva = new SMap.Layer.Geometry();91 m.addLayer(vrstva).enable();92 93 var coords = route.getResults().geometry;94 var cz = m.computeCenterZoom(coords);95 m.setCenterZoom(cz[0], cz[1]);96 var g = new SMap.Geometry(SMap.GEOMETRY_POLYLINE, null, coords);97 vrstva.addGeometry(g);98 }99 100 var coords = [101 SMap.Coords.fromWGS84(14.434, 50.084),102 SMap.Coords.fromWGS84(16.600, 49.195)103 ];104 var route = new SMap.Route(coords, nalezeno);105 </script>';106 $this->System->HeadItems[] = '<script src="//api.mapy.cz/loader.js"></script>107 <script>Loader.load()</script>';108 109 return $Output;110 }111 }112 113 class MapGoogle extends Map114 {115 function Route()116 {117 $Origins = array();118 $Destinations = array();119 foreach ($this->Path as $Index => $PathItem)120 if ($Index > 0)121 {122 if ($Index == 1) $Origins[] = $this->Path[$Index - 1];123 $Destinations[] = $this->Path[$Index];124 }125 $URL = 'https://maps.googleapis.com/maps/api/distancematrix/json'.126 '?origins='.implode('|', $Origins).'&destinations='.implode('|', $Destinations).'&key='.$this->Key;127 $Result = file_get_contents($URL);128 $Points = array(array('Destination' => $this->Path[0], 'Distance' => 0, 'Duration' => 0));129 $I = 1;130 while (strpos($Result, '"distance"') !== false) {131 $Distance = trim($this->Parse($Result, '"value" :', '}'));132 $Duration = trim($this->Parse($Result, '"value" :', '}'));133 $Points[] = array('Destination' => $this->Path[$I], 'Distance' => $Distance, 'Duration' => $Duration);134 $I++;135 }136 return $Points;137 }138 139 function Show()140 {141 $WayPoints = $this->Path;142 array_shift($WayPoints);143 array_pop($WayPoints);144 if (count($WayPoints) > 0)145 $WaypointsQuery = '&waypoints='.implode('|', $WayPoints);146 else $WaypointsQuery = '';147 148 $Output = '<iframe width="'.$this->Width.'" height="'.$this->Height.'" frameborder="0" scrolling="no" '.149 'marginheight="0" marginwidth="0" src="'.'https://www.google.com/maps/embed/v1/directions'.150 '?key='.$this->Key.'&origin='.$this->Path[0].$WaypointsQuery.151 '&destination='.$this->Path[count($this->Path) - 1].''.152 '" style="border: 1px solid black"></iframe>';153 return $Output;154 }155 }156 157 class MapOSM extends Map158 {159 function Geolocate($Text)160 {161 // http://wiki.openstreetmap.org/wiki/Nominatim162 $URL = 'http://nominatim.openstreetmap.org/search.php?q='.urlencode($Text).'&viewbox=&format=xml&limit=1';163 $Result = file_get_contents($URL);164 $Result = substr($Result, strpos($Result, 'boundingbox="') + 13);165 $BoundingBox = substr($Result, 0, strpos($Result, '"') - 1);166 $Parts = explode(',', $BoundingBox);167 $Zoom = 1 / ($Parts[1] - $Parts[0]) * 2;168 $Result = substr($Result, strpos($Result, 'lat=\'') + 5);169 $Latitude = substr($Result, 0, strpos($Result, '\'') - 1);170 $Result = substr($Result, strpos($Result, 'lon=\'') + 5);171 $Longitude = substr($Result, 0, strpos($Result, '\'') - 1);172 return array('Latitude' => $Latitude, 'Longitude' => $Longitude, 'BoundingBox' => $BoundingBox, 'Zoom' => $Zoom);173 }174 175 function Route($TextPathItems)176 {177 $this->Points = array();178 foreach ($TextPathItems as $TextPathItem)179 {180 $Result = $this->Geolocate($TextPathItem);181 $this->Points[] = array('Longitude' => $Result['Longitude'],182 'Latitude' => $Result['Latitude']);183 }184 185 $WayPoints = array();186 foreach ($this->Points as $Point)187 {188 $WayPoints[] = $Point['Longitude'];189 $WayPoints[] = $Point['Latitude'];190 }191 192 // http://wiki.openstreetmap.org/wiki/OpenRouteService#OpenRouteService_API193 $this->Key = 'ee0b8233adff52ce9fd6afc2a2859a28';194 $URL = 'http://openls.geog.uni-heidelberg.de/route?api_key='.195 $this->Key.'&start='.implode(',', $this->Points[0]).'&end='.implode(',', $this->Points[count($this->Points) - 1]).196 '&via='.implode(',', $WayPoints).'&lang=en&distunit=M&routepref=Car&weighting=Fastest&avoidAreas='.197 '&useTMC=false&noMotorways=false&noTollways=false&noUnpavedroads=false&noSteps=false'.198 '&noFerries=false&elevation=false&surface=false&instructions=false';199 $Result = file_get_contents($URL);200 echo($Result);201 $Separator = '<xls:TotalDistance uom="M" value="';202 $Result = substr($Result, strpos($Result, $Separator) + strlen($Separator));203 $TotalDistance = substr($Result, 0, strpos($Result, '"/>') - 1);204 $Separator = '<xls:TotalTime>PT2H3M48S';205 $Result = substr($Result, strpos($Result, $Separator) + strlen($Separator));206 $TotalTime = substr($Result, 0, strpos($Result, '"/>') - 1);207 208 $Points = array();209 $Separator = '<gml:pos>';210 while (strpos($Result, $Separator) !== false)211 {212 $Result = substr($Result, strpos($Result, $Separator) + strlen($Separator));213 $Pos = substr($Result, 0, strpos($Result, '</gml:pos>') - 1);214 $PosParts = explode(' ', $Pos);215 $Points[] = array('Longitude' => $PosParts[0], 'Latitude' => $PosParts[1]);216 }217 return array('TotalDistance' => $TotalDistance, 'TotalTime' => $TotalTime,218 'Points' => $Points);219 }220 221 function Show()222 {223 $WayPoints = array();224 foreach ($this->Points as $Point)225 {226 $WayPoints[] = $Point['Longitude'];227 $WayPoints[] = $Point['Latitude'];228 }229 230 $Output = '<iframe width="'.$this->Width.'" height="'.$this->Height.'" frameborder="0" scrolling="no" '.231 'marginheight="0" marginwidth="0" src="'.232 'http://www.openrouteservice.org/?pos=8.925670599999979,52.28150333376007&zoom='.233 $this->Zoom.'&layer=0B00&routeOpt=Car&wp='.implode(',', $WayPoints).234 '&lang=en&routeLang=en&distUnit=m&routeWeight=Fastest'.235 'style="border: 1px solid black"></iframe>';236 /* $Latitude = $this->Pos['Latitude'];237 $Longitude = $this->Pos['Longitude'];238 $Zoom = $this->Zoom;239 $BoundingBox = array($Longitude - 1 / $Zoom, $Latitude - 1 / $Zoom, $Longitude + 1 / $Zoom, $Latitude + 1 / $Zoom);240 $Output = '<iframe width="'.$this->Width.'" height="'.$this->Height.'" frameborder="0" scrolling="no" '.241 'marginheight="0" marginwidth="0" src="http://www.openstreetmap.org/export/embed.html'.242 '?bbox='.implode(',', $BoundingBox).'&layer=mapnik&marker='.$Latitude.','.$Longitude.'" '.243 'style="border: 1px solid black"></iframe>'.244 '<p><small><a href="http://www.openstreetmap.org/'.245 '?lat='.$Latitude.'&lon='.$Longitude.';zoom='.$Zoom.'&layers=M&mlat='.$Latitude.'&mlon='.$Longitude.'">View Larger Map</a></small></p>';246 */247 return $Output;248 }249 }
Note:
See TracChangeset
for help on using the changeset viewer.