davidpiesse / nova-map
Map field for Laravel Nova
Installs: 215 104
Dependents: 0
Suggesters: 0
Security: 0
Stars: 114
Watchers: 9
Forks: 29
Open Issues: 5
Language:Vue
Requires
- php: >=7.1.0
README
Map Field
This map field currently ONLY shows in details view
You can use this Map Field with three different sort of spatial data:
-
GeoJSON String property
-
Latitude and Longitude properties
-
Latitude and Longitude both in a single text field
-
Core Laravel Spatial Types
- Point
- LineString
- Polygon
- Geometry
- GeometryCollection
- MultiPoint
- MultiLineString
- MultiPolygon To use these core types you need to install grimzy/laravel-mysql-spatial See the section below on setting this up. This can work with other databases, but YMMV.
-
You can set the height of the map in px
-
The field is disabled in Index and Form views by default
-
This is very much a WIP - please submit issues to GitHub
Spatial Types
To specify what sort of spatial data you are passing to this field you MUST set the spatialType() for example
->spatialType('Point')
These are the valid Spatial Types
- LatLon
- LatLonField (single field)
- GeoJSON
- Point
- LineString
- Polygon
- Geometry
- GeometryCollection
- MultiPoint
- MultiLineString
- MultiPolygon
Examples
Point
Map::make('Some Point Field', 'point_field_name') ->spatialType('Point'),
Polygon
Map::make('Some Polygon Field', 'polygon_field_name') ->spatialType('Polygon'),
GeoJSON
Map::make('Some GeoJSON Field') ->spatialType('GeoJSON') ->geojson('geojson_field_name'),
Latitude & Longitude (in seperate fields)
Map::make('Some Point Location') ->spatialType('LatLon') ->latitude('latitude_field_name') ->longitude('longitude_field_name'),
Latitude & Longitude (in single fields)
Map::make('Some Point Location', 'coordinate_field_name') ->spatialType('LatLonField'),
Set the Height
Map::make('Some Point Field', 'point_field_name') ->spatialType('Point') ->height('300px'),
Setting up the Laravel Spatial Types
You need to install grimzy/laravel-mysql-spatial into your main application
composer require grimzy/laravel-mysql-spatial
Add the SpatialTrait to your Model
use SpatialTrait;
You then also need to set any spatial fields you have set in the Model
protected $spatialFields = [ 'geo_point', 'geo_linestring', ... ];
Your Model is now ready to process spatial data to Nova
Future Development
- Editing capabilities for all Spatial Types
- View Place Field address on a Map
- Remove reliance on grimzy package from accessing core Spatial Types
- Allow all DB spatial fields to be used
- Customize the map futher
- Tailwind Height classes
- Customise Geometry Styling
- Marker Icon
- Colors, Thicknesses, Opacity
- Basemap
- Streets
- Topo
- Satellite
- Navigation Tools (Compass, Zoom In/Out)
- Alternative Map Providers
- Google Maps
- Mapbox
- OpenLayers