2011-03-13 57 views

回答

20

我發現通過查找包含在你的一節鏈接到zip文件的自述文件下面的「主要‘GeoName’表具有以下字段:」

首先在創建數據庫和表你的MySQL實例。字段的類型在我剛引用上述標題的部分的每一行中給出。

CREATE DATABASE DO_test; 
CREATE TABLE `DO_test`.`DO_table` (
    `geonameid` INT, 
    `name` varchar(200), 
    `asciiname` varchar(200), 
    `alternatenames` varchar(5000), 
    `latitude` DECIMAL(10,7), 
    `longitude` DECIMAL(10,7), 
    `feature class` char(1), 
    `feature code` varchar(10), 
    `country code` char(2), 
    `cc2` char(60), 
    `admin1 code` varchar(20), 
    `admin2 code` varchar(80), 
    `admin3 code` varchar(20), 
    `admin4 code` varchar(20), 
    `population` bigint, 
    `elevation` INT, 
    `gtopo30` INT, 
    `timezone` varchar(100), 
    `modification date` date 
) 
CHARACTER SET utf8; 

創建表後,您可以從文件導入數據。該字段由製表符,行分隔符爲換行符:

LOAD DATA INFILE '/path/to/your/file/DO.txt' INTO TABLE `DO_test`.`DO_table`; 
+0

糟糕,你需要做一些與經緯度不同的事情。我正在解決這個問題。我認爲他們應該是「POINT」而不是DECIMAL。 – wilbbe01 2011-03-13 02:58:07

+0

出於某種原因,我得到: 錯誤代碼:29 未找到文件'/home/blueprint/DO.txt'(Errcode:13) 我很確定文件在那裏。 – 2011-03-13 02:59:28

+0

@LuisDUrraca:你在MAC嗎?錯誤代碼13意味着MySQL無法看到該文件。我有一個mac,我把我的DO.txt文件放在Mac的mysql目錄下。比找出MySQL爲什麼看不到爲每個人完整閱讀的文件要容易得多。在我的機器上,這是在/ usr/local/mysql中。 – wilbbe01 2011-03-13 03:10:31

13

我已經在最近,從下載網站GEONAMES的最新數據,並將它們導入到MySQL數據庫的shell腳本。它基於GeoNames論壇的知識,爲我節省了很多時間。

它是在它的第一個版本,但功能齊全。也許它可以幫助。

您可以在http://codigofuerte.github.com/GeoNames-MySQL-DataImport/

+0

謝謝。這爲我們節省了一些麻煩。似乎甚至可以與Cygwin一起工作(在我的同事電腦上看到它)。現在運行在我的Linux機器上。似乎工作,但需要sooooo很久! :) – walialu 2014-04-29 09:43:01

+0

謝謝,這證明非常有用 – wolfgang 2015-09-10 05:53:58

7

訪問它對於每一個在未來: 在geonames.org論壇在2008年,這是「進口所有GEONAMES轉儲到MySQL」 http://forum.geonames.org/gforum/posts/list/732.page

也是谷歌這樣的:進口轉儲到[PostgreSQL的或SQL Server或MySQL]現場:forum.geonames.org

爲了找到更多的答案甚至從2006年全年

編輯提供簡介:

在geoname官方讀我:http://download.geonames.org/export/dump/。我們將找到關於轉儲文件和它們的內容的很好的描述。

轉儲文件將直接導入到MySQL數據表。例如:

SET character_set_database=utf8; 
LOAD DATA INFILE '/home/data/countryInfo.txt' INTO TABLE _geo_countries IGNORE 51 LINES(ISO2,ISO3,ISO_Numeric,FIPSCode,AsciiName,Capital,Area_SqKm,Population,ContinentCode,TLD,CurrencyCode,CurrencyName,PhoneCodes,PostalCodeFormats,PostalCodeRegex,Languages,GeonameID,Neighbours,EquivalentFIPSCodes); 
SET character_set_database=default; 

小心的字符集,因爲如果我們用2012年的舊的phpmyadmin的CSV LOAD DATA準備進口商即使列的排序規則設置爲utf8_general_ci我們可能會失去UTF字符

目前有4個主要數據表:大洲,國家(countryInfo.txt),部門(管理),城市或地區(GEONAMES)

ADMIN1,2,3,4個轉儲文件是不同水平的國家的內部分裂如美國或其他國家的省份的管理員1。 admin 2更詳細,是國家或省的內部分支。依此類推3和4

列出的國家轉儲文件不僅包含城市,還包含該國的所有地區,甚至包括商店中心。還有一個巨大的文件,因爲從zip文件中提取「allCountries.txt」將超過1GB。如果我們只需要城市,我們應該選擇一個轉儲文件:cities1000.txt,cities5000.txt,cities15000.txt,其中數字表示所列城市的最小人口數。我們將城市存儲在geonames數據表中(您可以稱之爲地理位置或地理城市)。

在導入* .txt轉儲文件之前,需要對MySQL文檔中的LOAD DATA語法進行一些研究。

自述文本文件(也轉儲頁面的頁腳)爲例子足以說明:

The main 'geoname' table has the following fields : 
--------------------------------------------------- 
geonameid   : integer id of record in geonames database 
name    : name of geographical point (utf8) varchar(200) 
asciiname   : name of geographical point in plain ascii characters, varchar(200) 
alternatenames : alternatenames, comma separated varchar(5000) 
latitude   : latitude in decimal degrees (wgs84) 
longitude   : longitude in decimal degrees (wgs84) 
feature class  : see http://www.geonames.org/export/codes.html, char(1) 
feature code  : see http://www.geonames.org/export/codes.html, varchar(10) 
country code  : ISO-3166 2-letter country code, 2 characters 
cc2    : alternate country codes, comma separated, ISO-3166 2-letter country code, 60 characters 
admin1 code  : fipscode (subject to change to iso code), see exceptions below, see file admin1Codes.txt for display names of this code; varchar(20) 
admin2 code  : code for the second administrative division, a county in the US, see file admin2Codes.txt; varchar(80) 
admin3 code  : code for third level administrative division, varchar(20) 
admin4 code  : code for fourth level administrative division, varchar(20) 
population  : bigint (8 byte int) 
elevation   : in meters, integer 
dem    : digital elevation model, srtm3 or gtopo30, average elevation of 3''x3'' (ca 90mx90m) or 30''x30'' (ca 900mx900m) area in meters, integer. srtm processed by cgiar/ciat. 
timezone   : the timezone id (see file timeZone.txt) varchar(40) 
modification date : date of last modification in yyyy-MM-dd format 

也即將VARCHAR(5000),我們應該知道每行的MySQL的64KB的大小5.0或更高版本: Is a VARCHAR(20000) valid in MySQL?