Ejemplo n.º 1
0
 public function getImageCornerLatLngs()
 {
     $corners = array();
     $rotation = -$this->rotation;
     $corners["ne"] = new LatLng($this->north, $this->east);
     $corners["nw"] = new LatLng($this->north, $this->west);
     $corners["sw"] = new LatLng($this->south, $this->west);
     $corners["se"] = new LatLng($this->south, $this->east);
     $projectionOrigin = new LatLng(($this->north + $this->south) / 2, ($this->east + $this->west) / 2);
     $projectedMapCenter = $projectionOrigin->project($projectionOrigin);
     $projectedCorners = array();
     $projectedCorners["ne"] = $corners["ne"]->project($projectionOrigin);
     $projectedCorners["nw"] = $corners["nw"]->project($projectionOrigin);
     $projectedCorners["sw"] = $corners["sw"]->project($projectionOrigin);
     $projectedCorners["se"] = $corners["se"]->project($projectionOrigin);
     $projectedRotatedCorners = array();
     $projectedRotatedCorners["ne"] = LinearAlgebraUtil::rotate($projectedCorners["ne"], $projectedMapCenter, $rotation);
     $projectedRotatedCorners["nw"] = LinearAlgebraUtil::rotate($projectedCorners["nw"], $projectedMapCenter, $rotation);
     $projectedRotatedCorners["sw"] = LinearAlgebraUtil::rotate($projectedCorners["sw"], $projectedMapCenter, $rotation);
     $projectedRotatedCorners["se"] = LinearAlgebraUtil::rotate($projectedCorners["se"], $projectedMapCenter, $rotation);
     $projectedRotatedCorners = array();
     $projectedRotatedCorners["ne"] = LinearAlgebraUtil::rotate($projectedCorners["ne"], $projectedMapCenter, $rotation);
     $projectedRotatedCorners["nw"] = LinearAlgebraUtil::rotate($projectedCorners["nw"], $projectedMapCenter, $rotation);
     $projectedRotatedCorners["sw"] = LinearAlgebraUtil::rotate($projectedCorners["sw"], $projectedMapCenter, $rotation);
     $projectedRotatedCorners["se"] = LinearAlgebraUtil::rotate($projectedCorners["se"], $projectedMapCenter, $rotation);
     $rotatedCorners = array();
     $rotatedCorners["nw"] = $projectedRotatedCorners["nw"]->deproject($projectionOrigin);
     $rotatedCorners["ne"] = $projectedRotatedCorners["ne"]->deproject($projectionOrigin);
     $rotatedCorners["sw"] = $projectedRotatedCorners["sw"]->deproject($projectionOrigin);
     $rotatedCorners["se"] = $projectedRotatedCorners["se"]->deproject($projectionOrigin);
     return $rotatedCorners;
 }
Ejemplo n.º 2
0
 private function getKmlLatLonBox($pixelImageCorners, $projectionOrigin, $inverseTransformationMatrix)
 {
     // translate corner pixels of map image to projected points
     $projectedCorners = array();
     $projectedCorners["nw"] = LinearAlgebraUtil::transformPoint($pixelImageCorners["nw"], $inverseTransformationMatrix);
     $projectedCorners["ne"] = LinearAlgebraUtil::transformPoint($pixelImageCorners["ne"], $inverseTransformationMatrix);
     $projectedCorners["sw"] = LinearAlgebraUtil::transformPoint($pixelImageCorners["sw"], $inverseTransformationMatrix);
     $projectedCorners["se"] = LinearAlgebraUtil::transformPoint($pixelImageCorners["se"], $inverseTransformationMatrix);
     // get rotation
     $dx = $projectedCorners["nw"]->x - $projectedCorners["sw"]->x;
     $dy = $projectedCorners["nw"]->y - $projectedCorners["sw"]->y;
     $mapRotation = $dy == 0 ? 0 : -atan($dx / $dy);
     // in radians
     $corners = array();
     $corners["nw"] = $projectedCorners["nw"]->deproject($projectionOrigin);
     $corners["ne"] = $projectedCorners["ne"]->deproject($projectionOrigin);
     $corners["sw"] = $projectedCorners["sw"]->deproject($projectionOrigin);
     $corners["se"] = $projectedCorners["se"]->deproject($projectionOrigin);
     $mapCenter = new LatLng($corners["nw"]->lat / 4 + $corners["ne"]->lat / 4 + $corners["sw"]->lat / 4 + $corners["se"]->lat / 4, $corners["nw"]->lng / 4 + $corners["ne"]->lng / 4 + $corners["sw"]->lng / 4 + $corners["se"]->lng / 4);
     $projectedMapCenter = $mapCenter->project($projectionOrigin);
     $projectedRotatedCorners = array();
     $projectedRotatedCorners["nw"] = LinearAlgebraUtil::rotate($projectedCorners["nw"], $projectedMapCenter, $mapRotation);
     $projectedRotatedCorners["ne"] = LinearAlgebraUtil::rotate($projectedCorners["ne"], $projectedMapCenter, $mapRotation);
     $projectedRotatedCorners["sw"] = LinearAlgebraUtil::rotate($projectedCorners["sw"], $projectedMapCenter, $mapRotation);
     $projectedRotatedCorners["se"] = LinearAlgebraUtil::rotate($projectedCorners["se"], $projectedMapCenter, $mapRotation);
     $rotatedCorners = array();
     $rotatedCorners["nw"] = $projectedRotatedCorners["nw"]->deproject($projectionOrigin);
     $rotatedCorners["ne"] = $projectedRotatedCorners["ne"]->deproject($projectionOrigin);
     $rotatedCorners["sw"] = $projectedRotatedCorners["sw"]->deproject($projectionOrigin);
     $rotatedCorners["se"] = $projectedRotatedCorners["se"]->deproject($projectionOrigin);
     // get latlng bounding box
     $box = new KmlLatLonBox();
     $box->north = max($rotatedCorners["nw"]->lat, $rotatedCorners["ne"]->lat, $rotatedCorners["sw"]->lat, $rotatedCorners["se"]->lat);
     $box->south = min($rotatedCorners["nw"]->lat, $rotatedCorners["ne"]->lat, $rotatedCorners["sw"]->lat, $rotatedCorners["se"]->lat);
     $box->east = max($rotatedCorners["nw"]->lng, $rotatedCorners["ne"]->lng, $rotatedCorners["sw"]->lng, $rotatedCorners["se"]->lng);
     $box->west = min($rotatedCorners["nw"]->lng, $rotatedCorners["ne"]->lng, $rotatedCorners["sw"]->lng, $rotatedCorners["se"]->lng);
     $box->rotation = $mapRotation;
     // still in radians, will get converted to degrees later on
     return $box;
 }