Bonjour à tous
J'ai un petit problème récurant...
Je questionne une base de donnée pour collecter les positions de station pour plusieurs terrain.
Le but est de connaitre le points GPS central des stations par terrain, pour que ma map soit centralisée au milieu de toutes les stations.
J'ai donc, pour résultat, un array comme celui-ci
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 Array ( [0] => Array ( [0] => Array ( [0] => 46.173393 [1] => 6.004297 ) [1] => Array ( [0] => 46.185722 [1] => 5.997623 ) [2] => Array ( [0] => 46.172840 [1] => 6.002612 ) ) [1] => Array ( [0] => Array ( [0] => 46.173393 [1] => 6.004297 ) [1] => Array ( [0] => 46.172840 [1] => 6.002612 ) ) [2] => Array ( [0] => Array ( [0] => 46.185722 [1] => 5.997623 ) ) )
L'index 0: Représente la position de toutes les stations de tous les terrains
L'index 1: repreésente la position des stations du terrain 1
L'index 2: représente la position des stations du terrain 2
Au passsage, si je désactive la station 1, j'aurai le meme array mais sans l'index 1. Ca causera un problème au niveau PHP et javascript?
Revenons. Puis pour connaitre le point central des stations, je passe cet array dans un fonction GetCenterFromDegrees()
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 <?php function GetCenterFromDegrees($data){ if (!is_array($data)) { echo "Error: Is not a array in GetCenterFromDegrees($data)"; return FALSE; } $num_coords = count($data); $X = 0.0; $Y = 0.0; $Z = 0.0; foreach ($data as $coord){ $lat = deg2rad((float)$coord[0]); $lon = deg2rad((float)$coord[1]); $a = cos($lat) * cos($lon); $b = cos($lat) * sin($lon); $c = sin($lat); $X += $a; $Y += $b; $Z += $c; } $X /= $num_coords; $Y /= $num_coords; $Z /= $num_coords; $lon = atan2($Y, $X); $hyp = sqrt($X * $X + $Y * $Y); $lat = atan2($Z, $hyp); return array(rad2deg($lat), rad2deg($lon)); } ?>
Quand le script est exécuté, les valeurs désirées sont retournées sous le format JSON pour que mon code javascript (AJAX) puisse affichée les positions sur ma map (openstreetmap).
Je suis en train de désactiver des stations car la saison de mesures est terminée et je constate un bug que je viens de comprendre sans savoir pourquoi il se produit.
Par exemple, quand j'ai que deux stations actives, j'ai une erreur, quand j'en ai trois, j'ai pas d'erreur. Je suis donc aller plus lion et j'ai constaté que quand j'ai deux stations actives mon json à ce format (regarder sous map_center)
Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part {"properties":[{"id_station":21,"id_field":2,"field":"hutins","station":"Station m\u00e9t\u00e9o","type":3,"archive":0,"la":46.185722,"lo":5.997623,"da":"2021-07-02 09:26:51","al":581,"b1":null,"b2":null,"b3":null,"b4":null,"se":null,"su":531,"an":0,"sb":null,"sl":null,"te":19,"hu":69,"pr":97},{"id_station":22,"id_field":1,"field":"printaniere","station":"Station m\u00e9t\u00e9o","type":3,"archive":0,"la":46.17284,"lo":6.002612,"da":"2021-07-02 09:18:01","al":400,"b1":null,"b2":null,"b3":null,"b4":null,"se":null,"su":409,"an":0,"sb":null,"sl":null,"te":22,"hu":71,"pr":97}],"map_center":{"0":[46.1792810271279,6.000117792211173],"2":[46.185722,5.997623],"1":[46.172839999999994,6.002612000000001]}}
et quand j'ai trois stations active j'ai ce format
Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
1
2{"properties":[{"id_station":6,"id_field":1,"field":"printaniere","station":"ST Bourgeon 6","type":1,"archive":0,"la":46.173393,"lo":6.004297,"da":"2021-07-02 09:44:20","al":460,"b1":24.2,"b2":null,"b3":null,"b4":25.8,"se":null,"su":null,"an":null,"sb":null,"sl":null,"te":null,"hu":null,"pr":null},{"id_station":21,"id_field":2,"field":"hutins","station":"Station m\u00e9t\u00e9o","type":3,"archive":0,"la":46.185722,"lo":5.997623,"da":"2021-07-02 09:39:41","al":581,"b1":null,"b2":null,"b3":null,"b4":null,"se":null,"su":563,"an":6.4,"sb":null,"sl":null,"te":21,"hu":61,"pr":97},{"id_station":22,"id_field":1,"field":"printaniere","station":"Station m\u00e9t\u00e9o","type":3,"archive":0,"la":46.17284,"lo":6.002612,"da":"2021-07-02 09:43:45","al":400,"b1":null,"b2":null,"b3":null,"b4":null,"se":null,"su":467,"an":0,"sb":null,"sl":null,"te":21,"hu":74,"pr":97}],"map_center":[[46.1773183683321,6.001510960923161],[46.173116503094505,6.003454495764238],[46.185722,5.997623]]}
On voit bien que dans le premier cas, j'ai ceci, ce qui est faut
Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part "map_center":{"0":[46.1792810271279,6.000117792211173],"2":[46.185722,5.997623],"1":[46.172839999999994,6.002612000000001]}
et dans le deuxième, car j'ai la format qui fonctionne
Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part "map_center":[[46.1773183683321,6.001510960923161],[46.173116503094505,6.003454495764238],[46.185722,5.997623]]
Pourquoi?
La chaine retorunée, soit map_center, doit toujours est un array, et donc jamais un objet.
Pour mieux m'aider à comprendre, je vous donne des extrait de codes.
Je sauve mes positions dans une variable 'positions' (C'est l'array que je donne, tout en-haut).
Puis je le passe dans un foreach, et a chaque boucle, il appelle le fonction GetCenterFromDegrees, qui va calculer le centre
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 foreach($positions as $key => $val){ $geojson['map_center'][$key]= GetCenterFromDegrees($positions[$key]); }
ce qui va ajouter à mon array geojson, l'index 'map_center'.
Puis, j'ai une dernière fonction qui va me retoruner tout ceci à mon script javascript au format json
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part echo json_encode($geojson, JSON_NUMERIC_CHECK);
Je ne comprends pas pourquoi
- A quel moment ce biz se produit (serait-ce dans le foreach?)
- map_center est dans un cas un objet, et dans l'autre une array
Pourriez-vous me guider, en espérant avoir fourni assez d'information
Milles mercis
edit:
L'array pour deux stations actives ressemble à ceci
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 [0] => Array ( [0] => Array ( [0] => 46.185722 [1] => 5.997623 ) [1] => Array ( [0] => 46.172840 [1] => 6.002612 ) ) [2] => Array ( [0] => Array ( [0] => 46.185722 [1] => 5.997623 ) ) [1] => Array ( [0] => Array ( [0] => 46.172840 [1] => 6.002612 ) ) )
Je constate que l'ordre n'est pas le même (0,2,1), serait-ce la cause?







Répondre avec citation
Partager