Passed
Push — 4.0.x ( 414ad0...5c8c8d )
by Doug
05:04 queued 12s
created

CoordinateReferenceSystem::fromSRID()   B

Complexity

Conditions 8
Paths 8

Size

Total Lines 19
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 9.214

Importance

Changes 0
Metric Value
cc 8
eloc 14
nc 8
nop 1
dl 0
loc 19
ccs 11
cts 15
cp 0.7332
crap 9.214
rs 8.4444
c 0
b 0
f 0
1
<?php
2
/**
3
 * PHPCoord.
4
 *
5
 * @author Doug Wright
6
 */
7
declare(strict_types=1);
8
9
namespace PHPCoord\CoordinateReferenceSystem;
10
11
use function array_merge;
12
use PHPCoord\CoordinateSystem\CoordinateSystem;
13
use PHPCoord\Datum\Datum;
14
use PHPCoord\Geometry\GeographicPolygon;
15
16
abstract class CoordinateReferenceSystem
17
{
18
    public const CRS_TYPE_COMPOUND = 'compound';
19
20
    public const CRS_TYPE_DERIVED = 'derived';
21
22
    public const CRS_TYPE_DYNAMIC_GEOCENTRIC = 'dynamic geocentric';
23
24
    public const CRS_TYPE_DYNAMIC_GEOGRAPHIC_2D = 'dynamic geographic 2D';
25
26
    public const CRS_TYPE_DYNAMIC_GEOGRAPHIC_3D = 'dynamic geographic 3D';
27
28
    public const CRS_TYPE_DYNAMIC_VERTICAL = 'dynamic vertical';
29
30
    public const CRS_TYPE_ENGINEERING = 'engineering';
31
32
    public const CRS_TYPE_GEOCENTRIC = 'geocentric';
33
34
    public const CRS_TYPE_GEOGRAPHIC_2D = 'geographic 2D';
35
36
    public const CRS_TYPE_GEOGRAPHIC_3D = 'geographic 3D';
37
38
    public const CRS_TYPE_PROJECTED = 'projected';
39
40
    public const CRS_TYPE_VERTICAL = 'vertical';
41
42
    public const CRS_SRID_PREFIX_EPSG = 'urn:ogc:def:crs:EPSG::';
43
44
    protected $srid;
45
46
    protected $coordinateSystem;
47
48
    protected $datum;
49
50
    protected $boundingBox;
51
52
    private static $cachedObjects = [];
53
54
    private static $supportedCache = [];
55
56 154
    public function getSRID(): string
57
    {
58 154
        return $this->srid;
59
    }
60
61 225
    public function getCoordinateSystem(): CoordinateSystem
62
    {
63 225
        return $this->coordinateSystem;
64
    }
65
66 138
    public function getDatum(): Datum
67
    {
68 138
        return $this->datum;
69
    }
70
71
    public function getBoundingBox(): GeographicPolygon
72
    {
73
        return $this->boundingBox;
74
    }
75
76 21
    public static function fromSRID(string $srid)
77
    {
78 21
        if (!isset(self::$cachedObjects[$srid])) {
79 12
            if (isset(Projected::getSupportedSRIDs()[$srid])) {
80 5
                self::$cachedObjects[$srid] = Projected::fromSRID($srid);
81 7
            } elseif (isset(Geographic2D::getSupportedSRIDs()[$srid])) {
82 6
                self::$cachedObjects[$srid] = Geographic2D::fromSRID($srid);
83 2
            } elseif (isset(Geographic3D::getSupportedSRIDs()[$srid])) {
84 2
                self::$cachedObjects[$srid] = Geographic3D::fromSRID($srid);
85 1
            } elseif (isset(Geocentric::getSupportedSRIDs()[$srid])) {
86 1
                self::$cachedObjects[$srid] = Geocentric::fromSRID($srid);
87
            } elseif (isset(Vertical::getSupportedSRIDs()[$srid])) {
88
                self::$cachedObjects[$srid] = Vertical::fromSRID($srid);
89
            } elseif (isset(Compound::getSupportedSRIDs()[$srid])) {
90
                self::$cachedObjects[$srid] = Compound::fromSRID($srid);
91
            }
92
        }
93
94 21
        return self::$cachedObjects[$srid];
95
    }
96
97 11
    public static function getSupportedSRIDs(): array
98
    {
99 11
        if (!self::$supportedCache) {
0 ignored issues
show
Bug Best Practice introduced by
The expression self::supportedCache of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
100 1
            self::$supportedCache = array_merge(Compound::getSupportedSRIDs(), Geocentric::getSupportedSRIDs(), Geographic2D::getSupportedSRIDs(), Geographic3D::getSupportedSRIDs(), Projected::getSupportedSRIDs(), Vertical::getSupportedSRIDs());
101
        }
102
103 11
        return self::$supportedCache;
104
    }
105
}
106