Download the PHP package tarfin-labs/laravel-spatial without Composer

On this page you can find all versions of the php package tarfin-labs/laravel-spatial. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package laravel-spatial

Laravel Spatial

Latest Version on Packagist Total Downloads GitHub Actions

This is a Laravel package to work with geospatial data types and functions.

It supports only MySQL Spatial Data Types and Functions, other RDBMS is on the roadmap.

Laravel Compatibility

Version Supported Laravel Versions
2.x ^11.0
1.x ^8.0, ^9.0, ^10.0

Supported data types:

Available Scopes:


Installation

You can install the package via composer:

Usage

Generate a new model with a migration file:

1- Migrations:

Code Differences Based on Laravel Version

Some code snippets in the project differ before and after Laravel 11 version. Below are the steps to specify these differences:

For Laravel 8, 9, and 10 Versions

To add a spatial data field, you need to extend the migration from TarfinLabs\LaravelSpatial\Migrations\SpatialMigration.

It is a simple abstract class that adds point spatial data type to Doctrine mapped types in the constructor.

The migration above creates an addresses table with a location spatial column.

Spatial columns with no SRID attribute are not SRID-restricted and accept values with any SRID. However, the optimizer cannot use SPATIAL indexes on them until the column definition is modified to include an SRID attribute, which may require that the column contents first be modified so that all values have the same SRID.

So you should give an SRID attribute to use spatial indexes in the migrations and indexed columns must be NOT NULL:

For Laravel 11 and Above Versions

From Laravel 11 onwards, migrations are created as follows:

In Laravel 11, the methods point, lineString, polygon, geometryCollection, multiPoint, multiLineString, and multiPolygon have been removed. Therefore, we are updating to use the geography method instead. The geography method sets the default SRID value to 4326.

Issue with adding a new location column with index to an existing table:

When adding a new location column with an index in Laravel, it can be troublesome if you have existing data. One common mistake is trying to set a default value for the new column using ->default(new Point(0, 0, 4326)). However, POINT columns cannot have a default value, which can cause issues when trying to add an index to the column, as indexed columns cannot be nullable.

To solve this problem, it is recommended to perform a two-step migration like following:

For Laravel 8, 9, and 10 Versions

For Laravel 11 and Above Versions


2- Models:

Fill the $fillable, $casts arrays in the model:

3- Spatial Data Types:

Point:

Point represents the coordinates of a location and contains latitude, longitude, and srid properties.

At this point, it is crucial to understand what SRID is. Each spatial instance has a spatial reference identifier (SRID). The SRID corresponds to a spatial reference system based on the specific ellipsoid used for either flat-earth mapping or round-earth mapping. A spatial column can contain objects with different SRIDs.

For details about SRID you can follow the link: https://en.wikipedia.org/wiki/Spatial_reference_system

You can override the default SRID via the laravel-spatial config file. To do that, you should publish the config file using vendor:publish artisan command:

After that, you can change the value of default_srid in config/laravel-spatial.php


Configuring WKT options

By default, this package uses the longitude latitude order for the coordinate values in the WKT format used by spatial functions. This is necessary for some versions of MySQL, which will interpret coordinate pairs as lat-long unless the axis-order option is explicitly set to long-lat.

However, MariaDB reads WKT values as long-lat by default, and its spatial functions like ST_GeomFromText and ST_DISTANCE do not accept an options parameter like their MySQL counterparts. This means that using the package with MariaDB will result in a Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'ST_GeomFromText' exception.

To address this issue, we have added a with_wkt_options parameter to the config file that can be used to override the default options. This property can be set to false to remove the options parameter entirely, which fixes the errors when using MariaDB.


Bulk Operations

In order to insert or update several rows with spatial data in one query using the upsert() method in Laravel, the package requires a workaround solution to avoid the error Object of class TarfinLabs\LaravelSpatial\Types\Point could not be converted to string.

The solution is to use the toGeomFromText() method to convert the Point object to a WKT string, and then use DB::raw() to create a raw query string.

Here's an example of how to use this workaround in your code:


4- Scopes:

withinDistanceTo()

You can use the withinDistanceTo() scope to filter locations by given distance:

To filter addresses within the range of 10 km from the given coordinate:

selectDistanceTo()

You can get the distance between two points by using selectDistanceTo() scope. The distance will be in meters:

orderByDistanceTo()

You can order your models by distance to given coordinates:

Get latitude and longitude of the location:

Create a new address with location:

Usage in Resource:

To get an array representation of a location-casted field from a resource, you can return parent::toArray($request).

If you need to return a custom array from a resource, you can use the toArray() method of the Point object.

Either way, you will get the following output for the location casted field:

Testing

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.


All versions of laravel-spatial with dependencies

PHP Build Version
Package Version
Requires php Version ^8.0|^8.1|^8.2
illuminate/support Version ^8.0|^9.0|^10.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package tarfin-labs/laravel-spatial contains the following files

Loading the files please wait ....