1. Go to this page and download the library: Download jamesil/nova-google-polygon library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jamesil / nova-google-polygon example snippets
use Jamesil\NovaGooglePolygon\GooglePolygon;
class Location extends Resource
{
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Text::make('Name'),
GooglePolygon::make('Coverage Area', 'coverage_area'),
];
}
}
Schema::create('locations', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->json('coverage_area')->nullable();
$table->timestamps();
});
use Jamesil\NovaGooglePolygon\Casts\AsPolygon;
class Location extends Model
{
protected $casts = [
'coverage_area' => AsPolygon::class,
];
}
use Jamesil\NovaGooglePolygon\Support\Polygon;
use Jamesil\NovaGooglePolygon\Support\Point;
// Create a polygon
$polygon = new Polygon([
['lat' => 48.858361, 'lng' => 2.336164],
['lat' => 48.859361, 'lng' => 2.337164],
['lat' => 48.857361, 'lng' => 2.338164],
]);
// Check if a point is inside the polygon
$point = new Point(48.858500, 2.337000);
$isInside = $polygon->contain($point); // returns true
// Get bounding box
$boundingBox = $polygon->getBoundingBox();
// Get min/max coordinates
$minLat = $polygon->getMinLatitude();
$maxLat = $polygon->getMaxLatitude();
$minLng = $polygon->getMinLongitude();
$maxLng = $polygon->getMaxLongitude();
// Nova Resource
use Jamesil\NovaGooglePolygon\GooglePolygon;
class PickupZone extends Resource
{
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Text::make('Zone Name'),
Number::make('Base Fare'),
Boolean::make('Active'),
GooglePolygon::make('Pickup Area', 'pickup_area'),
];
}
}
// Model
use Jamesil\NovaGooglePolygon\Casts\AsPolygon;
use Jamesil\NovaGooglePolygon\Support\Point;
class PickupZone extends Model
{
protected $casts = [
'pickup_area' => AsPolygon::class,
'active' => 'boolean',
];
public function isPickupAllowed($latitude, $longitude)
{
if (!$this->active || !$this->pickup_area) {
return false;
}
$point = new Point($latitude, $longitude);
return $this->pickup_area->contain($point);
}
public static function findAvailableZone($latitude, $longitude)
{
return static::where('active', true)
->get()
->first(function ($zone) use ($latitude, $longitude) {
return $zone->isPickupAllowed($latitude, $longitude);
});
}
public function getTotalFare($distance, $duration)
{
// Calculate fare based on zone's base fare
return $this->base_fare + ($distance * 2.5) + ($duration * 0.5);
}
}