Skip to content

Commit 25cb066

Browse files
committed
add clone() method
1 parent 0c087ff commit 25cb066

2 files changed

Lines changed: 39 additions & 18 deletions

File tree

src/Coord.php

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ private function gcj02ToWgs84()
4545
$mglatitude = $this->latitude + $dlatitude;
4646
$mglongitude = $this->longitude + $dlongitude;
4747

48-
return new self($this->longitude * 2 - $mglongitude, $this->latitude * 2 - $mglatitude, self::WGS84);
48+
$this->longitude = $this->longitude * 2 - $mglongitude;
49+
$this->latitude = $this->latitude * 2 - $mglatitude;
50+
$this->type = self::WGS84;
51+
52+
return $this;
4953
}
5054
}
5155

@@ -65,7 +69,11 @@ private function wgs84ToGcj02()
6569
$mglatitude = $this->latitude + $dlatitude;
6670
$mglongitude = $this->longitude + $dlongitude;
6771

68-
return new self($mglongitude, $mglatitude, self::GCJ02);
72+
$this->longitude = $mglongitude;
73+
$this->latitude = $mglatitude;
74+
$this->type = self::GCJ02;
75+
76+
return $this;
6977
}
7078
}
7179

@@ -76,7 +84,11 @@ private function bd09ToGcj02()
7684
$z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * self::X_PI);
7785
$theta = atan2($y, $x) - 0.000003 * cos($x * self::X_PI);
7886

79-
return new self($z * cos($theta), $z * sin($theta), self::GCJ02);
87+
$this->longitude = $z * cos($theta);
88+
$this->latitude = $z * sin($theta);
89+
$this->type = self::GCJ02;
90+
91+
return $this;
8092
}
8193

8294
private function gcj02ToBd09()
@@ -87,7 +99,11 @@ private function gcj02ToBd09()
8799
$bd_longitude = $z * cos($theta) + 0.0065;
88100
$bd_latitude = $z * sin($theta) + 0.006;
89101

90-
return new self($bd_longitude, $bd_latitude, self::BD09);
102+
$this->longitude = $bd_longitude;
103+
$this->latitude = $bd_latitude;
104+
$this->type = self::BD09;
105+
106+
return $this;
91107
}
92108

93109
private function bd09ToWgs84()
@@ -120,6 +136,11 @@ private function transformLongitude($longitude, $latitude)
120136
return $ret;
121137
}
122138

139+
public function clone()
140+
{
141+
return clone $this;
142+
}
143+
123144
public function isOutOfChina()
124145
{
125146
return ($this->longitude < 72.004 || $this->longitude > 137.8347)
@@ -196,7 +217,7 @@ public function to($type)
196217

197218
public function distanceTo(Coord $destination)
198219
{
199-
$destination = $destination->to($this->type);
220+
$destination->to($this->type);
200221

201222
$latitudeRadA = deg2rad($this->latitude);
202223
$longitudeRadA = deg2rad($this->longitude);

tests/CoordTest.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,33 @@ public function testIsOutOfChina()
2525
public function testTransformFromBd09()
2626
{
2727
$coord = new Coord(116.404, 39.915, Coord::BD09);
28-
$this->assertEquals('116.39138369951,39.907253214522', $coord->toWgs84());
29-
$this->assertEquals('116.39762729119,39.908656739576', $coord->toGcj02());
30-
$this->assertEquals($coord, $coord->toBd09());
28+
$this->assertEquals('116.39138369951,39.907253214522', $coord->clone()->toWgs84());
29+
$this->assertEquals('116.39762729119,39.908656739576', $coord->clone()->toGcj02());
30+
$this->assertEquals($coord, $coord->clone()->toBd09());
3131
}
3232

3333
public function testTransformFromGcj02()
3434
{
3535
$coord = new Coord(116.404, 39.915, Coord::GCJ02);
36-
$this->assertEquals('116.39775550083,39.913595718498', $coord->toWgs84());
37-
$this->assertEquals($coord, $coord->toGcj02());
38-
$this->assertEquals('116.41036949371,39.92133699351', $coord->toBd09());
36+
$this->assertEquals('116.39775550083,39.913595718498', $coord->clone()->toWgs84());
37+
$this->assertEquals($coord, $coord->clone()->toGcj02());
38+
$this->assertEquals('116.41036949371,39.92133699351', $coord->clone()->toBd09());
3939

4040
$coord = new Coord(35.765, 140.386, Coord::GCJ02);
41-
$this->assertEquals($coord, $coord->toWgs84());
41+
$this->assertEquals($coord, $coord->clone()->toWgs84());
4242
}
4343

4444
public function testTransformFromWgs84()
4545
{
4646
$coord = new Coord(116.404, 39.915, Coord::WGS84);
47-
$this->assertEquals($coord, $coord->toWgs84());
48-
$this->assertEquals('116.41024449917,39.916404281502', $coord->toGcj02());
49-
$this->assertEquals('116.41662724379,39.922699552216', $coord->toBd09());
50-
$this->assertEquals($coord->toGcj02(), $coord->to(Coord::GCJ02));
51-
$this->assertEquals($coord->toBd09(), $coord->to(Coord::BD09));
47+
$this->assertEquals($coord, $coord->clone()->toWgs84());
48+
$this->assertEquals('116.41024449917,39.916404281502', $coord->clone()->toGcj02());
49+
$this->assertEquals('116.41662724379,39.922699552216', $coord->clone()->toBd09());
50+
$this->assertEquals($coord->clone()->toGcj02(), $coord->clone()->to(Coord::GCJ02));
51+
$this->assertEquals($coord->clone()->toBd09(), $coord->clone()->to(Coord::BD09));
5252

5353
$coord = new Coord(35.765, 140.386, Coord::WGS84);
54-
$this->assertEquals($coord, $coord->toGcj02());
54+
$this->assertEquals($coord, $coord->clone()->toGcj02());
5555
}
5656

5757
public function testDistance()

0 commit comments

Comments
 (0)