标签: overpass-api

使用ggmap和geom_path绘制街道

我喜欢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)

r ggplot2 ggmap overpass-api

12
推荐指数
1
解决办法
530
查看次数

如何通过 OverPass API 获取父级管理边界

具有一定级别的行政边界关系,如何获得父级边界?

\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;\n
Run 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\n
Run 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;\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果

\n\n
@id     @type       name        admin_level\n1990596 relation    Meidling    9\n
Run Code Online (Sandbox Code Playgroud)\n\n

显然,问题在于维也纳边界关系中没有定义子关系。有什么可靠的方法可以找到这些亲子关系吗?

\n

openstreetmap overpass-api

7
推荐指数
1
解决办法
1177
查看次数

使用Pandas读取JSON时的"预期字符串或Unicode"

我尝试读取一个有效的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)

python json openstreetmap pandas overpass-api

6
推荐指数
1
解决办法
9860
查看次数

使用坐标和半径代替边界框

我当前的查询如下所示:

[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

6
推荐指数
1
解决办法
2056
查看次数

单个请求中包含多个单独的请求

使用 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:子句进行过滤)

openstreetmap overpass-api

6
推荐指数
1
解决办法
1212
查看次数

TooManyRequests 越界错误

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。

python overpass-api

6
推荐指数
1
解决办法
2798
查看次数

检索一个国家的城市列表

哪个是检索给定国家/地区所有城市的最佳 api?我尝试从 geonames 下载。但似乎数据不可靠。` 是否可以在立交桥 api 中查询城市以及州和国家/地区?

您能建议一种更好的方式来下载城市及其积分吗?

python geolocation geonames overpass-api

6
推荐指数
1
解决办法
2万
查看次数

如何使用 jQuery 的 Overpass API 获取 OSM 数据?

我有以下代码用于从 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)

javascript ajax jquery openstreetmap overpass-api

5
推荐指数
1
解决办法
3729
查看次数

在Django中启用CORS(交叉源请求)

我正在尝试在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上主持它.在这些工作中,他们都没有给出上述错误.

如果我在这里遗漏任何东西,请告诉我.

javascript django cross-domain cors overpass-api

5
推荐指数
3
解决办法
6056
查看次数

如何通过传单查询立交桥区域?

我有一个OpenstreetMapleaflet.我正在使用这个 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 &copy; <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)

javascript openstreetmap geojson leaflet overpass-api

5
推荐指数
1
解决办法
1467
查看次数