nwn-software/maplibre

用于显示MapLibre地图的包

资助包维护!
NWN-Software

v1.0.0 2024-05-09 16:48 UTC

This package is auto-updated.

Last update: 2024-09-08 04:18:31 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

这里应该放置您的描述。请限制为一段或两段。考虑添加一个小的示例。

Map

安装

您可以通过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'),
];

使用方法

  1. 在您的面板上注册插件
MaplibrePlugin::make()
    ->style(config('maplibre.style'))
  1. 创建一个filament小部件
php artisan make:filament-widget MapWidget
  1. 使用 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)。请参阅 许可证文件 了解更多信息。