Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1500 delphine 1
<?php
2
// Encodage : UTF-8
3
// +-------------------------------------------------------------------------------------------------------------------+
4
/**
5
 * Traitement des fichiers de la banque de données SOPHY pour insertion
6
 *
7
 * Description : classe permettant d'insérer les tableaux phytosociologiques de la banque de données SOPHY
8
 * Utilisation : php script.php code -a codeInseeCommune
9
 *
10
 * @category		PHP 5.3
11
 * @package		phytosocio
12
 //Auteur original :
13
 * @author		Delphine CAUQUIL <delphine@tela-botanica.org>
14
 * @copyright	Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
15
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
16
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
17
 * @version		$Id$
18
 */
19
// +-------------------------------------------------------------------------------------------------------------------+
20
class Codeinseecommune extends Script {
21
 
22
	protected $tableauTaxon;
23
	protected $dao;
24
	protected $observations;
25
	// Paramêtres autorisées lors de l'appel au script en ligne de commande
26
	protected $parametres_autorises = array(
27
		'-n' => array(true, true, 'Nom du fichier ou du dossier à traiter'));
28
 
29
 
30
 
31
// +-------------------------------------------------------------------------------------------------------------------+
32
	public function executer() {
33
		include_once dirname(__FILE__).'/bibliotheque/Dao.php';
34
 
35
 
36
		$this->dao = new Dao();
37
		// Récupération de paramétres
38
		// Lancement de l'action demandée
39
		$cmd = $this->getParametre('a');
40
		switch ($cmd) {
41
			case 'tout' :
42
				$this->creerColonne();
43
				$this->calculerCodeInsee();
44
				$this->modifierCodeInsee();
45
				break;
46
			case 'colonne' :
47
				$this->creerColonne();
48
				break;
49
			case 'calculer' :
50
				$this->calculerCodeInsee();
51
				break;
52
			case 'modifier' :
53
				$this->modifierCodeInsee();
54
				break;
55
			default :
56
				$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
57
		}
58
	}
59
 
60
// +-------------------------------------------------------------------------------------------------------------------+
61
 
62
	private function creerColonne() {
63
		$this->dao->creerColonneCodeInseeCalculee();
64
	}
65
 
1515 delphine 66
	private function calculerCodeInsee() {
1500 delphine 67
		$liste_coordonnees = $this->dao->rechercherCoordonnees();
68
		foreach ($liste_coordonnees as $coordonnees) {
69
			if ($this->testerCoordonneesWgsFrance($coordonnees['latitude'], $coordonnees['longitude'])) {
70
				$code_insee = $this->chercherCodeCommune('osm', $coordonnees['latitude'], $coordonnees['longitude']);
71
				if ($code_insee != "") {
72
					$this->dao->ajouterCodeInseeCalculee($coordonnees['latitude'], $coordonnees['longitude'], $code_insee);
73
				} else {
74
					$code_insee = $this->chercherCodeCommune('lion1906', $coordonnees['latitude'], $coordonnees['longitude']);
75
					if ($code_insee != "") {
76
						$this->dao->ajouterCodeInseeCalculee($coordonnees['latitude'], $coordonnees['longitude'], $code_insee);
77
					}
78
				}
79
			}
80
		}
81
	}
82
 
83
	private function modifierCodeInsee() {
84
		$this->dao->modifierCodeInsee();
85
	}
86
 
87
	private function chercherCodeCommune($projet, $latitude, $longitude) {
88
		$code_insee = '';
89
		$url_service = "www.tela-botanica.org/service:eflore:0.1/{$projet}/nom-commune".
90
					"?lat={$latitude}&lon={$longitude}";
91
		$url_service = str_replace(',', '.', $url_service);
92
		$ch = curl_init($url_service);
93
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
94
		$reponse = curl_exec($ch);
95
		$reponse = json_decode($reponse);
96
		if (isset($reponse->codeINSEE)) {
97
			$code_insee = $reponse->codeINSEE;
98
		}
99
		curl_close($ch);
100
		return $code_insee;
101
	}
102
 
103
	private function testerCoordonneesWgsFrance($latitude, $longitude) {
104
		$coord_france = false;
105
		if ($latitude != '' && $longitude != '') {
106
			if ($latitude < 51.071667 && $latitude > 41.316667) {
107
				if ($longitude < 9.513333 && $longitude > -5.140278) {
108
					$coord_france = true;
109
				}
110
			}
111
		}
112
		return $coord_france;
113
	}
114
	private function analyserCodeDeptComm($ligneDecoupe) {
115
		if (preg_match('/^\d{2}$/', $ligneDecoupe['codeDept'])) {
116
		} elseif (preg_match('/^\s{0,1}\d{1,2}\s{0,1}$/',$ligneDecoupe['codeDept'])) {
117
			$ligneDecoupe['codeDept'] = str_replace(' ', '0', $ligneDecoupe['codeDept']);
118
		} else {
119
			$ligneDecoupe['codeDept'] = null;
120
		}
121
		if (preg_match('/^\d{3}$/', $ligneDecoupe['codeCommune'])) {
122
		} elseif (preg_match('/^\s{0,2}\d{1,2,3}\s{0,2}$/', $ligneDecoupe['codeCommune'])) {
123
			$ligneDecoupe['codeCommune'] = str_replace(' ', '0', $ligneDecoupe['codeCommune']);
124
		} elseif ($ligneDecoupe['codeDept'] == null) {
125
			$ligneDecoupe['codeCommune'] = null;
126
		} else {
127
			$ligneDecoupe['codeCommune'] = '000';
128
		}
129
		return $ligneDecoupe;
130
	}
131
	private function analyserCoordGrdParis($ligneDecoupe, $ligne) {
132
		if (preg_match('/[\s0]0\.000/', $ligneDecoupe['latitude'], $match)) {
133
			$ligneDecoupe['latitude'] = null;
134
			$ligneDecoupe['longitude'] = null;
135
		} elseif (preg_match('/\d{1,2}\.\d{2,3}/', $ligneDecoupe['latitude'], $match)) {// format souhaité
136
			$ligneDecoupe['latitude_wgs'] = round($ligneDecoupe['latitude']*0.9, 7);
137
			$ligneDecoupe['longitude_wgs'] = round($ligneDecoupe['longitude']*0.9+2.3372291, 7);
138
		} elseif (preg_match('/(\d{2})[\d\s,](\d{3})/', $ligneDecoupe['latitude'], $match)) {//erreur de saisie
139
			$ligneDecoupe['latitude'] = $match[1].'.'.$match[2];
140
			$ligneDecoupe['latitude_wgs'] = round($ligneDecoupe['latitude']*0.9, 7);
141
			$ligneDecoupe['longitude_wgs'] = round($ligneDecoupe['longitude']*0.9 + 2.3372291, 7);
142
		} elseif (preg_match('/^[a-zA-Z\s]*[a-zA-Z][a-zA-Z\s]*$/', $ligneDecoupe['latitude'])) {// lat absente + nom long
143
			$ligneDecoupe['nomStation'] = rtrim(substr($ligne, 10, 48));
144
			$ligneDecoupe['latitude'] = null;
145
			$ligneDecoupe['longitude'] = null;
146
		} elseif (preg_match('/.[AO].123/', $ligneDecoupe['latitude'], $match)) {
147
			$ligneDecoupe['latitude'] = null;
148
			$ligneDecoupe['longitude'] = null;
149
		}  elseif ($ligneDecoupe['latitude'] != null) {
150
			$ligneDecoupe['latitude'] = null;
151
			$ligneDecoupe['longitude'] = null;
152
		}
153
		return $ligneDecoupe;
154
	}
155
 
156
	/*SELECT distinct `ce_zone_geo`,`zone_geo`,`ce_zone_geo_calculee` FROM `cel_obs`
157
	 WHERE `ce_zone_geo_calculee`!= "" and `ce_zone_geo`!= "" and
158
	 `ce_zone_geo` != concat("INSEE-C:",`ce_zone_geo_calculee`)
159
*/
160
 
161
 
162
}
163
?>