humaidem / filament-map-picker
v0.1.5
2023-11-20 19:40 UTC
Requires
- php: ^8.1
- filament/filament: ^3.0
- spatie/laravel-package-tools: ^1.16
README
一个Filament字段,用于在地图上选择位置并返回地理坐标。
状态说明
此包仍在beta测试阶段,尚未完全测试。请自行承担风险使用。
支持的地图
- Open Street Map (OSM)
一旦证明需要,更多地图将添加到包中。
安装
您可以通过composer安装此包。
composer require humaidem/filament-map-picker
基本用法
资源文件
<?php namespace App\Filament\Resources; use Filament\Resources\Resource; use Filament\Resources\Forms\Form; use Humaidem\FilamentMapPicker\Fields\OSMMap; ... class FilamentResource extends Resource { ... public static function form(Form $form) { return $form->schema([ OSMMap::make('location') ->label('Location') ->showMarker() ->draggable() ->extraControl([ 'zoomDelta' => 1, 'zoomSnap' => 0.25, 'wheelPxPerZoomLevel' => 60 ]) // tiles url (refer to https://www.spatialbias.com/2018/02/qgis-3.0-xyz-tile-layers/) ->tilesUrl('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}') ]); } ... }
操作数据
我们将使用grimzy/laravel-mysql-spatial:^4.0作为示例,您可以使用任何其他包。
在状态加载后
一旦从数据库中加载数据,您需要将其转换为正确的格式,因为Livewire不接受基于类的格式。
... OSMMap::make('location') ->afterStateHydrated(function ($state, callable $set) { if ($state instanceof Point) { /** @var Point $state */ $set('location', ['lat' => $state->getLat(), 'lng' => $state->getLng()]); } }); ...
修改脱水状态
在存储数据之前,将数组转换为Point类。
... OSMMap::make('location') ->mutateDehydratedStateUsing(function ($state) { if (!($state instanceof Point)) return new Point($state['lat'], $state['lng']); return $state; }); ...
在状态更新后
确保在每次更新后都将数据转换为数组。
... OSMMap::make('location') ->afterStateUpdated(function ($state, callable $set) use ($name) { if ($state instanceof Point) { /** @var Point $state */ $set($name, ['lat' => $state->getLat(), 'lng' => $state->getLng()]); } }); ...
选项
许可证
MIT © Humaid Al Mansoori
感谢使用
希望这个包对您有用。