首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得一个国家的地区/区域和这个地区/地区的城市?

如何获得一个国家的地区/区域和这个地区/地区的城市?
EN

Stack Overflow用户
提问于 2015-04-07 12:51:00
回答 2查看 1.2K关注 0票数 0

我们做了一个简单的查询,得到了一些城市:

代码语言:javascript
运行
复制
SELECT * FROM `allCountries` WHERE name='Moscow' and `country_code` = 'RU'

以下是此查询的结果:

例如,对于另一个城市,我们得到了4-7行的结果。

如何得到一个国家的所有地区/地区,然后得到这个地区/地区的所有城市?

请小心点。我们对API站点和数据库获取不感兴趣。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-04-09 08:24:37

背景

在Geonames中,您有区分位置类型的feature_class、es和feature_codes。您可以在Geonames网站上找到代码的详细描述。在你的快照中,P.PPLC的意思是“城市(人口稠密的地方),这是一个政治实体的首都”,而S.HLC的意思是“建筑(点)酒店”。

而且,每个geoname都有属性来标识国家内部“层次结构”中的位置;这些属性是country_codeadmin1_codeadmin2_codeadmin3_codeadmin4_code。请注意,并非每个给定的地理名称都使用所有的属性,因为这取决于一个国家的政治组织。

找到一个行政级别内的所有城市

要在一个区域(即管理级别)中查找所有城市,您必须首先搜索该管理级别的geoname,以便具有用于筛选城市查询的管理代码。

要找到管理级别,首先必须执行如下查询:

代码语言:javascript
运行
复制
SELECT *
FROM `allCountries`
WHERE `country_code` = 'RU'
AND `feature_class`='A'
AND `feature_code`='ADM1'

请注意,查询只筛选出第一个管理级别(feature_code=‘ADM1 1’),但是可以通过将其更改为:

代码语言:javascript
运行
复制
SELECT *
FROM `geonames`
WHERE `country_code` = 'RU'
AND `feature_class`='A'
AND `feature_code` LIKE 'ADM_'

现在,从这个结果集中选择一个记录,然后使用该级别的“层次结构”代码搜索城市。你应该使用类似于(比照)的东西:

代码语言:javascript
运行
复制
SELECT *
FROM `geonames`
WHERE `country_code` = "RU"
AND `feature_class`='P'
AND `feature_code` LIKE 'PPL%'
AND `admin1_code`="<admin1>"
AND `admin2_code`="<admin2>"
AND `admin3_code`="<admin3>"
AND `admin4_code`="<admin4>"

小心NULL管理代码,您需要从SQL中删除这些代码(整个“和.”)。条款)。

当然,你可以在这个过滤的集合中做原始的“莫斯科”搜索。

票数 2
EN

Stack Overflow用户

发布于 2015-04-27 10:43:02

您的问题的答案是相当长的,但这段代码片段可能会对您有所帮助。这些查询获取所有关于给定的geonameid的层次结构信息(它是postgres中的plpython )。

代码语言:javascript
运行
复制
get_geoname = plpy.prepare("SELECT geonameid, asciiname, country, admin1, admin2 FROM all_countries where geonameid=$1",
        ["integer"])

get_country_name = plpy.prepare("SELECT name as country from country_info where code = upper($1)", ["varchar"])

get_admin1 = plpy.prepare("SELECT asciiname, name FROM admin1 where code = $1", ["text"])
get_admin2 = plpy.prepare("SELECT asciiname, name FROM admin2 where code = $1", ["text"])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29492083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档