X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/4b3b3f7b79348080ea7d78bcbf9921797a0caa34..55a896d78af2f339ce675640248c2a6a05f7cb7f:/Util/MapUtil.php diff --git a/Util/MapUtil.php b/Util/MapUtil.php index f736a07..62e6b30 100644 --- a/Util/MapUtil.php +++ b/Util/MapUtil.php @@ -246,15 +246,27 @@ class MapUtil { * * @param string $caption The caption * @param int $updated The updated timestamp - * @param float $latitude The latitude - * @param float $longitude The longitude * @param array $coordinates The coordinates array - * @param int $zoom The zoom * @param int $width The width * @param int $height The height * @return array The multi map data */ - public function getMultiMap(string $caption, int $updated, float $latitude, float $longitude, $coordinates = [], int $zoom = self::zoom, int $width = self::width, int $height = self::height): array { + public function getMultiMap(string $caption, int $updated, array $coordinates, int $width = self::width, int $height = self::height): array { + //Set latitudes + $latitudes = array_map(function ($v) { return $v['latitude']; }, $coordinates); + + //Set longitudes + $longitudes = array_map(function ($v) { return $v['longitude']; }, $coordinates); + + //Set latitude + $latitude = round((min($latitudes)+max($latitudes))/2, 6); + + //Set longitude + $longitude = round((min($longitudes)+max($longitudes))/2, 6); + + //Set zoom + $zoom = $this->getMultiZoom($latitude, $longitude, $coordinates, $width, $height); + //Set coordinate $coordinate = implode('-', array_map(function ($v) { return $v['latitude'].','.$v['longitude']; }, $coordinates)); @@ -288,12 +300,12 @@ class MapUtil { * @param float $latitude The latitude * @param float $longitude The longitude * @param array $coordinates The coordinates array - * @param int $zoom The zoom * @param int $width The width * @param int $height The height + * @param int $zoom The zoom * @return int The zoom */ - public function getMultiZoom(float $latitude, float $longitude, array $coordinates = [], int $zoom = self::zoom, int $width = self::width, int $height = self::height): int { + public function getMultiZoom(float $latitude, float $longitude, array $coordinates, int $width, int $height, int $zoom = self::zoom): int { //Iterate on each zoom for ($i = $zoom; $i >= 1; $i--) { //Get tile xy @@ -398,13 +410,14 @@ class MapUtil { */ public static function latitudeToSexagesimal(float $latitude): string { //Set degree - $degree = $latitude % 60; + //TODO: see if round or intval is better suited to fix the Deprecated: Implicit conversion from float to int loses precision + $degree = round($latitude) % 60; //Set minute - $minute = ($latitude - $degree) * 60 % 60; + $minute = round(($latitude - $degree) * 60) % 60; //Set second - $second = ($latitude - $degree - $minute / 60) * 3600 % 3600; + $second = round(($latitude - $degree - $minute / 60) * 3600) % 3600; //Return sexagesimal longitude return $degree.'°'.$minute.'\''.$second.'"'.($latitude >= 0 ? 'N' : 'S'); @@ -419,13 +432,14 @@ class MapUtil { */ public static function longitudeToSexagesimal(float $longitude): string { //Set degree - $degree = $longitude % 60; + //TODO: see if round or intval is better suited to fix the Deprecated: Implicit conversion from float to int loses precision + $degree = round($longitude) % 60; //Set minute - $minute = ($longitude - $degree) * 60 % 60; + $minute = round(($longitude - $degree) * 60) % 60; //Set second - $second = ($longitude - $degree - $minute / 60) * 3600 % 3600; + $second = round(($longitude - $degree - $minute / 60) * 3600) % 3600; //Return sexagesimal longitude return $degree.'°'.$minute.'\''.$second.'"'.($longitude >= 0 ? 'E' : 'W');