spiritsaint / nova-map-field
Laravel Nova的地图字段
v1.0.2
2022-10-22 07:36 UTC
Requires
- illuminate/support: ^8.0|^9.0
- matanyadaev/laravel-eloquent-spatial: ^2.0.1
This package is auto-updated.
Last update: 2024-08-29 09:50:20 UTC
README
使用此包,您可以在Laravel Nova中使用空间字段。
🚀 如果您对这个项目感兴趣,请考虑在开源之旅中支持我
要求
- PHP 8.0.2或更高版本
- Laravel 8或更高版本
安装
-
通过composer安装此包
composer require mostafaznv/nova-map-field
-
发布配置和资产
php artisan vendor:publish --provider="Mostafaznv\NovaMapField\NovaMapFieldServiceProvider"
-
完成
用法
-
创建具有空间字段的表
<?php return new class extends Migration { public function up() { Schema::create('locations', function (Blueprint $table) { $table->id(); $table->string('title', 150); $table->point('location')->nullable(); $table->polygon('area')->nullable(); $table->multiPolygon('areas')->nullable(); $table->timestamps(); }); } };
-
将
HasSpatialColumns
特质添加到模型中<?php namespace App\Models; use Mostafaznv\NovaMapField\Traits\HasSpatialColumns; class Location extends Model { use HasSpatialColumns; }
-
定义模型的空间列
<?php namespace App\Models; use MatanYadaev\EloquentSpatial\Objects\MultiPolygon; use MatanYadaev\EloquentSpatial\Objects\Point; use MatanYadaev\EloquentSpatial\Objects\Polygon; class Location extends Model { use HasSpatialColumns; protected $casts = [ 'location' => Point::class, 'area' => Polygon::class, 'areas' => MultiPolygon::class ]; }
-
将地图字段添加到资源中
<?php namespace App\Nova\Resources; use Mostafaznv\NovaMapField\Fields\MapMultiPolygonField; use Mostafaznv\NovaMapField\Fields\MapPointField; use Mostafaznv\NovaMapField\Fields\MapPolygonField; class Location extends Resource { public function fields(Request $request): array { return [ MapPointField::make('location'), MapPolygonField::make('area'), MapMultiPolygonField::make('areas'), ]; } }
-
完成
地图字段方法
配置属性
在应用程序中使用空间列
此包在底层使用Laravel Eloquent Spatial。要使用列并在应用程序中对它们进行查询,请参阅Laravel Eloquent Spatial文档
完整示例
<?php namespace App\Nova\Resources; use App\Nova\Resource; use Illuminate\Http\Request; use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Text; use App\Models\Location as Model; use Mostafaznv\NovaMapField\DTOs\MapSearchBoxType; use Mostafaznv\NovaMapField\DTOs\MapSearchProvider; use Mostafaznv\NovaMapField\Fields\MapPointField; class Location extends Resource { public static string $model = Model::class; public function fields(Request $request): array { return [ ID::make()->sortable(), Text::make('Title') ->sortable() ->rules('required', 'max:255'), MapPointField::make(trans('Location'), 'location') ->defaultLatitude(35.6978527) ->defaultLongitude(51.4037269) ->zoom(14) ->withoutZoomControl() ->withoutZoomSlider() ->withFullScreenControl() ->mapHeight(360) ->hideDetailButton(false) ->markerIcon(3) ->searchProvider(MapSearchProvider::OSM()) ->searchProviderApiKey('api-key') ->withAutocompleteSearch() ->searchAutocompleteMinLength(4) ->searchAutocompleteTimeout(500) ->searchLanguage('fa-IR') ->searchPlaceholder('Placeholder ...') ->searchBoxType(MapSearchBoxType::BUTTON()) ->searchResultLimit(3) ->searchResultKeepOpen(true) ->required() ->requiredOnCreate() ->requiredOnUpdate() ->stacked(), ]; } }
🚀 如果您对这个项目感兴趣,请考虑在开源之旅中支持我
许可
此软件在MIT许可(MIT)下发布。