Voici donc le schéma des tables SQL , les contenus (INSERT) se trouvent dans l'export en pièce jointe.

Liste des départements :

CREATE TABLE IF NOT EXISTS `departement` (
  `id_departement` int(11) NOT NULL auto_increment,
  `id_region` int(11) NOT NULL,
  `code` varchar(3) NOT NULL,
  `nom_departement` varchar(250) NOT NULL,
  PRIMARY KEY  (`id_departement`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=105 ;


Liste des villes :

CREATE TABLE IF NOT EXISTS `maps_ville` (
  `id_ville` int(11) NOT NULL auto_increment,
  `id_departement` int(11) NOT NULL,
  `nom` varchar(250) NOT NULL,
  `cp` varchar(6) NOT NULL,
  `lat` float(7,6) NOT NULL,
  `lon` float(7,6) NOT NULL,
  PRIMARY KEY  (`id_ville`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=34488 ;

Liste des régions:

CREATE TABLE IF NOT EXISTS `region` (
  `id_region` int(11) NOT NULL auto_increment,
  `nom_region` varchar(250) NOT NULL,
  PRIMARY KEY  (`id_region`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ;

Pour les regroupements, il suffit de faire de banales requêtes SQL

Voici le fichier en question :

Liste des villes de France

Edit :

Une version 3 est sortie , elle corige plusieurs oublis