Contents
Map Field for Laravel Nova
Using this package, you can use spatial fields in Laravel Nova.
Requirements:
PHP 8.0.2 or higher
Laravel 8 or higher
Installation
Install the package via composer:
Publish config and assets:
Done
Usage
Create table with spatial fields
<?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->timestamps();
});
}
};
Add HasSpatialColumns trait to model
<?php
namespace AppModels;
use MostafaznvNovaMapFieldTraitsHasSpatialColumns;
class Location extends Model
{
use HasSpatialColumns;
}
Define spatial columns of model
<?php
namespace AppModels;
use MatanYadaevEloquentSpatialObjectsPoint;
use MatanYadaevEloquentSpatialObjectsPolygon;
class Location extends Model
{
use HasSpatialColumns;
protected $casts = [
‘location’ => Point::class,
‘area’ => Polygon::class
];
}
Add map fields to resource
<?php
namespace AppNovaResources;
use MostafaznvNovaMapFieldFieldsMapPointField;
use MostafaznvNovaMapFieldFieldsMapPolygonField;
class Location extends Resource
{
public function fields(Request $request): array
{
return [
MapPointField::make(‘location’),
MapPolygonField::make(‘area’)
];
}
}
Done
Map Field Methods
method
Arguments
description
defaultLatitude
latitude float
Specifies latitude of map on page load
defaultLongitude
longitude float
Specifies longitude of map on page load
zoom
zoom integer
Specifies default map zoom
withoutZoomControl
status bool default: true
Specifies whether zoom in/out button should display on map or not
withoutZoomSlider
status bool default: true
Specifies whether zoom slider should display on map or not
withFullScreenControl
status bool default: true
Specifies whether full screen button should display on map or not
mapHeight
height integer default: 400
Map’s height
markerIcon
icon integer available: 1, 2, 3
Marker icon
required
Makes field required
requiredOnCreate
status bool default: true
Makes field required on creation
requiredOnUpdate
status bool default: true
Makes field required on update
Config Properties
Method
Type
Default
Description
default-latitude
bool
0
Default latitude of map
default-longitude
bool
0
Default longitude of map
zoom
int
12
Default zoom of map
controls.zoom-control
bool
true
Specifies if map should display zoom controls (zoom in/out buttons) or not
controls.zoom-slider
bool
true
Specifies if map should display zoom slider or not
controls.full-screen-control
bool
false
Specifies if map should display full screen button or not
map-height
int
400
Specifies map height
icon
int
1
Specifies marker icon. available values: 1, 2, 3
Using Spatial Columns over Application
This package uses Laravel Eloquent Spatial under the hood. to use columns and querying them over the application, please read Laravel Eloquent Spatial documentation
Complete Example
<?php
namespace AppNovaResources;
use AppNovaResource;
use IlluminateHttpRequest;
use LaravelNovaFieldsID;
use LaravelNovaFieldsText;
use AppModelsLocation as Model;
use MostafaznvNovaMapFieldFieldsMapPointField;
use MostafaznvNovaMapFieldFieldsMapPolygonField;
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)
->markerIcon(3)
->required()
->requiredOnCreate()
->requiredOnUpdate()
->stacked(),
];
}
}
License
This software is released under The MIT License (MIT).