[ "layer" => "osm", "config" => [ ], "label" => "osm_map_layer" ], 10 => [ "layer" => "stamen", "config" => [ "layer" => "terrain" ], "label" => "stamen_map_terrain" ], 11 => [ "layer" => "stamen", "config" => [ "layer" => "watercolor" ], "label" => "stamen_map_watercolor" ], 12 => [ "layer" => "stamen", "config" => [ "layer" => "toner" ], "label" => "stamen_map_toner" ], 100 => [ "layer" => "thunderforest", "config" => [ "layer" => "cycle" ], "label" => "thunderforest_map_cycle" ], 101 => [ "layer" => "thunderforest", "config" => [ "layer" => "transport" ], "label" => "thunderforest_map_transport" ], 102 => [ "layer" => "thunderforest", "config" => [ "layer" => "landscape" ], "label" => "thunderforest_map_landscape" ], 103 => [ "layer" => "thunderforest", "config" => [ "layer" => "outdoors" ], "label" => "thunderforest_map_outdoors" ], 104 => [ "layer" => "thunderforest", "config" => [ "layer" => "atlas" ], "label" => "thunderforest_map_atlas" ], 105 => [ "layer" => "thunderforest", "config" => [ "layer" => "transport-dark" ], "label" => "thunderforest_map_transport-dark" ], 106 => [ "layer" => "thunderforest", "config" => [ "layer" => "spinal-map" ], "label" => "thunderforest_map_spinal" ], 107 => [ "layer" => "thunderforest", "config" => [ "layer" => "pioneer" ], "label" => "thunderforest_map_pioneer" ], 108 => [ "layer" => "thunderforest", "config" => [ "layer" => "neighbourhood" ], "label" => "thunderforest_map_neighbourhood" ], 109 => [ "layer" => "thunderforest", "config" => [ "layer" => "mobile-atlas" ], "label" => "thunderforest_map_mobile-atlas" ], 200 => [ "layer" => "maptiler", "config" => [ "layer" => "basic" ], "label" => "maptiler_map_basic" ], 201 => [ "layer" => "maptiler", "config" => [ "layer" => "basic-4326" ], "label" => "maptiler_map_basic-4326" ], 202 => [ "layer" => "maptiler", "config" => [ "layer" => "bright" ], "label" => "maptiler_map_bright" ], 203 => [ "layer" => "maptiler", "config" => [ "layer" => "openstreetmap" ], "label" => "maptiler_map_openstreetmap" ], 204 => [ "layer" => "maptiler", "config" => [ "layer" => "outdoor" ], "label" => "maptiler_map_outdoor" ], 205 => [ "layer" => "maptiler", "config" => [ "layer" => "pastel" ], "label" => "maptiler_map_pastel" ], 206 => [ "layer" => "maptiler", "config" => [ "layer" => "hybrid" ], "label" => "maptiler_map_hybrid" ], 207 => [ "layer" => "maptiler", "config" => [ "layer" => "streets" ], "label" => "maptiler_map_streets" ], 208 => [ "layer" => "maptiler", "config" => [ "layer" => "toner" ], "label" => "maptiler_map_toner" ], 209 => [ "layer" => "maptiler", "config" => [ "layer" => "topo" ], "label" => "maptiler_map_topo" ], 210 => [ "layer" => "maptiler", "config" => [ "layer" => "topographique" ], "label" => "maptiler_map_topographique" ], 211 => [ "layer" => "maptiler", "config" => [ "layer" => "voyager" ], "label" => "maptiler_map_voyager" ], 212 => [ "layer" => "maptiler", "config" => [ "layer" => "winter" ], "label" => "maptiler_map_winter" ], ]; /** * setCanonical * * @param type $href */ public static function getMapLayerConfig(array $mapLayerConfigIds) { $out = []; foreach ($mapLayerConfigIds as $id) { $out[] = self::$mapLayerConfigs[$id]; } return $out; } public static function getMapConfig(array $mapLayerConfigIds, ?string $gpxSource = null, ?string $markerSource = null, ?string $defaultMarkerIcon = null, int $zoom = 1, int $maxZoom = 18, float $centerLon = 0.0, float $centerLat = 0.0, bool $zoomSlider = false, bool $fullScreen = false, bool $useLayerSwitcher = false): array { $out = [ 'zoom' => $zoom, 'maxZoom' => $maxZoom, 'centerLon' => $centerLon, 'centerLat' => $centerLat ]; $out['mapLayers'] = self::getMapLayerConfig($mapLayerConfigIds); if ($useLayerSwitcher) { for ($i = 0; $i < count($out['mapLayers']); $i++) { $out['mapLayers'][$i]['active'] = true; } } if ($defaultMarkerIcon !== null) { $out['defaultMarkerIcon'] = $defaultMarkerIcon; } if ($gpxSource !== null) { $out['gpxSource'] = $gpxSource; } if ($markerSource !== null) { $out['markerSource'] = $markerSource; } if ($zoomSlider) { $out['zoomSlider'] = $zoomSlider; } if ($fullScreen) { $out['fullScreen'] = $fullScreen; } return $out; } static public function getMarkerCsr() { return [ "type" => "name", "properties" => [ "name" => "urn:ogc:def:crs:EPSG::4326" ] ]; } static public function getMarker(MapEntry $marker, ?string $icon, ?string $popupContent) { $out = [ "type" => "Feature", "id" => $marker->getUid(), "geometry" => [ "type" => "Point", "coordinates" => [ $marker->getLongitude(), $marker->getLatitude() ] ], "geometry_name" => "SHAPE", "properties" => [ 'icon' => $icon ] ]; if ($popupContent !== null) { $out['properties']['popup'] = $popupContent; } return $out; } static private $countryCoordinates = null; private static function getCountryGeoJson(string $twoIsoCode = ''): ?array { if (self::$countryCoordinates === null) { self::$countryCoordinates = \GuzzleHttp\json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/typo3conf/ext/a2g_travel_blog/Resources/Public/sampleData/countries.json'), true); } if (self::$countryCoordinates[strtoupper($twoIsoCode)]) { return self::$countryCoordinates[strtoupper($twoIsoCode)][0]; } else { return null; } } static protected $nominationBaseUrl = 'https://nominatim.openstreetmap.org'; static protected $nominationSufixUrl = '&format=json&polygon=1&addressdetails=1'; static protected $client = null; static protected function initClient(){ if(self::$client===null){ self::$client = new Client([ // Base URI is used with relative requests 'base_uri' => self::$nominationBaseUrl, // You can set any number of default request options. 'timeout' => 2.0, ]); } } static public function getLatLonFrom(string $addressline, string $countryline, string $state = ''): ?array { self::initClient(); if ($state === '') { $url = urlencode($addressline . ',' . $countryline); } else { $url = urlencode($addressline . ',' . $countryline . ',' . $state); } $response = self::$client->request('GET', self::$nominationBaseUrl.'/search?q='.$url.self::$nominationSufixUrl); if($response->getStatusCode() === 200){ return \GuzzleHttp\json_decode($response->getBody()->getContents(), true)[0]; } return null; } public static function getNavToLink(string $addressline, string $countryline, string $state = ''): string{ if ($state === '') { $url = str_replace(' ', '+', $addressline . ',' . $countryline); } else { $url = str_replace(' ', '+', $addressline . ',' . $countryline . ',' . $state); } return 'https://www.google.com/maps/dir//'. urlencode($url); } public static function getCountryFeatureCollectionsFromIsoCodeList(array $isoCodes = ['DE' => 'popupcontent de', 'AT' => 'popupcontent at']) { $out = [ 'type' => 'FeatureCollection', 'crs' => [ 'type' => 'name', 'properties' => [ 'name' => 'urn:ogc:def:crs:OGC:1.3:CRS84' ] ], 'features' => [] ]; foreach ($isoCodes as $twoIsoCode => $isoCodePopupcontent) { if ($isoCodePopupcontent === null) { $out['features'][] = [ 'type' => 'Feature', 'properties' => [ ], 'geometry' => self::getCountryGeoJson($twoIsoCode) ]; } else { $out['features'][] = [ 'type' => 'Feature', 'properties' => [ 'popup' => $isoCodePopupcontent ], 'geometry' => self::getCountryGeoJson($twoIsoCode) ]; } } return $out; } }