Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"php": ">=5.5",
"ext-pdo": "*",
"ext-json": "*",
"ext-intl": "*",
"illuminate/database": "^5.2|^6.0",
"geo-io/wkb-parser": "^1.0",
"jmikola/geojson": "^1.0"
Expand Down
11 changes: 9 additions & 2 deletions src/Types/Point.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Grimzy\LaravelMysqlSpatial\Types;

use NumberFormatter;
use GeoJson\GeoJson;
use GeoJson\Geometry\Point as GeoJsonPoint;
use Grimzy\LaravelMysqlSpatial\Exceptions\InvalidGeoJsonException;
Expand Down Expand Up @@ -40,7 +41,13 @@ public function setLng($lng)

public function toPair()
{
return $this->getLng().' '.$this->getLat();
$formatter = new NumberFormatter('en_US', NumberFormatter::DECIMAL);
$formatter->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, -1);

$lng = $formatter->format($this->getLng());
$lat = $formatter->format($this->getLat());

return $lng . ' ' . $lat;
}

public static function fromPair($pair)
Expand All @@ -62,7 +69,7 @@ public static function fromString($wktArgument)

public function __toString()
{
return $this->getLng().' '.$this->getLat();
return $this->toPair();
}

/**
Expand Down
105 changes: 105 additions & 0 deletions tests/Unit/Types/PointLocaleTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<?php

use Grimzy\LaravelMysqlSpatial\Types\Point;

class PointLocaleTest extends BaseTestCase
{

public function setUp()
{
parent::setUp();

setlocale(LC_ALL, 'pt_BR.UTF-8');
}

public function tearDown()
{
parent::setUp();

setlocale(LC_ALL, 'en_US.UTF-8');
}


public function testFromWKT()
{
$point = Point::fromWKT('POINT(1 2)');

$this->assertInstanceOf(Point::class, $point);
$this->assertEquals(2, $point->getLat());
$this->assertEquals(1, $point->getLng());
}

public function testToWKT()
{
$point = new Point(1, 2);

$this->assertEquals('POINT(2 1)', $point->toWKT());
}

public function testGettersAndSetters()
{
$point = new Point(1, 2);
$this->assertSame(1.0, $point->getLat());
$this->assertSame(2.0, $point->getLng());

$point->setLat('3');
$point->setLng('4');

$this->assertSame(3.0, $point->getLat());
$this->assertSame(4.0, $point->getLng());
}

public function testPairLocale()
{
setlocale(LC_ALL, 'pt_BR.UTF-8');
$point = Point::fromPair('1.5 2');

$this->assertSame(1.5, $point->getLng());
$this->assertSame(2.0, $point->getLat());

$this->assertSame('1.5 2', $point->toPair());
setlocale(LC_ALL, "en-US.UTF-8");
}

public function testPair()
{
$point = Point::fromPair('1.5 2');

$this->assertSame(1.5, $point->getLng());
$this->assertSame(2.0, $point->getLat());

$this->assertSame('1.5 2', $point->toPair());
}

public function testToString()
{
$point = Point::fromString('1.3 2');

$this->assertSame(1.3, $point->getLng());
$this->assertSame(2.0, $point->getLat());

$this->assertEquals('1.3 2', (string) $point);
}

public function testFromJson()
{
$point = Point::fromJson('{"type":"Point","coordinates":[3.4,1.2]}');
$this->assertInstanceOf(Point::class, $point);
$this->assertEquals(1.2, $point->getLat());
$this->assertEquals(3.4, $point->getLng());
}

public function testInvalidGeoJsonException()
{
$this->setExpectedException(\Grimzy\LaravelMysqlSpatial\Exceptions\InvalidGeoJsonException::class);
Point::fromJson('{"type": "LineString","coordinates":[[1,1],[2,2]]}');
}

public function testJsonSerialize()
{
$point = new Point(1.2, 3.4);

$this->assertInstanceOf(\GeoJson\Geometry\Point::class, $point->jsonSerialize());
$this->assertSame('{"type":"Point","coordinates":[3.4,1.2]}', json_encode($point));
}
}