* id_gis du point de référence ou tableau de coordonnées
* @param int|array $to
@ -53,23 +55,12 @@ function dms_to_dec($ref,$deg,$min,$sec) {
* @return float
* Retourne la distance en kilomètre ou en miles
*/
function distance($from, $to, $miles=false) {
function distance($from, $to, $miles=false) {
// On ne travaille que si on a toutes les infos
if (
// Le départ est soit un tableau soit un entier
(
(is_array($from) and isset($from['lat']) and isset($from['lon']))
or
($from = intval($from) and $from > 0 and $from = sql_fetsel('lat,lon','spip_gis',"id_gis=$from"))
)
and
// Le distant est soit un tableau soit un entier
(
(is_array($to) and isset($to['lat']) and isset($to['lon']))
or
($to = intval($to) and $to > 0 and $to = sql_fetsel('lat,lon','spip_gis',"id_gis=$to"))
)
){
if (((is_array($from) and isset($from['lat']) and isset($from['lon'])) // Le départ est soit un tableau soit un entier
or ($from = intval($from) and $from > 0 and $from = sql_fetsel('lat,lon', 'spip_gis', "id_gis=$from")))
and ((is_array($to) and isset($to['lat']) and isset($to['lon'])) or ($to = intval($to) and $to > 0 and $to = sql_fetsel('lat,lon', 'spip_gis', "id_gis=$to"))) // Le distant est soit un tableau soit un entier
) {
$pi80 = M_PI / 180;
$from['lat'] *= $pi80;
$from['lon'] *= $pi80;
@ -85,13 +76,13 @@ function distance($from, $to, $miles=false) {
return ($miles ? ($km * 0.621371192) : $km);
}
return false;
}
/**
* Compilation du critère {distancefrom}
*
*
* Critère {distancefrom} qui permet de ne sélectionner que les objets se trouvant à une distance comparée avec un point de repère.
* On doit lui passer 3 paramètres obligatoires :
* - le point de repère qui est un tableau avec les clés "lat" et "lon" ou un id_gis
@ -110,13 +101,10 @@ function critere_distancefrom_dist($idb, &$boucles, $crit) {
$id_table = $boucle->id_table; // articles
$primary = $boucle->primary; // id_article
$objet = objet_type($id_table); // article
if (
// Soit depuis une boucle (GIS) soit un autre objet mais avec {gis}
($id_table == 'gis' or isset($boucle->join['gis']))
// Il faut aussi qu'il y ait 3 critères obligatoires
and count($crit->param) == 3
){
if (($id_table == 'gis' or isset($boucle->join['gis'])) // Soit depuis une boucle (GIS) soit un autre objet mais avec {gis}
and count($crit->param) == 3 // Il faut aussi qu'il y ait 3 critères obligatoires
if ($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")) {
if ($id_gis = sql_getfetsel('G.id_gis', 'spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis', 'T.id_objet=' . intval($id_document) . " AND T.objet='document'")) {
// Des coordonnées sont déjà définies pour ce document => on les update
revisions_gis($id_gis,$c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
revisions_gis($id_gis,$c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
} else {
// Aucune coordonnée n'est définie pour ce document => on les crées
$id_gis = insert_gis();
revisions_gis($id_gis,$c);
revisions_gis($id_gis,$c);
lier_gis($id_gis, 'document', $id_document);
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
if (is_numeric($latitude = $infos['latitude']) && is_numeric($longitude = $infos['longitude'])) {
@ -244,19 +254,19 @@ function gis_post_edition($flux){
'lon' => $longitude,
'zoom' => $config['zoom'] ? $config['zoom'] :'4'
);
include_spip('action/editer_gis');
if ($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")) {
if ($id_gis = sql_getfetsel('G.id_gis', 'spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis', 'T.id_objet=' . intval($id_document) . " AND T.objet='document'")) {
// Des coordonnées sont déjà définies pour ce document => on les update
revisions_gis($id_gis,$c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
revisions_gis($id_gis,$c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
} else {
// Aucune coordonnée n'est définie pour ce document => on les crées
$id_gis = insert_gis();
revisions_gis($id_gis,$c);
revisions_gis($id_gis,$c);
lier_gis($id_gis, 'document', $id_document);
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
}
}
unset($infos['longitude']);
@ -268,15 +278,15 @@ function gis_post_edition($flux){
}
}
}
if (is_array($flux) && isset($flux['args']['operation']) && ($flux['args']['operation'] == 'supprimer_document')
AND ($id_document = intval($flux['args']['id_objet'])
AND ($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")))
if (is_array($flux) && isset($flux['args']['operation']) && ($flux['args']['operation'] == 'supprimer_document')
and ($id_document = intval($flux['args']['id_objet'])
and ($id_gis = sql_getfetsel('G.id_gis', 'spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis', 'T.id_objet=' . intval($id_document) . " AND T.objet='document'")))
) {
include_spip('action/editer_gis');
supprimer_gis($id_gis);
spip_log("GIS EXIFS : Suppression des coordonnées pour le document $id_document => id_gis = $id_gis","gis");
spip_log("GIS EXIFS : Suppression des coordonnées pour le document $id_document => id_gis = $id_gis", 'gis');
}
return $flux;
}
@ -287,18 +297,18 @@ function gis_post_edition($flux){