first commit

This commit is contained in:
LAPTOP-V9RRD1TL\Michelle's Computer
2025-07-21 21:38:17 +08:00
commit f8f8fcaf96
2529 changed files with 227800 additions and 0 deletions
+287
View File
@@ -0,0 +1,287 @@
<?php
require_once('../geoPHP.inc');
class Tests_20120702 extends PHPUnit_Framework_TestCase {
function setUp() {
}
function testMethods() {
$format = 'gpx';
$value = file_get_contents('./input/20120702.gpx');
$geometry = geoPHP::load($value, $format);
$methods = array(
array('name' => 'area'),
array('name' => 'boundary'),
array('name' => 'getBBox'),
array('name' => 'centroid'),
array('name' => 'length'),
array('name' => 'greatCircleLength', 'argument' => 6378137),
array('name' => 'haversineLength'),
array('name' => 'y'),
array('name' => 'x'),
array('name' => 'numGeometries'),
array('name' => 'geometryN', 'argument' => '1'),
array('name' => 'startPoint'),
array('name' => 'endPoint'),
array('name' => 'isRing'),
array('name' => 'isClosed'),
array('name' => 'numPoints'),
array('name' => 'pointN', 'argument' => '1'),
array('name' => 'exteriorRing'),
array('name' => 'numInteriorRings'),
array('name' => 'interiorRingN', 'argument' => '1'),
array('name' => 'dimension'),
array('name' => 'geometryType'),
array('name' => 'SRID'),
array('name' => 'setSRID', 'argument' => '4326'),
);
foreach($methods as $method) {
$argument = NULL;
$method_name = $method['name'];
if (isset($method['argument'])) {
$argument = $method['argument'];
}
$this->_methods_tester($geometry, $method_name, $argument);
}
}
function _methods_tester($geometry, $method_name, $argument) {
if (!method_exists($geometry, $method_name)) {
$this->fail("Method ".$method_name.'() doesn\'t exists.');
return;
}
switch ($method_name) {
case 'y':
case 'x':
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'geometryN':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'startPoint':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
//TODO: Add a method startPoint() to MultiLineString.
//$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'endPoint':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
//TODO: Add a method endPoint() to MultiLineString.
//$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'isRing':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'isClosed':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'pointN':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
//TODO: Add a method pointN() to MultiLineString.
//$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'exteriorRing':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'numInteriorRings':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'interiorRingN':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'setSRID':
//TODO: The method setSRID() should return TRUE.
break;
case 'SRID':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'getBBox':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'centroid':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'length':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertEquals($geometry->$method_name($argument), (float) '0.11624637315233', 'Failed on ' . $method_name);
}
break;
case 'numGeometries':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'numPoints':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'dimension':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'boundary':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'greatCircleLength':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotEquals($geometry->$method_name($argument), '9500.9359867418', 'Failed on ' . $method_name);
}
break;
case 'haversineLength':
case 'area':
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
break;
case 'geometryType':
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
break;
default:
$this->assertTrue($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
}
}
@@ -0,0 +1,63 @@
<?php
require_once('../geoPHP.inc');
class AdaptersTests extends PHPUnit_Framework_TestCase {
function setUp() {
}
function testAdapters() {
foreach (scandir('./input') as $file) {
$parts = explode('.',$file);
if ($parts[0]) {
$format = $parts[1];
$input = file_get_contents('./input/'.$file);
echo "\nloading: " . $file . " for format: " . $format;
$geometry = geoPHP::load($input, $format);
// Test adapter output and input. Do a round-trip and re-test
foreach (geoPHP::getAdapterMap() as $adapter_key => $adapter_class) {
if ($adapter_key != 'google_geocode') { //Don't test google geocoder regularily. Uncomment to test
$output = $geometry->out($adapter_key);
$this->assertNotNull($output, "Empty output on " . $adapter_key);
if ($output) {
$adapter_loader = new $adapter_class();
$test_geom_1 = $adapter_loader->read($output);
$test_geom_2 = $adapter_loader->read($test_geom_1->out($adapter_key));
$this->assertEquals($test_geom_1->out('wkt'), $test_geom_2->out('wkt'), "Mismatched adapter output in ".$adapter_class .' (test file: ' . $file . ')');
}
}
}
// Test to make sure adapter work the same wether GEOS is ON or OFF
// Cannot test methods if GEOS is not intstalled
if (!geoPHP::geosInstalled()) return;
foreach (geoPHP::getAdapterMap() as $adapter_key => $adapter_class) {
if ($adapter_key != 'google_geocode') { //Don't test google geocoder regularily. Uncomment to test
// Turn GEOS on
geoPHP::geosInstalled(TRUE);
$output = $geometry->out($adapter_key);
if ($output) {
$adapter_loader = new $adapter_class();
$test_geom_1 = $adapter_loader->read($output);
// Turn GEOS off
geoPHP::geosInstalled(FALSE);
$test_geom_2 = $adapter_loader->read($output);
// Turn GEOS back On
geoPHP::geosInstalled(TRUE);
// Check to make sure a both are the same with geos and without
$this->assertEquals($test_geom_1->out('wkt'), $test_geom_2->out('wkt'), "Mismatched adapter output between GEOS and NORM in ".$adapter_class .' (test file: ' . $file . ')');
}
}
}
}
}
}
}
+7
View File
@@ -0,0 +1,7 @@
<?php
require_once ('../geoPHP.inc');
if (!@include __DIR__ . '/../../vendor/autoload.php') {
die('You must set up the project dependencies, run the following commands:
wget http://getcomposer.org/composer.phar
php composer.phar install');
}
@@ -0,0 +1,20 @@
<?php
require_once ('../geoPHP.inc');
class GeoHashTest extends PHPUnit_Framework_TestCase {
function setUp() {
}
/**
* test cases for adjacent geohashes.
*/
function testAdjacent() {
$geohash = new Geohash();
$this->assertEquals ( 'xne', $geohash->adjacent ( 'xn7', 'top' ), 'Did not find correct top adjacent geohash for xn7' );
$this->assertEquals ( 'xnk', $geohash->adjacent ( 'xn7', 'right' ), 'Did not find correct right adjacent geohash for xn7' );
$this->assertEquals ( 'xn5', $geohash->adjacent ( 'xn7', 'bottom' ), 'Did not find correct bottom adjacent geohash for xn7' );
$this->assertEquals ( 'xn6', $geohash->adjacent ( 'xn7', 'left' ), 'Did not find correct left adjacent geohash for xn7' );
$this->assertEquals ( 'xnd', $geohash->adjacent ( $geohash->adjacent ( 'xn7', 'left' ), 'top' ), 'Did not find correct top-left adjacent geohash for xn7' );
}
}
+89
View File
@@ -0,0 +1,89 @@
<?php
require_once('../geoPHP.inc');
class GeosTests extends PHPUnit_Framework_TestCase {
function setUp() {
}
function testGeos() {
if (!geoPHP::geosInstalled()) {
echo "Skipping GEOS -- not installed";
return;
}
foreach (scandir('./input') as $file) {
$parts = explode('.',$file);
if ($parts[0]) {
$format = $parts[1];
$value = file_get_contents('./input/'.$file);
echo "\nloading: " . $file . " for format: " . $format;
$geometry = geoPHP::load($value, $format);
$geosMethods = array(
array('name' => 'geos'),
array('name' => 'setGeos', 'argument' => $geometry->geos()),
array('name' => 'PointOnSurface'),
array('name' => 'equals', 'argument' => $geometry),
array('name' => 'equalsExact', 'argument' => $geometry),
array('name' => 'relate', 'argument' => $geometry),
array('name' => 'checkValidity'),
array('name' => 'isSimple'),
array('name' => 'buffer', 'argument' => '10'),
array('name' => 'intersection', 'argument' => $geometry),
array('name' => 'convexHull'),
array('name' => 'difference', 'argument' => $geometry),
array('name' => 'symDifference', 'argument' => $geometry),
array('name' => 'union', 'argument' => $geometry),
array('name' => 'simplify', 'argument' => '0'),
array('name' => 'disjoint', 'argument' => $geometry),
array('name' => 'touches', 'argument' => $geometry),
array('name' => 'intersects', 'argument' => $geometry),
array('name' => 'crosses', 'argument' => $geometry),
array('name' => 'within', 'argument' => $geometry),
array('name' => 'contains', 'argument' => $geometry),
array('name' => 'overlaps', 'argument' => $geometry),
array('name' => 'covers', 'argument' => $geometry),
array('name' => 'coveredBy', 'argument' => $geometry),
array('name' => 'distance', 'argument' => $geometry),
array('name' => 'hausdorffDistance', 'argument' => $geometry),
);
foreach($geosMethods as $method) {
$argument = NULL;
$method_name = $method['name'];
if (isset($method['argument'])) {
$argument = $method['argument'];
}
switch ($method_name) {
case 'isSimple':
case 'equals':
case 'geos':
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
default:
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
}
}
}
}
}
}
+359
View File
@@ -0,0 +1,359 @@
<?php
require_once('../geoPHP.inc');
class MethodsTests extends PHPUnit_Framework_TestCase {
function setUp() {
}
function testMethods() {
foreach (scandir('./input') as $file) {
$parts = explode('.',$file);
if ($parts[0]) {
$format = $parts[1];
$value = file_get_contents('./input/'.$file);
echo "\nloading: " . $file . " for format: " . $format;
$geometry = geoPHP::load($value, $format);
$methods = array(
array('name' => 'area'),
array('name' => 'boundary'),
array('name' => 'getBBox'),
array('name' => 'centroid'),
array('name' => 'length'),
array('name' => 'greatCircleLength'),
array('name' => 'haversineLength'),
array('name' => 'y'),
array('name' => 'x'),
array('name' => 'numGeometries'),
array('name' => 'geometryN', 'argument' => '1'),
array('name' => 'startPoint'),
array('name' => 'endPoint'),
array('name' => 'isRing'),
array('name' => 'isClosed'),
array('name' => 'numPoints'),
array('name' => 'pointN', 'argument' => '1'),
array('name' => 'exteriorRing'),
array('name' => 'numInteriorRings'),
array('name' => 'interiorRingN', 'argument' => '1'),
array('name' => 'dimension'),
array('name' => 'geometryType'),
array('name' => 'SRID'),
array('name' => 'setSRID', 'argument' => '4326'),
);
foreach($methods as $method) {
$argument = NULL;
$method_name = $method['name'];
if (isset($method['argument'])) {
$argument = $method['argument'];
}
$this->_methods_tester($geometry, $method_name, $argument, $file);
}
$this->_methods_tester_with_geos($geometry);
}
}
}
function _methods_tester($geometry, $method_name, $argument, $file) {
if (!method_exists($geometry, $method_name)) {
$this->fail("Method ".$method_name.'() doesn\'t exists.');
return;
}
switch ($method_name) {
case 'y':
case 'x':
if (!$geometry->isEmpty()) {
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
}
break;
case 'geometryN':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'startPoint':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
//TODO: Add a method startPoint() to MultiLineString.
//$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'endPoint':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
//TODO: Add a method endPoint() to MultiLineString.
//$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name);
}
break;
case 'isRing':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'isClosed':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'pointN':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
//TODO: Add a method pointN() to MultiLineString.
//$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'exteriorRing':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'numInteriorRings':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'interiorRingN':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'SRID':
break;
case 'getBBox':
if (!$geometry->isEmpty()) {
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
}
break;
case 'centroid':
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'length':
if ($geometry->geometryType() == 'Point') {
$this->assertEquals($geometry->$method_name($argument), 0, 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotEquals($geometry->$method_name($argument), 0, 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotEquals($geometry->$method_name($argument), 0, 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'numGeometries':
if ($geometry->geometryType() == 'Point') {
$this->assertNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'numPoints':
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'dimension':
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'boundary':
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'haversineLength':
//TODO: Check if output is a float >= 0.
//TODO: Sometimes haversineLength() returns NAN, needs to check why.
break;
case 'greatCircleLength':
case 'area':
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
break;
case 'geometryType':
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
break;
case 'setSRID':
//TODO: The method setSRID() should return TRUE.
break;
default:
$this->assertTrue($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
}
function _methods_tester_with_geos($geometry) {
// Cannot test methods if GEOS is not intstalled
if (!geoPHP::geosInstalled()) return;
$methods = array(
//'boundary', //@@TODO: Uncomment this and fix errors
'envelope', //@@TODO: Testing reveales errors in this method -- POINT vs. POLYGON
'getBBox',
'x',
'y',
'startPoint',
'endPoint',
'isRing',
'isClosed',
'numPoints',
);
foreach ($methods as $method) {
// Turn GEOS on
geoPHP::geosInstalled(TRUE);
$geos_result = $geometry->$method();
// Turn GEOS off
geoPHP::geosInstalled(FALSE);
$norm_result = $geometry->$method();
// Turn GEOS back On
geoPHP::geosInstalled(TRUE);
$geos_type = gettype($geos_result);
$norm_type = gettype($norm_result);
if ($geos_type != $norm_type) {
$this->fail('Type mismatch on '.$method);
$this->dump($geos_type);
$this->dump($norm_type);
continue;
}
// Now check base on type
if ($geos_type == 'object') {
$haus_dist = $geos_result->hausdorffDistance(geoPHP::load($norm_result->out('wkt'),'wkt'));
// Get the length of the diagonal of the bbox - this is used to scale the haustorff distance
// Using Pythagorean theorem
$bb = $geos_result->getBBox();
$scale = sqrt((($bb['maxy'] - $bb['miny'])^2) + (($bb['maxx'] - $bb['minx'])^2));
// The difference in the output of GEOS and native-PHP methods should be less than 0.5 scaled haustorff units
if ($haus_dist / $scale > 0.5) {
$this->fail('Output mismatch on '.$method);
$this->dump('GEOS : ');
$this->dump($geos_result->out('wkt'));
$this->dump('NORM : ');
$this->dump($norm_result->out('wkt'));
continue;
}
}
if ($geos_type == 'boolean' || $geos_type == 'string') {
if ($geos_result !== $norm_result) {
$this->fail('Output mismatch on '.$method);
$this->dump('GEOS : ');
$this->dump((string) $geos_result);
$this->dump('NORM : ');
$this->dump((string) $norm_result);
continue;
}
}
//@@TODO: Run tests for output of types arrays and float
//@@TODO: centroid function is non-compliant for collections and strings
}
}
}
@@ -0,0 +1,60 @@
<?php
require_once('../geoPHP.inc');
class PlaceholdersTests extends PHPUnit_Framework_TestCase {
function setUp() {
}
function testPlaceholders() {
foreach (scandir('./input') as $file) {
$parts = explode('.',$file);
if ($parts[0]) {
$format = $parts[1];
$value = file_get_contents('./input/'.$file);
echo "\nloading: " . $file . " for format: " . $format;
$geometry = geoPHP::load($value, $format);
$placeholders = array(
array('name' => 'hasZ'),
array('name' => 'is3D'),
array('name' => 'isMeasured'),
array('name' => 'isEmpty'),
array('name' => 'coordinateDimension'),
array('name' => 'z'),
array('name' => 'm'),
);
foreach($placeholders as $method) {
$argument = NULL;
$method_name = $method['name'];
if (isset($method['argument'])) {
$argument = $method['argument'];
}
switch ($method_name) {
case 'hasZ':
if ($geometry->geometryType() == 'Point') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'LineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
if ($geometry->geometryType() == 'MultiLineString') {
$this->assertNotNull($geometry->$method_name($argument), 'Failed on ' . $method_name .' (test file: ' . $file . ')');
}
break;
case 'm':
case 'z':
case 'coordinateDimension':
case 'isEmpty':
case 'isMeasured':
case 'is3D':
}
}
}
}
}
}