mirror of
https://github.com/netzmacht/contao-leaflet-maps.git
synced 2025-11-28 19:13:55 +01:00
Implement a file layer for gpx,kml,wkt support.
This commit is contained in:
@@ -26,7 +26,7 @@
|
|||||||
"contao/core-bundle": "~4.4",
|
"contao/core-bundle": "~4.4",
|
||||||
"netzmacht/contao-leaflet-libraries": "^1.0",
|
"netzmacht/contao-leaflet-libraries": "^1.0",
|
||||||
"netzmacht/php-javascript-builder": "^1.0",
|
"netzmacht/php-javascript-builder": "^1.0",
|
||||||
"netzmacht/php-leaflet": "^1.0.1",
|
"netzmacht/php-leaflet": "^1.0.2",
|
||||||
"netzmacht/contao-toolkit": "^3.0@dev",
|
"netzmacht/contao-toolkit": "^3.0@dev",
|
||||||
"contao-community-alliance/meta-palettes": "^1.5",
|
"contao-community-alliance/meta-palettes": "^1.5",
|
||||||
"menatwork/contao-multicolumnwizard": "^3.2",
|
"menatwork/contao-multicolumnwizard": "^3.2",
|
||||||
|
|||||||
@@ -45,6 +45,10 @@ parameters:
|
|||||||
extend: true
|
extend: true
|
||||||
fit: true
|
fit: true
|
||||||
|
|
||||||
|
file:
|
||||||
|
children: false
|
||||||
|
icon: 'bundles/netzmachtcontaoleaflet/img/file.png'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
_defaults:
|
_defaults:
|
||||||
public: false
|
public: false
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ services:
|
|||||||
tags:
|
tags:
|
||||||
- { name: netzmacht.contao_leflet_maps.mapper }
|
- { name: netzmacht.contao_leflet_maps.mapper }
|
||||||
|
|
||||||
|
netzmacht.contao_leaflet.mapper.file_layer:
|
||||||
|
class: Netzmacht\Contao\Leaflet\Mapper\Layer\FileLayerMapper
|
||||||
|
tags:
|
||||||
|
- { name: netzmacht.contao_leaflet.mapper }
|
||||||
|
|
||||||
# Control mappers
|
# Control mappers
|
||||||
netzmacht.contao_leaflet.mapper.zoom_control:
|
netzmacht.contao_leaflet.mapper.zoom_control:
|
||||||
|
|||||||
@@ -217,6 +217,14 @@ $GLOBALS['TL_DCA']['tl_leaflet_layer'] = [
|
|||||||
'pointToLayer',
|
'pointToLayer',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'file extends default' => [
|
||||||
|
'+config' => ['file'],
|
||||||
|
'+expert' => [
|
||||||
|
'onEachFeature',
|
||||||
|
'pointToLayer',
|
||||||
|
],
|
||||||
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
'metasubselectpalettes' => [
|
'metasubselectpalettes' => [
|
||||||
@@ -853,5 +861,18 @@ $GLOBALS['TL_DCA']['tl_leaflet_layer'] = [
|
|||||||
],
|
],
|
||||||
'sql' => 'mediumtext NULL',
|
'sql' => 'mediumtext NULL',
|
||||||
],
|
],
|
||||||
|
'file' => [
|
||||||
|
'label' => &$GLOBALS['TL_LANG']['tl_leaflet_layer']['file'],
|
||||||
|
'exclude' => true,
|
||||||
|
'inputType' => 'fileTree',
|
||||||
|
'eval' => [
|
||||||
|
'filesOnly' => true,
|
||||||
|
'fieldType' => 'radio',
|
||||||
|
'mandatory' => true,
|
||||||
|
'extensions' => 'gpx,kml,wkt',
|
||||||
|
'tl_class' => 'clr',
|
||||||
|
],
|
||||||
|
'sql' => 'binary(16) NULL',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ $GLOBALS['TL_LANG']['leaflet_layer']['tile'][0] = 'Tile layer';
|
|||||||
$GLOBALS['TL_LANG']['leaflet_layer']['tile'][1] = 'Tile layer with full config options.';
|
$GLOBALS['TL_LANG']['leaflet_layer']['tile'][1] = 'Tile layer with full config options.';
|
||||||
$GLOBALS['TL_LANG']['leaflet_layer']['overpass'][0] = 'Overpass API';
|
$GLOBALS['TL_LANG']['leaflet_layer']['overpass'][0] = 'Overpass API';
|
||||||
$GLOBALS['TL_LANG']['leaflet_layer']['overpass'][1] = 'Overpass API data layer.';
|
$GLOBALS['TL_LANG']['leaflet_layer']['overpass'][1] = 'Overpass API data layer.';
|
||||||
|
$GLOBALS['TL_LANG']['leaflet_layer']['file'][0] = 'File';
|
||||||
|
$GLOBALS['TL_LANG']['leaflet_layer']['file'][1] = 'Geo data from a file (gpx,kml,wkt).';
|
||||||
|
|
||||||
$GLOBALS['TL_LANG']['leaflet_vector']['polyline'][0] = 'Polyline';
|
$GLOBALS['TL_LANG']['leaflet_vector']['polyline'][0] = 'Polyline';
|
||||||
$GLOBALS['TL_LANG']['leaflet_vector']['polyline'][1] = 'Polyline overlay. For more details read the <a href="http://leafletjs.com/reference.html#polyline" target="_blank">Leaflet documentation</a>.';
|
$GLOBALS['TL_LANG']['leaflet_vector']['polyline'][1] = 'Polyline overlay. For more details read the <a href="http://leafletjs.com/reference.html#polyline" target="_blank">Leaflet documentation</a>.';
|
||||||
|
|||||||
@@ -145,6 +145,8 @@ $GLOBALS['TL_LANG']['tl_leaflet_layer']['amenity'][0] = 'Amen
|
|||||||
$GLOBALS['TL_LANG']['tl_leaflet_layer']['amenity'][1] = 'OSM amenity.';
|
$GLOBALS['TL_LANG']['tl_leaflet_layer']['amenity'][1] = 'OSM amenity.';
|
||||||
$GLOBALS['TL_LANG']['tl_leaflet_layer']['amenityIcon'][1] = 'Icon';
|
$GLOBALS['TL_LANG']['tl_leaflet_layer']['amenityIcon'][1] = 'Icon';
|
||||||
$GLOBALS['TL_LANG']['tl_leaflet_layer']['amenityIcon'][0] = 'Icon style';
|
$GLOBALS['TL_LANG']['tl_leaflet_layer']['amenityIcon'][0] = 'Icon style';
|
||||||
|
$GLOBALS['TL_LANG']['tl_leaflet_layer']['file'][0] = 'File';
|
||||||
|
$GLOBALS['TL_LANG']['tl_leaflet_layer']['file'][1] = 'Choose a file containing geodata. Supported formats are gpx,kml and wkt.';
|
||||||
|
|
||||||
$GLOBALS['TL_LANG']['tl_leaflet_layer']['groupTypes']['layer'][0] = 'Layer group';
|
$GLOBALS['TL_LANG']['tl_leaflet_layer']['groupTypes']['layer'][0] = 'Layer group';
|
||||||
$GLOBALS['TL_LANG']['tl_leaflet_layer']['groupTypes']['layer'][1] = 'Basic layer group. <br> See <a href="http://leafletjs.com/reference.html#layergroup" target="_blank">http://leafletjs.com/reference.html#layergroup</a>';
|
$GLOBALS['TL_LANG']['tl_leaflet_layer']['groupTypes']['layer'][1] = 'Basic layer group. <br> See <a href="http://leafletjs.com/reference.html#layergroup" target="_blank">http://leafletjs.com/reference.html#layergroup</a>';
|
||||||
|
|||||||
BIN
src/Bundle/Resources/public/img/file.png
Normal file
BIN
src/Bundle/Resources/public/img/file.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 619 B |
BIN
src/Bundle/Resources/public/img/file_1.png
Normal file
BIN
src/Bundle/Resources/public/img/file_1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 546 B |
136
src/Mapper/Layer/FileLayerMapper.php
Normal file
136
src/Mapper/Layer/FileLayerMapper.php
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Leaflet maps for Contao CMS.
|
||||||
|
*
|
||||||
|
* @package contao-leaflet-maps
|
||||||
|
* @author David Molineus <david.molineus@netzmacht.de>
|
||||||
|
* @copyright 2014-2017 netzmacht David Molineus. All rights reserved.
|
||||||
|
* @license LGPL-3.0 https://github.com/netzmacht/contao-leaflet-maps/blob/master/LICENSE
|
||||||
|
* @filesource
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Netzmacht\Contao\Leaflet\Mapper\Layer;
|
||||||
|
|
||||||
|
use Contao\FilesModel;
|
||||||
|
use Contao\Model;
|
||||||
|
use Netzmacht\Contao\Leaflet\Mapper\DefinitionMapper;
|
||||||
|
use Netzmacht\Contao\Leaflet\Request\Request;
|
||||||
|
use Netzmacht\JavascriptBuilder\Type\Expression;
|
||||||
|
use Netzmacht\LeafletPHP\Definition;
|
||||||
|
use Netzmacht\LeafletPHP\Definition\Group\FeatureGroup;
|
||||||
|
use Netzmacht\LeafletPHP\Definition\Group\GeoJson;
|
||||||
|
use Netzmacht\LeafletPHP\Plugins\Omnivore\Gpx;
|
||||||
|
use Netzmacht\LeafletPHP\Plugins\Omnivore\Kml;
|
||||||
|
use Netzmacht\LeafletPHP\Plugins\Omnivore\OmnivoreLayer;
|
||||||
|
use Netzmacht\LeafletPHP\Plugins\Omnivore\Wkt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FileLayerMapper.
|
||||||
|
*
|
||||||
|
* @package Netzmacht\Contao\Leaflet\Mapper\Layer
|
||||||
|
*/
|
||||||
|
class FileLayerMapper extends AbstractLayerMapper
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The definition type.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected static $type = 'file';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class of the model being build.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected static $definitionClass = FeatureGroup::class;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function handle(
|
||||||
|
$model,
|
||||||
|
DefinitionMapper $mapper,
|
||||||
|
Request $request = null,
|
||||||
|
$elementId = null,
|
||||||
|
Definition $parent = null
|
||||||
|
) {
|
||||||
|
$fileModel = FilesModel::findByPk($model->file);
|
||||||
|
$definition = $this->createInstance($model, $mapper, $request, $elementId, $fileModel);
|
||||||
|
|
||||||
|
$this->optionsBuilder->build($definition, $model);
|
||||||
|
$this->build($definition, $model, $mapper, $request, $parent);
|
||||||
|
|
||||||
|
return $definition;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
protected function createInstance(
|
||||||
|
Model $model,
|
||||||
|
DefinitionMapper $mapper,
|
||||||
|
Request $request = null,
|
||||||
|
$elementId = null,
|
||||||
|
FilesModel $fileModel = null
|
||||||
|
) {
|
||||||
|
$layerId = $this->getElementId($model, $elementId);
|
||||||
|
|
||||||
|
if ($fileModel instanceof FilesModel && $fileModel->type === 'file') {
|
||||||
|
switch ($fileModel->extension) {
|
||||||
|
case 'gpx':
|
||||||
|
$layer = new Gpx($layerId, $fileModel->path, []);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'kml':
|
||||||
|
$layer = new Kml($layerId, $fileModel->path, []);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'wkt':
|
||||||
|
$layer = new Wkt($layerId, $fileModel->path, []);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return parent::createInstance($model, $mapper, $request, $elementId);
|
||||||
|
}
|
||||||
|
|
||||||
|
$customId = $layerId . '_data';
|
||||||
|
$customLayer = new GeoJson($customId);
|
||||||
|
|
||||||
|
$layer->setCustomLayer($customLayer);
|
||||||
|
|
||||||
|
return $layer;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::createInstance($model, $mapper, $request, $elementId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
protected function build(
|
||||||
|
Definition $definition,
|
||||||
|
Model $model,
|
||||||
|
DefinitionMapper $mapper,
|
||||||
|
Request $request = null,
|
||||||
|
Definition $parent = null
|
||||||
|
) {
|
||||||
|
if (!$definition instanceof OmnivoreLayer) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$customLayer = $definition->getCustomLayer();
|
||||||
|
if ($customLayer instanceof GeoJson) {
|
||||||
|
if ($model->pointToLayer) {
|
||||||
|
$customLayer->setPointToLayer(new Expression($model->pointToLayer));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($model->onEachFeature) {
|
||||||
|
$customLayer->setOnEachFeature(new Expression($model->onEachFeature));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user