无法弄清楚如何在给定位置获得特定半径的所有道路.我目前的疑问是
<query type="way">
<around lat="55.693309807744484" lon="21.151986122131348" radius="50"/>
</query>
<union>
<item/>
<recurse type="down"/>
</union>
<print/>
Run Code Online (Sandbox Code Playgroud)
我试图添加这样的东西,<highway>primary,secondary,tertiary,residential</highway>但它没有用
我已按照安装说明进行操作:http: //wiki.openstreetmap.org/wiki/Overpass_API/install
最初一切都运作完美,但我想尝试使用我自己的自定义地图,但是当我杀死调度程序时,没有任何作用.这是原始数据库而不是我的自定义地图.
我试图清理所有东西并从头开始安装,这也完美无缺,但是对调度员的简单杀戮使得一切都从那里崩溃.
当我尝试启动调度程序时,我当前收到错误消息:File_Error地址已在使用98 /srv/osm3s/db_dir//osm3s_v0.7.3_osm_base Dispatcher_Server :: 4
查看netstat,没有使用端口98的进程.重新启动整个服务器并不能使它工作./ dev/shm中没有锁文件.
该怎么办?每次我杀死调度员时,我都不希望清理和安装所有东西.
I\xc2\xb4m 尝试从 OSM 导入多个方法和节点。但我不想将这些方式作为具有不同节点的方式,而只是中间的方式。
\n\n就我而言,所有道路都是一个区域(公园、停车场等),我只需要一个点 - 该区域的中间。我可以在请求后计算这个,但也许有更优雅的方法?
\n我想使用Overpass API查找特定区域中的所有酒吧,并使用geocodeArea选择区域。
在overpass-turbo.eu上测试以下查询给了我想要的结果:
{{geocodeArea:berlin}}->.searchArea;
(
node["amenity"="pub"](area.searchArea);
way["amenity"="pub"](area.searchArea);
relation["amenity"="pub"](area.searchArea);
);
out body;
>;
out skel qt;
Run Code Online (Sandbox Code Playgroud)
但是当我使用overpy在 python 中实现该查询时......
import overpy
api = overpy.Overpass()
result = api.query("""
{{geocodeArea:berlin}}->.searchArea;
(
node["amenity"="pub"](area.searchArea);
way["amenity"="pub"](area.searchArea);
relation["amenity"="pub"](area.searchArea);
);
out body;
>;
out skel qt;
""")
print("Amenities in nodes: %d" % len(result.nodes))
print("Amenities in ways: %d" % len(result.ways))
Run Code Online (Sandbox Code Playgroud)
...我收到以下错误:
Traceback (most recent call last):
File "testOP.py", line 15, in <module>
""")
File "/usr/local/lib/python2.7/dist-packages/overpy/__init__.py", line 119, in query
msgs=msgs
overpy.exception.OverpassBadRequest: …Run Code Online (Sandbox Code Playgroud) 我想知道是否可以通过立交桥 API 请求“具有至少一个任何类型标签的任何节点”。我现在看到的唯一方法是在一个巨大的联合请求中指定所有现有标签(见下文),或者请求根本没有“标签过滤”的节点,并获得许多根本没有标签的节点。如果您知道更好的解决方案,我将不胜感激。谢谢!
[out:json];
(
node
["name"]
(50.6,7.0,50.8,7.3);
node
["amenity"]
(50.6,7.0,50.8,7.3);
AND SO ON (SPECIFY ALL THE OTHER TAGS)
);
out;
Run Code Online (Sandbox Code Playgroud) 我试图让所有道路都围绕某个点。我正在使用以下查询:
(
way
(around:300,50.7913547,-1.0944082)
["highway"~"^(primary|secondary|tertiary|residential)$"]
["crossing"!~"."]
["name"];
>;
);
out;
Run Code Online (Sandbox Code Playgroud)
我添加了crossing排除项,因为它一直包含十字路口的“标记”,而我只对道路感兴趣。
然而,它似乎忽略了十字路口,仍然在地图上绘制标记,而不仅仅是显示道路轮廓。这可以在这里看到。
这些我不想要的“节点”有标签:
crossing=zebra
highway=crossing
Run Code Online (Sandbox Code Playgroud)
这应该使我的正则表达式查询失败,但事实并非如此。
我如何让它只返回道路情节线,而没有这些节点/标记?
对不起,如果我的术语都错了,我对此很陌生
在绘制从osm下载的道路数据osmdata时,当使用较大的sizein 值时,得到的绘图中存在间隙geom_sf(见图).
这是一个可重复的例子,使用伦敦西南部的一段道路.绘图时如何删除线条中的白色间隙?
library(tidyverse)
library(sf)
library(osmdata)
# define bounding box for osm data
my_bbox <-
matrix(c(-0.2605616, -0.2605616,
-0.2004485, -0.2004485,
-0.2605616, 51.4689943,
51.4288980, 51.4288980,
51.4689943, 51.4689943),
ncol = 2)
bbox_sf <- st_geometry(st_polygon(x = list(my_bbox)))
st_crs(bbox_sf) <- 4326
#get osm road data for bounding box
osm_roads_secondary_sf <-
opq(bbox = st_bbox(bbox_sf)) %>%
add_osm_feature(key = 'highway', value = 'secondary') %>%
osmdata_sf()
ggplot() +
geom_sf(data=osm_roads_secondary_sf$osm_lines,size=4)
Run Code Online (Sandbox Code Playgroud)
会话信息:
R version 3.5.0 (2018-04-23)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.6 …Run Code Online (Sandbox Code Playgroud) 我正在解决这个问题,我必须创建几组不同的区域,为这些组提供不同的颜色并将其显示在地图上。几年前我曾在 Photoshop 中手动完成此操作,但今年当我不得不再次执行此操作时,我计划将其自动化。
因此,一个例子是区域集 {"Rotterdam", "Vlaardingen"} 将被涂成红色;而区域集 {"Den Haag", "Delft"} 将被涂成蓝色。
我计划为此使用Overpass API 。然而,虽然我能够创建一组区域并为它们着色,但我无法获得具有不同颜色的多组区域。我想知道这是否可能,如果可以,我将如何做到这一点。看起来应该是可能的,因为其他选择器也可以有不同的颜色。
一组的着色:
(
rel[name="Rotterdam"];
rel[name="Vlaardingen"];
)->.myArea1;
rel.myArea1[admin_level=10][type=boundary][boundary=administrative];
out geom;
{{style:
relation
{ color:red; fill-color:red; }
}}
Run Code Online (Sandbox Code Playgroud)
现在,Overpass 的文档声明您可以使用类作为选择器。但是,我尝试了多种方法来创建类,但不同的集要么以相同的颜色显示,要么以默认的颜色显示。我在下面列出了我的一些尝试。
(注意;以下解决方案不起作用)
尝试过解决方案1:
(
rel[name="Rotterdam"];
rel[name="Vlaardingen"];
)->.myArea1;
(
rel[name="Delft"];
rel[name="Den Haag"];
)->.myArea2;
rel.myArea1[admin_level=10][type=boundary][boundary=administrative];
rel.myArea2[admin_level=10][type=boundary][boundary=administrative];
out geom;
{{style:
relation.myArea1
{ color:red; fill-color:red; }
relation.myArea2
{ color:blue; fill-color:blue; }
}}
Run Code Online (Sandbox Code Playgroud)
尝试了解决方案2:
(
rel[name="Rotterdam"];
rel[name="Vlaardingen"];
)->.myArea1;
{{{set .myArea1;}}
(
rel[name="Delft"];
rel[name="Den Haag"];
)->.myArea2;
{{{set .myArea2;}}
rel.myArea1[admin_level=10][type=boundary][boundary=administrative];
rel.myArea2[admin_level=10][type=boundary][boundary=administrative]; …Run Code Online (Sandbox Code Playgroud) 我想使用http://overpass-turbo.eu/获取纽约市的所有街道。我试过这个:
[out:json]; area[name = "New York"]; (node(area)[highway=street]; ); out;
Run Code Online (Sandbox Code Playgroud)
然而它返回
{
"version": 0.6,
"generator": "Overpass API 0.7.55.1009 5e627b63",
"osm3s": {
"timestamp_osm_base": "2019-11-13T19:26:03Z",
"timestamp_areas_base": "2019-11-13T18:05:02Z",
"copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
},
"elements": [
]
}
Run Code Online (Sandbox Code Playgroud)
没有元素。然而这个查询:
[out:json]; area[name = "New York"]; ( node(area)[amenity=cinema]; node(area)[highway=street]; ); out;
Run Code Online (Sandbox Code Playgroud)
为了获取街道和电影院,可以使用:
{
"version": 0.6,
"generator": "Overpass API 0.7.55.1009 5e627b63",
"osm3s": {
"timestamp_osm_base": "2019-11-13T19:29:02Z",
"timestamp_areas_base": "2019-11-13T18:05:02Z",
"copyright": "The data included …Run Code Online (Sandbox Code Playgroud) 我在 Cordova 中开发了一个开源应用程序(它使用 Javascript),并且我正在使用 Google Maps API,尽管随着该应用程序变得流行,我的账单正在增加(对于免费、无广告的应用程序来说这不是很好)。因此我想转向开放街道地图。
我一直在阅读有关 Overpass API 的文档,但没有看到简单清晰的代码实现示例。我知道要使用的服务器,我应该使用 HTTP GET 请求并使用其特殊的 XML 语法。但不清楚如何将该 XML 传递给 GET 请求。此外,关于坐标的示例提供了边界框作为输入,而不是点(或者点被视为角相同的正方形?)。
<union>
<bbox-query s="51.249" w="7.148" n="51.251" e="7.152"/>
<recurse type="up"/>
</union>
<print mode="meta"/>
Run Code Online (Sandbox Code Playgroud)
您能否提供一个简单的 Javascript 示例(例如使用$.ajax)来说明如何通过向 API 提供地理坐标来获取特定位置的地址?
overpass-api ×10
api ×1
ggplot2 ×1
nominatim ×1
python ×1
r ×1
r-sf ×1
ubuntu ×1
ubuntu-12.04 ×1