[SQL] Régions-départements-villes de France
Résolu/Fermé
A voir également:
- Liste de toutes les villes de france excel
- Liste déroulante excel - Guide
- Formule excel - Guide
- Excel liste déroulante en cascade - Guide
- Liste de diffusion whatsapp - Guide
- Si et excel - Guide
19 réponses
Le champ filtre sert à comparer plus rapidement les données à l'inscription (cp + ville) avec celles de la base de données (insensible à la casse et aux accents, etc. - "SELECT filtre, cp FROM ville" plutôt que "SELECT ville, cp FROM ville").
Après, je n'ai pas vu l'utilité du code INSEE mais ça peut se rajouter assez facilement.
Et pour ce qui est de la distance, son calcul se fait assez facilement aussi juste avec les coordonnées latitude-longitude. Mais je veux bien que tu m'expliques comment tu fais aussi avec les coordonnées Lambert 2 étendu ^^
Après, je n'ai pas vu l'utilité du code INSEE mais ça peut se rajouter assez facilement.
Et pour ce qui est de la distance, son calcul se fait assez facilement aussi juste avec les coordonnées latitude-longitude. Mais je veux bien que tu m'expliques comment tu fais aussi avec les coordonnées Lambert 2 étendu ^^
imw
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
19 juil. 2009 à 16:09
19 juil. 2009 à 16:09
Pour ce qui est de l'insée, je m'en sers pour localiser les clients !
Le soucis étant qu'en leur demandant un code postal, je peux avoir plusieurs réponse, je leur donne donc le choix de la ville et ensuite, je me sers de l'insée pour tout le reste des procédures. Je pourrai aussi utiliser l'id de ma table, mais ce n'est pas très explicite (dans les urls, dans les mails ...) ... m'enfin chacun ses gouts.
Pour ce qui est des Lambert 2 étendus ils donnent une valeur en mètres X et Y sur toute la France par rapport à un point d'origine.
En gros, tu place la carte un repère orthonormé sur la carte de France, et tu as les valeur X,Y des toutes les villes :
http://seig.ensg.eu/IMAGES/FP28/FP28_2.gif
Donc un simple sqtr((x1-x2)²+(y1-y2)²) te donne la distance entre 2 points (en mètre).
C'est aussi super pratique pour positionner les villes sur une carte (suffit de définir les coordonnées de la carte par rapport aux coordonnées globales et hop...)
J'ai récupérer l'intégralité de ces données ...
J'ai aussi dans ma table les altitudes min et max des communes, la superficie, et il faut que j'y rajoute la population (j'ai déjà les données, faut juste que je les croisent avec la table).
La population peut être intéressante pour sortir les plus grandes villes par exemple.
Le soucis étant qu'en leur demandant un code postal, je peux avoir plusieurs réponse, je leur donne donc le choix de la ville et ensuite, je me sers de l'insée pour tout le reste des procédures. Je pourrai aussi utiliser l'id de ma table, mais ce n'est pas très explicite (dans les urls, dans les mails ...) ... m'enfin chacun ses gouts.
Pour ce qui est des Lambert 2 étendus ils donnent une valeur en mètres X et Y sur toute la France par rapport à un point d'origine.
En gros, tu place la carte un repère orthonormé sur la carte de France, et tu as les valeur X,Y des toutes les villes :
http://seig.ensg.eu/IMAGES/FP28/FP28_2.gif
Donc un simple sqtr((x1-x2)²+(y1-y2)²) te donne la distance entre 2 points (en mètre).
C'est aussi super pratique pour positionner les villes sur une carte (suffit de définir les coordonnées de la carte par rapport aux coordonnées globales et hop...)
J'ai récupérer l'intégralité de ces données ...
J'ai aussi dans ma table les altitudes min et max des communes, la superficie, et il faut que j'y rajoute la population (j'ai déjà les données, faut juste que je les croisent avec la table).
La population peut être intéressante pour sortir les plus grandes villes par exemple.
Salut merci pour cette superbe base, mais je pense que tu as un problème avec les département dans ta table "ville" à partir de la ligne 7047 à la ville Aghione. Les départements ne correspondent plus avec les codes postaux.
Ville CP Numéro de département
Aghione 20270 21
Autre petite coquille la dernière ville Wy-dit-Joly-Village s'écrit avec un i dans joli.
Voilà c'est juste pour éviter que d'autre ne se fasse avoir.
Ville CP Numéro de département
Aghione 20270 21
Autre petite coquille la dernière ville Wy-dit-Joly-Village s'écrit avec un i dans joli.
Voilà c'est juste pour éviter que d'autre ne se fasse avoir.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Juste pour info, la base à été mise à jour avec les modifications dont Docteur Doc parlait.
Enjoy,
sp00m`
Enjoy,
sp00m`
Bon juste pour info il y a un web service mondial (plus ou moins à jours mais plutôt plus) qui permet d'avoir en permanence des données à jours...
une requête HTTP avec paramètre = une réponse XML du site...
Je m'en sers pour presque tout dès qu'il s'git de géographie et d'adresse postale
Just enjoy by clicking there www.geonames.org
une requête HTTP avec paramètre = une réponse XML du site...
Je m'en sers pour presque tout dès qu'il s'git de géographie et d'adresse postale
Just enjoy by clicking there www.geonames.org
Crisu
Messages postés
83
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 mars 2011
40
17 déc. 2009 à 22:25
17 déc. 2009 à 22:25
Slt Spoom,
Arf ... ton script m'interesse mais ton lien est "down" :( ...
Te serai t il possible de le mettre sur un serveur ou une Url qui fonctionne ?
Merci en tt cas :)
Arf ... ton script m'interesse mais ton lien est "down" :( ...
Te serai t il possible de le mettre sur un serveur ou une Url qui fonctionne ?
Merci en tt cas :)
Salut a tous
Moi aussi ton script m'intéresse il a l'air vraiment bien foutu..
Quelqu'un l'a gardé et pourrait le remettre a disposition ce serait sympa.
Merci
Moi aussi ton script m'intéresse il a l'air vraiment bien foutu..
Quelqu'un l'a gardé et pourrait le remettre a disposition ce serait sympa.
Merci
Crisu
Messages postés
83
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 mars 2011
40
14 janv. 2010 à 10:00
14 janv. 2010 à 10:00
Slt Squeezy,
comme toi ca m'intéresse mais pas de réponse à mon précédent Post.
Du coups après avoir cherché un peu je suis tombé sur ca :
https://www.paperblog.fr/1371087/liste-des-villes-de-france-avec-coordonees-gps-et-les-departements-et-carte-dynamique-en-flash-v3/
Je crois que tout y est ;)
C you :]~
comme toi ca m'intéresse mais pas de réponse à mon précédent Post.
Du coups après avoir cherché un peu je suis tombé sur ca :
https://www.paperblog.fr/1371087/liste-des-villes-de-france-avec-coordonees-gps-et-les-departements-et-carte-dynamique-en-flash-v3/
Je crois que tout y est ;)
C you :]~
Crisu
Messages postés
83
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 mars 2011
40
>
sp00m`
15 janv. 2010 à 08:41
15 janv. 2010 à 08:41
Slt sp00m,
l'ayant utilisé il y a peu je confirme que les villes sont correctement liées et donc orienté Web.
Il me semble qu'il existe plusieurs version de ce script, et que le lien envoyé est la version 3, peut être celles d'avant étaient différentes ...
Have a nice day ^^
l'ayant utilisé il y a peu je confirme que les villes sont correctement liées et donc orienté Web.
Il me semble qu'il existe plusieurs version de ce script, et que le lien envoyé est la version 3, peut être celles d'avant étaient différentes ...
Have a nice day ^^
Salut,
Je suis désolé, mon site est down, l'hébergeur gratuit chez lequel j'étais n'a pas supporté les intempéries... ^^
Je le mettrais temporairement en ligne sur un autre site, je vous donne l'URL demain.
sp00m`
Je suis désolé, mon site est down, l'hébergeur gratuit chez lequel j'étais n'a pas supporté les intempéries... ^^
Je le mettrais temporairement en ligne sur un autre site, je vous donne l'URL demain.
sp00m`
Etrangement, mon hébergeur a repris vie ^^ Le script est donc à nouveau disponible sur :
www.christophemaillard.cmoi.cc (accueil -> actualité au 18/07/2009)
Enjoy,
sp00m`
www.christophemaillard.cmoi.cc (accueil -> actualité au 18/07/2009)
Enjoy,
sp00m`
Juste pour info, le script est de nouveau disponible à cette adresse :
http://isabellemaillard.iceheberg.fr/upload/france.sql
http://isabellemaillard.iceheberg.fr/upload/france.sql
Bonjour sp00m,
Pouvez expliquer clairement ou vous avez eu cette base ainsi que le script servant à calculer les positions ?
En êtes vous l'auteur ?
Pouvez expliquer clairement ou vous avez eu cette base ainsi que le script servant à calculer les positions ?
En êtes vous l'auteur ?
L'INSEE met à dispo une base qui recense toutes les villes de France, avec leur CP, code INSEE, lat, long, et autres données je crois. Je n'ai gardé que le nom des villes, le CP, et les coordonnées lat-long. En suite, j'ai créé le champ filtre (utile pour vérifier un formulaire par exemple). Et enfin, j'ai créé les tables region et departement, en prenant soin de bien lier les indices (id region, id departement, id ville).
Donc non, je n'en suis pas l'auteur, je me suis inspiré de ce que proposait l'INSEE et l'ai "arrangé" selon mon utilité.
Voici un script permettant de calculer la distance à vol d'oiseau entre 2 villes (non-optimisé, mais fonctionnel) :
L'appel se fait ainsi :
Imaginons que nous voulions la distance entre Lyon (id dans la table : 27534) et Dunkerque (id dans la table : 22379) :
Donc non, je n'en suis pas l'auteur, je me suis inspiré de ce que proposait l'INSEE et l'ai "arrangé" selon mon utilité.
Voici un script permettant de calculer la distance à vol d'oiseau entre 2 villes (non-optimisé, mais fonctionnel) :
class Misc { public static function getDistance($_idVille1, $_idVille2) { $result = mysql_query("SELECT lat, lon FROM ville WHERE id = $_idVille1 OR id = $_idVille2"); $i = 0; while($data = mysql_fetch_array($result)) { if($i == 0) { $rlo1 = deg2rad($data['lon']); $rla1 = deg2rad($data['lat']); } elseif($i == 1) { $rlo2 = deg2rad($data['lon']); $rla2 = deg2rad($data['lat']); } $i++; } $earthRadius = 6367000; $dlo = ($rlo2 - $rlo1) / 2; $dla = ($rla2 - $rla1) / 2; $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo)); $d = 2 * atan2(sqrt($a), sqrt(1 - $a)); $distance = $earthRadius * $d; return ceil($distance / 1000); } }
L'appel se fait ainsi :
Imaginons que nous voulions la distance entre Lyon (id dans la table : 27534) et Dunkerque (id dans la table : 22379) :
$distance = Misc::getDistance(27534, 22379);
Merci beaucoup, sp00m'
je teste de suite, ça semble correspondre à ce que je cherchais.
Quand on voit que certains sites proposent la même chose en payant, on ne peut que te féliciter!
je teste de suite, ça semble correspondre à ce que je cherchais.
Quand on voit que certains sites proposent la même chose en payant, on ne peut que te féliciter!
Attention quand même...Après quelques tests, je renonce à l'utiliser en production: En effet, il manque des communes (essayez par exemple de trouver saint Julien, 83560, pourtant ça existe, j'y habite ;))
Et les arrondissements des grandes villes sont fantaisistes
Merci quand même pour le boulot sp00m', mais c'est pas encore au top
Et les arrondissements des grandes villes sont fantaisistes
Merci quand même pour le boulot sp00m', mais c'est pas encore au top
kitsuo
Messages postés
24
Date d'inscription
dimanche 8 janvier 2012
Statut
Membre
Dernière intervention
13 mars 2017
Modifié par kitsuo le 5/05/2014 à 11:25
Modifié par kitsuo le 5/05/2014 à 11:25
Bonjour !
Quelqu'un aurait le fichier dont il est question dans le premier post svp ? Le site donné ne fonctionne plus et j'aurais grande utilité de ce fichier :D !
Merci par avance !
--
Quelqu'un aurait le fichier dont il est question dans le premier post svp ? Le site donné ne fonctionne plus et j'aurais grande utilité de ce fichier :D !
Merci par avance !
--
imw
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
19 juil. 2009 à 09:49
19 juil. 2009 à 09:49
intéressant ... je me suis déjà fait à peu près la même chose ....
a quoi te sers le champ filtre ?
il serait intéressant de rajouter le code insée des villes et pourquoi pas les coordonnées en Lambert 2 étendu qui permet de calculer très facilement la distance entre 2 villes ...
a quoi te sers le champ filtre ?
il serait intéressant de rajouter le code insée des villes et pourquoi pas les coordonnées en Lambert 2 étendu qui permet de calculer très facilement la distance entre 2 villes ...
Une petite fonction codé à l'arrache pour corrigé le problème.
Remplacer bdd_ville par le nom de votre table.
function correcBDD() { $sql = "SELECT id, cp FROM bdd_ville"; $res = queryDB($sql); while($data = mysql_fetch_assoc($res)) { $newDep = substr($data['cp'], 0,2); $sql2 = "UPDATE bdd_ville SET id_departement='$newDep' WHERE id='$data[id]'"; $res2 = queryDB($sql2); } echo 'terminer'; } correcBDD();
Remplacer bdd_ville par le nom de votre table.
Ben en fait, c'est la Corse qui m'a posé pas mal de problème (comme toujours ^^) parce qu'elle est divisée en 2 départements : 2A et 2B sauf que les codes postaux commencent tous par 20***. Si on exécute ton script, je ne pense pas que ça résolve le problème... Si tu l'as fait est que ça fonctionne quand même, dis moi !
Pour info, voilà un objet qui calcule la distance à vole d'oiseau entre 2 villes en donnant les ids des villes :
Appel principal :
Pour info, voilà un objet qui calcule la distance à vole d'oiseau entre 2 villes en donnant les ids des villes :
class Misc { public static function getDistance($_idVille1, $_idVille2) { $result = mysql_query("SELECT lat, lon FROM ville WHERE id = $_idVille1 OR id = $_idVille2"); $i = 0; while($data = mysql_fetch_array($result)) { if($i == 0) { $rlo1 = deg2rad($data['lon']); $rla1 = deg2rad($data['lat']); } elseif($i == 1) { $rlo2 = deg2rad($data['lon']); $rla2 = deg2rad($data['lat']); } $i++; } $earthRadius = 6367000; $dlo = ($rlo2 - $rlo1) / 2; $dla = ($rla2 - $rla1) / 2; $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo)); $d = 2 * atan2(sqrt($a), sqrt(1 - $a)); $distance = $earthRadius * $d; return ceil($distance / 1000); } }
Appel principal :
$distance = Misc::getDistance($idVille1, $idVille2);
Petit correction, je me souviens de la manière dont j'avais traité le problème.
Dans la table departement, il faut différencier id et numero :
Puisque la corse est divisée en 2 départements (2A et 2B) mais que les codes postaux commencent tous par 20***, on a donc le département 2A qui a pour id 20 et le département 2B qui a pour id 21. C'est pour cela qu'on peut croire qu'il y a un décalage (par exemple: la Vienne a pour numéro 86 mais pour id 87).
Pour les requêtes, il faut faire comme cela :
Le résultat donnera bien Haute Corse, la relation est donc bien vérifiée.
Désolé pour la précision un peu tardive ^^
Dans la table departement, il faut différencier id et numero :
Puisque la corse est divisée en 2 départements (2A et 2B) mais que les codes postaux commencent tous par 20***, on a donc le département 2A qui a pour id 20 et le département 2B qui a pour id 21. C'est pour cela qu'on peut croire qu'il y a un décalage (par exemple: la Vienne a pour numéro 86 mais pour id 87).
Pour les requêtes, il faut faire comme cela :
SELECT departement FROM departement WHERE id = (SELECT id_departement FROM ville WHERE filtre LIKE 'aghione')
Le résultat donnera bien Haute Corse, la relation est donc bien vérifiée.
Désolé pour la précision un peu tardive ^^
Juste une petite précision : le département d'une ville ne correspond pas à tous les coups aux deux premiers chiffres du code postal, donc ta fonction de correction est erronée.
Source : https://fr.wikipedia.org/wiki/Code_postal_en_France#Les_deux_premiers_chiffres
Les deux premiers chiffres du code correspondent au numéro du département dans lequel est situé le bureau distributeur du courrier de la commune : il existe quelques cas rares de communes dont le courrier est distribué par un bureau qui ne se trouve pas dans le même département (cas de villages limitrophes). Par exemple Laveyrune a pour code postal 48250 (48 étant le code de la Lozère), alors qu'elle est située dans l'Ardèche (07).
Tu pourras le vérifier en téléchargeant le fichier contenant la liste simplifiée des communes (intitulé comsimp2009) sur le site de l'INSEE et en le croisant avec ta table des codes postaux.
Cordialement,
Docteur Doc.
Source : https://fr.wikipedia.org/wiki/Code_postal_en_France#Les_deux_premiers_chiffres
Les deux premiers chiffres du code correspondent au numéro du département dans lequel est situé le bureau distributeur du courrier de la commune : il existe quelques cas rares de communes dont le courrier est distribué par un bureau qui ne se trouve pas dans le même département (cas de villages limitrophes). Par exemple Laveyrune a pour code postal 48250 (48 étant le code de la Lozère), alors qu'elle est située dans l'Ardèche (07).
Tu pourras le vérifier en téléchargeant le fichier contenant la liste simplifiée des communes (intitulé comsimp2009) sur le site de l'INSEE et en le croisant avec ta table des codes postaux.
Cordialement,
Docteur Doc.
De rien sp00m`, je traite des données géographiques depuis un petit bout de temps pour un usage professionnel.
Sur le plan personnel, je me suis lancé dans la géolocalisation et le croisement des données de l'INSEE, à titre expérimentale. J'ai une base MySQL qui commence à être bien solide (extensible à la plupart des organisations des autres pays) et associée à une classe PHP qui permet de la manipuler. Je penserai à la partager dès qu'elle sera un peu plus aboutie et en faire part sur ce topic.
En attendant, bonne continuation.
Docteur Doc
Sur le plan personnel, je me suis lancé dans la géolocalisation et le croisement des données de l'INSEE, à titre expérimentale. J'ai une base MySQL qui commence à être bien solide (extensible à la plupart des organisations des autres pays) et associée à une classe PHP qui permet de la manipuler. Je penserai à la partager dès qu'elle sera un peu plus aboutie et en faire part sur ce topic.
En attendant, bonne continuation.
Docteur Doc