nwn-software / maplibre
用于显示MapLibre地图的包
v1.0.0
2024-05-09 16:48 UTC
Requires
- php: ^8.1
- filament/filament: ^3.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.1
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
README
这里应该放置您的描述。请限制为一段或两段。考虑添加一个小的示例。
安装
您可以通过composer安装此包
composer require nwn-software/maplibre
您可以使用以下命令发布和运行迁移
php artisan vendor:publish --tag="maplibre-migrations"
php artisan migrate
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="maplibre-config"
可选地,您可以使用以下命令发布视图
php artisan vendor:publish --tag="maplibre-views"
这是发布配置文件的内容
return [ 'style' => env('MAPLIBRE_STYLE', 'https://demotiles.maplibre.org/style.json'), ];
使用方法
- 在您的面板上注册插件
MaplibrePlugin::make() ->style(config('maplibre.style'))
- 创建一个filament小部件
php artisan make:filament-widget MapWidget
- 使用
NWNSoftware\Maplibre\Widgets\MapLibreWidget
扩展
<?php namespace App\Filament\App\Widgets; use App\Models\Employee; use App\Models\User; use NWNSoftware\Maplibre\Data\MarkerData; use NWNSoftware\Maplibre\Widgets\MapLibreWidget; class MapWidget extends MapLibreWidget { protected array $center = [0, 0]; protected int $zoom = 9; protected bool $allowFullscreen = true; public function getMarkers(): array { return []; } }
使用MarkerData类返回标记
MarkerData是一个类,它将所有当前可用的函数包装到正确的数组格式中。
<?php namespace App\Filament\App\Widgets; use App\Models\Employee; use App\Models\User; use NWNSoftware\Maplibre\Data\MarkerData; use NWNSoftware\Maplibre\Widgets\MapLibreWidget; class MapWidget extends MapLibreWidget { protected array $center = [0, 0]; protected int $zoom = 9; protected bool $allowFullscreen = true; public function getMarkers(): array { return collect($devicePositions)->map(function ($devicePosition) { return MarkerData::make() ->id($employee->id) ->longitude($devicePosition['Position'][0]) ->latitude($devicePosition['Position'][1]) ->toArray(); })->all(); } }
导航到地图上的一个点
$lon = $lat = 0; $center = [$lon, $lat]; $this->dispatch('maplibre--flyTo', $center);
使用图标作为标记
return MarkerData::make() ->id($employee->id) ->longitude($devicePosition['Position'][0]) ->latitude($devicePosition['Position'][1]) ->avatarUrl($employee->getAvatarUrl()) ->avatarIconSize(40)
点击标记
点击标记时打开信息列表
如果您设置了弹出窗口或定位到URL,则此操作将被忽略。
<?php namespace App\Filament\App\Widgets; use App\Models\Employee; use App\Models\User; use NWNSoftware\Maplibre\Data\MarkerData; use NWNSoftware\Maplibre\Widgets\MapLibreWidget; use Filament\Infolists\Infolist; class MapWidget extends MapLibreWidget { protected array $center = [0, 0]; protected int $zoom = 9; public Model | string | null $model = Employee::class; public function getMarkers(): array { return collect($devicePositions)->map(function ($devicePosition) { return MarkerData::make() ->id($employee->id) ->longitude($devicePosition['Position'][0]) ->latitude($devicePosition['Position'][1]) ->toArray(); })->all(); } public function getInfolistSchema(Infolist $infolist): Infolist { return $infolist ->schema([ ]); } }
点击标记时打开弹出窗口
MarkerData::make() ->id($employee->id) ->longitude($devicePosition['Position'][0]) ->latitude($devicePosition['Position'][1]) ->popupText("Here goes your HTML") ->toArray();
点击标记时导航到URL
MarkerData::make() ->id($employee->id) ->longitude($devicePosition['Position'][0]) ->latitude($devicePosition['Position'][1]) ->url("https://google.be") ->shouldOpenUrlInNewTab() ->toArray();
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请查看 我们的安全策略 了解如何报告安全漏洞。
致谢
由于这是我第一个插件,代码和结构受到了Saade的 Filament Fullcalendar插件 的很大启发。
许可证
MIT许可证(MIT)。请参阅 许可证文件 了解更多信息。