A custom field for Filament that allows you to effortlessly select a location on a map and retrieve geographical coordinates.
Map Picker is a Filament custom field designed to simplify the process of choosing a location on a map and obtaining its geo-coordinates.
- Features include:
- A Field for Filament-v3 with OpenStreetMap Integration
- Receive Real-time Coordinates Upon Marker Movement Completion
- Tailor Controls and Marker Appearance to Your Preferences
- Latest versions of PHP and Filament
- Best practices applied:
README.md
(badges included)LICENSE
composer.json
.gitignore
pint.json
Map Picker currently supports the following map:
- Open Street Map (OSM)
Additional map options will be added to the package as needed and tested.
You can easily install the package via Composer:
composer require dotswan/filament-map-picker
Resource file:
<?php
namespace App\Filament\Resources;
use Filament\Resources\Resource;
use Filament\Resources\Forms\Form;
use Dotswan\MapPicker\Fields\Map;
...
class FilamentResource extends Resource
{
...
public static function form(Form $form)
{
return $form->schema([
Map::make('location')
->label('Location')
->columnSpanFull()
->afterStateUpdated(function (Get $get, Set $set, string|array|null $old, ?array $state): void {
$set('latitude', $state['lat']);
$set('longitude', $state['lng']);
})
->afterStateHydrated(function ($state, $record, Set $set): void {
$set('location', ['lat' => $record->latitude, 'lng' => $record->longitude]);
})
->liveLocation()
->showMarker()
->markerColor("#22c55eff")
->showFullscreenControl()
->showZoomControl()
->draggable()
->tilesUrl("https://tile.openstreetmap.de/{z}/{x}/{y}.png")
->zoom(15)
->detectRetina()
->showMyLocationButton()
->extraTileControl([])
->extraControl([
'zoomDelta' => 1,
'zoomSnap' => 2,
])
]);
}
...
}
If you wish to update the map location and marker either through an action or after altering other input values, you can trigger a refresh of the map using the following approach:
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Actions;
use Filament\Support\Enums\VerticalAlignment;
Actions::make([
Action::make('Set Default Location')
->icon('heroicon-m-map-pin')
->action(function (Set $set, $state, $livewire): void {
$set('location', ['lat' => '52.35510989541003', 'lng' => '4.883422851562501']);
$set('latitude', '52.35510989541003');
$set('longitude', '4.883422851562501');
$livewire->dispatch('refreshMap');
})
])->verticalAlignment(VerticalAlignment::Start);
MIT License © Dotswan
We take security seriously. If you discover any bugs or security issues, please help us maintain a secure project by reporting them through our GitHub issue tracker
. You can also contact us directly at [email protected].
We welcome contributions! contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request