Településlista betöltése MySQL adatbázisba

Az egyik projektemben szükség van a magyar települések listájára, lehetőleg koordinátákkal a későbbi távolság számítás és térképen ábrázolások miatt. Nagyon sok szolgáltató kínál ilyen adatbázisokat vagy webes API-kat horror árakon. Találtam egyet, ahonnan letölthető ez a lista txt-ben: http://download.geonames.org/export/zip/ . A fájl UTF-8 formátumú, tabbal elválasztott szöveges fájl, ahol a sorvége jel a \n.

telepuleslista


A mezők leírása az oldal alján található:

country code      : iso country code, 2 characters
postal code       : varchar(20)
place name        : varchar(180)
admin name1       : 1. order subdivision (state) varchar(100)
admin code1       : 1. order subdivision (state) varchar(20)
admin name2       : 2. order subdivision (county/province) varchar(100)
admin code2       : 2. order subdivision (county/province) varchar(20)
admin name3       : 3. order subdivision (community) varchar(100)
admin code3       : 3. order subdivision (community) varchar(20)
latitude          : estimated latitude (wgs84)
longitude         : estimated longitude (wgs84)
accuracy          : accuracy of lat/lng from 1=estimated to 6=centroid

A MySQL-ben létre kell hozni a megfelelő oszlopokat az importáláshoz, majd a következő paranccsal tudjuk gyorsan importálni a választott táblába (jelen példában “geolocations”):

LOAD DATA LOCAL INFILE '/var/www/projekt/HU.txt' INTO TABLE geolocations LINES TERMINATED BY '\n';

Segítségképpen a lustáknak a tábla SQL létrehozás kódja:

CREATE TABLE `geolocations` (
  `country_code` VARCHAR(2) NULL DEFAULT NULL COMMENT 'iso country code, 2 characters' COLLATE 'utf8_hungarian_ci',
  `postal_code` SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
  `place_name` VARCHAR(180) NULL DEFAULT NULL COLLATE 'utf8_hungarian_ci',
  `state_name` VARCHAR(100) NULL DEFAULT NULL COMMENT '1. order subdivision (state)' COLLATE 'utf8_hungarian_ci',
  `state_code` VARCHAR(20) NULL DEFAULT NULL COMMENT '1. order subdivision (state)' COLLATE 'utf8_hungarian_ci',
  `province_code` VARCHAR(100) NULL DEFAULT NULL COMMENT '2. order subdivision (county/province)' COLLATE 'utf8_hungarian_ci',
  `province_name` VARCHAR(20) NULL DEFAULT NULL COMMENT '2. order subdivision (county/province)' COLLATE 'utf8_hungarian_ci',
  `community_name` VARCHAR(100) NULL DEFAULT NULL COMMENT '3. order subdivision (community)' COLLATE 'utf8_hungarian_ci',
  `community_code` VARCHAR(20) NULL DEFAULT NULL COMMENT '3. order subdivision (community)' COLLATE 'utf8_hungarian_ci',
  `latitude` DECIMAL(7,4) NULL DEFAULT NULL COMMENT 'estimated latitude (wgs84)',
  `longitude` DECIMAL(7,4) NULL DEFAULT NULL COMMENT 'estimated longitude (wgs84)',
  `accuracy` VARCHAR(200) NULL DEFAULT NULL COMMENT 'accuracy of lat/lng from 1=estimated to 6=centroid' COLLATE 'utf8_hungarian_ci'
)
COLLATE='utf8_hungarian_ci'
ENGINE=MyISAM
;