是否有任何地方可以获得 SQL 来创建加载条目的国家/地区表和城市表。如果城市与他们的国家相连,并且城市有坐标,那就太好了。这些数据将用于填充选择选项并将标记绘制到 GoogleMap 上。
2 回答
很抱歉回答了一个老问题,但我来到这里寻找相同的信息,但似乎在任何地方都没有得到清楚的回答,所以就这样吧。
来自 geonames 的“allCountries”数据非常广泛(轻描淡写),对于大多数应用程序来说都是多余的。'cities1000' 更有意义,并且规模更易于管理。只要您对服务器具有 SSH 访问权限,将其导入 MySQL 就非常简单。
下载文件
wget http://download.geonames.org/export/dump/cities1000.zip
提取它
unzip cities1000.zip
运行以下查询(不要忘记将 MyDatabase 替换为您的数据库名称,并且表的名称必须与文件的名称匹配)
.
CREATE TABLE IF NOT EXISTS `MyDatabase`.`cities1000` (
`geo_id` INT(11) UNSIGNED NOT NULL PRIMARY KEY,
`geo_name` VARCHAR(200) NOT NULL DEFAULT '',
`geo_ansiname` VARCHAR(200) NOT NULL DEFAULT '',
`geo_alternate_names` VARCHAR(2000) NOT NULL DEFAULT '',
`geo_latitude` DOUBLE PRECISION(11,7) NOT NULL DEFAULT '0',
`geo_longitude` DOUBLE PRECISION(11,7) NOT NULL DEFAULT '0',
`geo_feature_class` CHAR(1) ,
`geo_feature_code` VARCHAR(10) ,
`geo_country_code` CHAR(2),
`geo_country_code2` VARCHAR(60),
`geo_admin1_code` VARCHAR(20) DEFAULT '',
`geo_admin2_code` VARCHAR(80) DEFAULT '',
`geo_admin3_code` VARCHAR(20) DEFAULT '',
`geo_admin4_code` VARCHAR(20) DEFAULT '',
`geo_population` BIGINT(11) DEFAULT '0',
`geo_elevation` INT(11) DEFAULT '0',
`geo_gtopo30` INT(11) DEFAULT '0',
`geo_timezone` VARCHAR(40),
`geo_mod_date` DATE DEFAULT '0000-00-00'
) CHARACTER SET utf8 ;
- 将下载的文件导入数据库(您需要更改命令以匹配您的服务器配置)
mysqlimport -h localhost -u MySQL-USER -p --fields-terminated-by='\t' --lines-terminated-by='\n' --local MyDatabase /path-to/cities1000.txt
- 非常重要:为相关字段添加索引
而已!仍然非常全面的全球城市列表,没有“allCountries”文件中的所有“垃圾”。
数据的主要问题是,如果您想要国家,您将不得不自己构建该表并添加将它们链接到城市的外键,但是第二个数据源(在 XML 中可用)和一些聪明的查询将做的伎俩。