]> Raphaël G. Git Repositories - packbundle/blobdiff - Util/MapUtil.php
Php 8.x constructor style
[packbundle] / Util / MapUtil.php
index f736a07165b3a29f0b0c18c5169d7aebce86c8c3..62e6b30dfd7bc4c9e72cfc55202b8113b7dcf256 100644 (file)
@@ -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');