1<?php
2
3namespace geoPHP\Geometry;
4
5/**
6 * A Surface is a 2-dimensional abstract geometric object.
7 *
8 * OGC 06-103r4 6.1.10 specification:
9 * A simple Surface may consists of a single “patch” that is associated with one “exterior boundary” and 0 or more
10 * “interior” boundaries. A single such Surface patch in 3-dimensional space is isometric to planar Surfaces, by a
11 * simple affine rotation matrix that rotates the patch onto the plane z = 0. If the patch is not vertical, the
12 * projection onto the same plane is an isomorphism, and can be represented as a linear transformation, i.e. an affine.
13 *
14 * @package geoPHP\Geometry
15 */
16abstract class Surface extends Collection
17{
18
19    public function __construct($components = [], $allowEmptyComponents = true, $allowedComponentType = Curve::class)
20    {
21        parent::__construct($components, $allowEmptyComponents, $allowedComponentType);
22    }
23
24    public function geometryType()
25    {
26        return Geometry::SURFACE;
27    }
28
29    public function dimension()
30    {
31        return 2;
32    }
33
34    public function startPoint()
35    {
36        return null;
37    }
38
39    public function endPoint()
40    {
41        return null;
42    }
43
44    public function pointN($n)
45    {
46        return null;
47    }
48
49    public function isClosed()
50    {
51        return null;
52    }
53
54    public function isRing()
55    {
56        return null;
57    }
58
59    public function length()
60    {
61        return 0;
62    }
63
64    public function length3D()
65    {
66        return 0;
67    }
68
69    public function haversineLength()
70    {
71        return 0;
72    }
73
74    public function greatCircleLength($radius = null)
75    {
76        return 0;
77    }
78
79    public function minimumZ()
80    {
81        return null;
82    }
83
84    public function maximumZ()
85    {
86        return null;
87    }
88
89    public function minimumM()
90    {
91        return null;
92    }
93
94    public function maximumM()
95    {
96        return null;
97    }
98
99    public function elevationGain($verticalTolerance = 0)
100    {
101        return null;
102    }
103
104    public function elevationLoss($verticalTolerance = 0)
105    {
106        return null;
107    }
108
109    public function zDifference()
110    {
111        return null;
112    }
113}
114