我正在寻找有关所有欧洲城市、村庄和城镇的数据。具体来说,我对姓名、邮政编码、电话区号、纬度、经度、人口及其所属国家感兴趣。
1.我可以从哪里提取最全面的数据?
2.如何从LinkedGeoData查询数据
首先,我尝试从 LinkedGeoData ( http://linkedgeodata.org/sparql ) 中提取数据。但是,我无法得到任何合理的结果。执行以下查询时,只有人口偶尔出现,其他字段始终留空。
SELECT * WHERE
{
?place a <http://linkedgeodata.org/ontology/Place> .
OPTIONAL { ?place <http://linkedgeodata.org/property/openGeoDB:name> ?name . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/openGeoDB:lat> ?lat . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/openGeoDB:lon> ?lon . }
OPTIONAL { ?place <http://linkedgeodata.org/property/openGeoDB:postal_codes> ?postal . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/openGeoDB:telephone_area_code> ?tel . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/population> ?population . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/openGeoDB:is_in_loc_id> ?inLocId . }
?place <http://linkedgeodata.org/property/is_in> ?in.
FILTER ( REGEX(?in, "europe", "i") ) .
}
我注意到包含 openGeoDB
的所有属性都是空白的,尽管这些属性存在。那么查询出了什么问题呢?
最佳答案
要查找合适的数据集,您可以查看数据集目录the Data Hub或数据问答板 Get the Data .
回复。你的第二个问题,linkedgeodata 的数据似乎有点稀疏,或者必须利用其他属性和/或类。但是,以下查询似乎至少提供了一些结果,您可以看到欧洲的每个地方都可以通过 lgdb:is_in 属性进行寻址
PREFIX lgd:<http://linkedgeodata.org/>
PREFIX lgdo:<http://linkedgeodata.org/ontology/>
PREFIX lgdp:<http://linkedgeodata.org/property/>
PREFIX lgdoogdb: <http://linkedgeodata.org/ontology/openGeoDB>
PREFIX lgdpogdb: <http://linkedgeodata.org/property/openGeoDB>
SELECT *
FROM <http://linkedgeodata.org>
WHERE
{
?place a lgdo:Place .
OPTIONAL { ?place lgdpogdb:name ?name . }
OPTIONAL { ?place lgdoogdb:lat ?lat . }
OPTIONAL { ?place lgdoogdb:lon ?lon . }
OPTIONAL { ?place lgdpogdb:postal_codes ?postal . }
OPTIONAL { ?place lgdoogdb:telephone_area_code ?tel . }
OPTIONAL { ?place lgdo:population ?population . }
OPTIONAL { ?place lgdoogdb:is_in_loc_id ?inLocId . }
OPTIONAL { ?place lgdp:is_in ?in . }
}
LIMIT 100
例如通过以下查询,您可以稍微探索一下数据集的结构:
PREFIX lgdo:<http://linkedgeodata.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT *
FROM <http://linkedgeodata.org>
WHERE
{
?place a lgdo:Place .
?place rdfs:label ?label .
}
LIMIT 100
...最后以下查询返回欧洲的 100 个地点:
PREFIX lgdo:<http://linkedgeodata.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT *
FROM <http://linkedgeodata.org>
WHERE
{
?place a lgdo:Place .
?place rdfs:label ?label .
?place <http://linkedgeodata.org/property/is_in%3Acontinent> "Europe" .
FILTER ( lang(?label) = "" )
}
LIMIT 100
请注意,FILTER 表达式用于过滤掉每个具有语言标记的特定于语言的标签,即,纯文字将与该查询一起显示。
关于sparql - 从哪里获取所有欧洲城市、村庄的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9594362/