我喜欢ggmap在特定区域绘制街道.我通过立交桥api从osm获取数据.它适用于大多数街道geom_path.然而,一些街道搞砸了.任何提示都表示赞赏.
请查看http://overpass-turbo.eu/获取所需的输出.您可以在下面的R代码中找到查询.
library(httr)
library(tidyverse)
#> ?? Attaching packages ??????????????????????????????????????????????????????????????????????????????????????????? tidyverse 1.2.1 ??
#> ? ggplot2 2.2.1 ? purrr 0.2.4
#> ? tibble 1.4.2 ? dplyr 0.7.4
#> ? tidyr 0.8.0 ? stringr 1.3.0
#> ? readr 1.1.1 ? forcats 0.3.0
#> ?? Conflicts ?????????????????????????????????????????????????????????????????????????????????????????????? tidyverse_conflicts() ??
#> ? dplyr::filter() masks stats::filter()
#> ? dplyr::lag() masks stats::lag()
library(ggmap)
library(rlist)
# Get data from overpass api
query <- paste('[out:json];',
'(way["highway"~"primary|residential"](53.5970, 9.9010, 53.6050, 9.9080););',
'(._;>;);',
'out body;') …Run Code Online (Sandbox Code Playgroud) 具有一定级别的行政边界关系,如何获得父级边界?
\n\n这适用于布拉迪斯拉发市部分 Petr\xc5\xbealka:\n http://overpass-turbo.eu/s/ewU
\n\n[out:csv(::id,::type,"name","admin_level")];\nrel(2208781);\n(._;<<;);\nout;\nRun Code Online (Sandbox Code Playgroud)\n\n结果是:
\n\n@id @type name admin_level\n14296 relation Slovensko 2\n388210 relation okres Bratislava V 8\n388265 relation Bratislavsk\xc3\xbd kraj 4\n1702499 relation Bratislava 6\n2208781 relation Petr\xc5\xbealka 9\nRun Code Online (Sandbox Code Playgroud)\n\n但它不适用于维也纳部分 Meidling\n http://overpass-turbo.eu/s/ex1
\n\n[out:csv(::id,::type,"name","admin_level")];\nrel(1990596);\n(._;<<;);\nout;\nRun Code Online (Sandbox Code Playgroud)\n\n结果
\n\n@id @type name admin_level\n1990596 relation Meidling 9\nRun Code Online (Sandbox Code Playgroud)\n\n显然,问题在于维也纳边界关系中没有定义子关系。有什么可靠的方法可以找到这些亲子关系吗?
\n我尝试读取一个有效的Openstreetmaps API输出JSON字符串.
我使用以下代码:
import pandas as pd
import requests
# Links unten
minLat = 50.9549
minLon = 13.55232
# Rechts oben
maxLat = 51.1390
maxLon = 13.89873
osmrequest = {'data': '[out:json][timeout:25];(node["highway"="bus_stop"](%s,%s,%s,%s););out body;>;out skel qt;' % (minLat, minLon, maxLat, maxLon)}
osmurl = 'http://overpass-api.de/api/interpreter'
osm = requests.get(osmurl, params=osmrequest)
osmdata = osm.json()
osmdataframe = pd.read_json(osmdata)
Run Code Online (Sandbox Code Playgroud)
抛出以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-66-304b7fbfb645> in <module>()
----> 1 osmdataframe = pd.read_json(osmdata)
/Users/paul/anaconda/lib/python2.7/site-packages/pandas/io/json.pyc in read_json(path_or_buf, orient, typ, dtype, convert_axes, convert_dates, …Run Code Online (Sandbox Code Playgroud) 我当前的查询如下所示:
[out:json]
[timeout:60]
;
(
relation
["type"="multipolygon"]
["landuse"~"brownfield|railway"]
(50.757310,6.054754,50.786730,6.111574);
way
["landuse"~"brownfield|railway"]
(50.757310,6.054754,50.786730,6.111574);
);
out body;
>;
out skel qt;
Run Code Online (Sandbox Code Playgroud)
我想用一个坐标和半径替换边界框,类似于查询另一个节点周围的节点。
node["name"="Bonn"];
node
(around:1000)
["name"="Gielgen"];
out body;
Run Code Online (Sandbox Code Playgroud)
这可能吗?
使用 OverPass API,我想在一个查询中进行多个不同的查询,然后在输出中通过查询将结果分开。例如:
node( <some bounding box> )[amenity~"cafe"]->.my_cafes;
node( <some bounding box> )[amenity~"restaurant"]->.my_restaus;
.my_cafes out;
.my_restaus out;
Run Code Online (Sandbox Code Playgroud)
在 XML 输出中,是否可以跟踪给定结果正在回答哪个子查询(即“my_cafes”或“my_restaus”)?这可以避免发送许多 API 调用。
在我的示例中,可以使用类似 的内容轻松过滤输出结果节点tag[k=amenity,v=cafe]。但情况并非总是如此(让我们想象两个相似的请求,在 Overpass 中使用两个不同的around:子句进行过滤)
我overpy用来查询 Overpass API,数据的性质使得我有很多查询要执行。我遇到了 429OverpassTooManyRequests异常,我正在努力遵守规则。我已经尝试引入time.sleep方法来分隔请求,但我没有关于程序在继续之前应该等待多长时间的依据。
我发现这个链接提到了“Retry-after”标头:
How to avoid HTTP error 429 (Too Many Requests) python
有没有办法在overpy响应中访问该标头?我已经浏览了文档和源代码,但没有任何内容可以让我访问该标题,以便我可以暂停查询,直到可以再次这样做为止。
我正在使用 Python 3.6 和 overpy 0.4。
哪个是检索给定国家/地区所有城市的最佳 api?我尝试从 geonames 下载。但似乎数据不可靠。` 是否可以在立交桥 api 中查询城市以及州和国家/地区?
您能建议一种更好的方式来下载城市及其积分吗?
我有以下代码用于从 OSM 请求地图数据:
$.ajax({
url:
'https://www.overpass-api.de/api/interpreter?' +
'[out:json][timeout:60];' +
'area["boundary"~"administrative"]["name"~"Berlin"];' +
'node(area)["amenity"~"school"];' +
'out;',
dataType: 'json',
type: 'GET',
async: true,
crossDomain: true
}).done(function() {
console.log( "second success" );
}).fail(function(error) {
console.log(error);
console.log( "error" );
}).always(function() {
console.log( "complete" );
});
Run Code Online (Sandbox Code Playgroud)
当我在 Overpass Turbo 上测试请求时,它运行没有任何问题,但是在 JavaScript 中执行此请求时,我总是收到错误消息:
"<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head> <meta http-equiv="content-type" content="text/html; charset=utf-8" lang="en"/> <title>OSM3S Response</title></head><body><p>The data included in this document is from www.openstreetmap.org. The data is made available under …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Django上运行的项目中使用带有JavaScript XMLHttpRequest 的立交桥API http://wiki.openstreetmap.org/wiki/Overpass_API,但我一直在使用
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.google.com/accounts/ClientLogin. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
Run Code Online (Sandbox Code Playgroud)
错误.无论我是使用GET还是POST,还是来自任何其他主机,我都会收到此错误,而不仅仅是overpass API.
我已经安装了django-cors-headers https://github.com/ottoyiu/django-cors-headers并遵循那里的说明,将'corsheaders'放入INSTALLED_APPS,'corsheaders.middleware.CorsMiddleware','django.middleware .common.CommonMiddleware',进入MIDDLEWARE_APPS,我已经设置好了
CORS_ORIGIN_ALLOW_ALL = true
Run Code Online (Sandbox Code Playgroud)
在settings.py但似乎没有任何工作.我在本地运行它
python manage.py runserver
Run Code Online (Sandbox Code Playgroud)
但我也是在openshift上主持它.在这些工作中,他们都没有给出上述错误.
如果我在这里遗漏任何东西,请告诉我.
我有一个OpenstreetMap带leaflet.我正在使用这个 Plugin for leaflet来查询Overpass.
var opl = new L.OverPassLayer({
query: "(area['name'='Roma']; node(area)['amenity'='drinking_water']);out;",
});
Run Code Online (Sandbox Code Playgroud)
但是当插件使用时,我的地图没有显示任何内容.
怎么了?
注意:我的查询基于此工作.
编辑:
该查询正在与插件,但不是在http://overpass-turbo.eu/?!
var opl = new L.OverPassLayer({
query: "(node(BBOX)['amenity'='drinking_water'];);out;",
Run Code Online (Sandbox Code Playgroud)
});
完整示例:
var attr_osm = 'Map data © <a href="http://openstreetmap.org/">OpenStreetMap</a> contributors',
attr_overpass = 'POI via <a href="http://www.overpass-api.de/">Overpass API</a>';
var osm = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {opacity: 0.7, attribution: [attr_osm, attr_overpass].join(', ')});
var map = new L.Map('map').addLayer(osm).setView(new L.LatLng(49.592041, 8.648164),2);
//OverPassAPI overlay
var opl = new L.OverPassLayer({
query: "(node(BBOX)['amenity'='drinking_water'];);out;",
}); …Run Code Online (Sandbox Code Playgroud) overpass-api ×10
javascript ×3
python ×3
ajax ×1
cors ×1
cross-domain ×1
django ×1
geojson ×1
geolocation ×1
geonames ×1
ggmap ×1
ggplot2 ×1
jquery ×1
json ×1
leaflet ×1
pandas ×1
r ×1