如何通过传单查询立交桥面积?
How to query Overpass area through leaflet?
我有一个 OpenstreetMap
和 leaflet
。我正在使用 this 传单插件来查询 Overpass。
var opl = new L.OverPassLayer({
query: "(area['name'='Roma']; node(area)['amenity'='drinking_water']);out;",
});
但是我的地图在与插件一起使用时没有显示任何内容。
怎么了?
注意:我的查询基于 this。
编辑:
此查询正在使用插件,但不适用于 http://overpass-turbo.eu/ ?!
var opl = new L.OverPassLayer({
query: "(node(BBOX)['amenity'='drinking_water'];);out;",
});
完整示例:
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;",
});
map.addLayer(opl);
您的缩放级别太低,您基本上是在检索地球大部分地区的数据。因此,您的 Overpass 查询超时,您将得不到任何结果。
改变
new L.LatLng(49.592041, 8.648164),2)
至
new L.LatLng(49.592041, 8.648164),14)
另外我推荐:
- 添加一个
[timeout:x]
参数来限制查询的运行时间
- 添加您要查询的对象的最大数量,例如
out 100;
最大。 100 个节点。
此外,您不能在 overpass turbo 中使用 (BBOX)
。 overpass turbo 的正确语法是 ({{bbox}})
.
我用另一个 plugin 解决了我的问题。
我可以使用 overpass-turbo 查询:
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(43.592041,2.648164),14);
var opl = new L.OverPassLayer({
query: "node[amenity=drinking_water]({{bbox}});out;",})",
});
map.addLayer(opl);
或在地图上使用自定义圆圈
var opl = new L.OverPassLayer({
query: "node[amenity=drinking_water]({{bbox}});out;",})",
onSuccess: function(data) {
for(i=0;i<data.elements.length;i++) {
e = data.elements[i];
var pos = new L.LatLng(e.lat, e.lon);
var color = 'green';
L.circle(pos, 5, {
color: color,
fillColor: '#fa3',
fillOpacity: 1,
}).addTo(map);
}
},
});
map.addLayer(opl);
您甚至可以使用 this 转换从 Overpass 接收到的数据
到GeoJson.可以直接画路和面积.
我有一个 OpenstreetMap
和 leaflet
。我正在使用 this 传单插件来查询 Overpass。
var opl = new L.OverPassLayer({
query: "(area['name'='Roma']; node(area)['amenity'='drinking_water']);out;",
});
但是我的地图在与插件一起使用时没有显示任何内容。
怎么了?
注意:我的查询基于 this。
编辑:
此查询正在使用插件,但不适用于 http://overpass-turbo.eu/ ?!
var opl = new L.OverPassLayer({
query: "(node(BBOX)['amenity'='drinking_water'];);out;",
});
完整示例:
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;",
});
map.addLayer(opl);
您的缩放级别太低,您基本上是在检索地球大部分地区的数据。因此,您的 Overpass 查询超时,您将得不到任何结果。
改变
new L.LatLng(49.592041, 8.648164),2)
至
new L.LatLng(49.592041, 8.648164),14)
另外我推荐:
- 添加一个
[timeout:x]
参数来限制查询的运行时间 - 添加您要查询的对象的最大数量,例如
out 100;
最大。 100 个节点。
此外,您不能在 overpass turbo 中使用 (BBOX)
。 overpass turbo 的正确语法是 ({{bbox}})
.
我用另一个 plugin 解决了我的问题。
我可以使用 overpass-turbo 查询:
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(43.592041,2.648164),14);
var opl = new L.OverPassLayer({
query: "node[amenity=drinking_water]({{bbox}});out;",})",
});
map.addLayer(opl);
或在地图上使用自定义圆圈
var opl = new L.OverPassLayer({
query: "node[amenity=drinking_water]({{bbox}});out;",})",
onSuccess: function(data) {
for(i=0;i<data.elements.length;i++) {
e = data.elements[i];
var pos = new L.LatLng(e.lat, e.lon);
var color = 'green';
L.circle(pos, 5, {
color: color,
fillColor: '#fa3',
fillOpacity: 1,
}).addTo(map);
}
},
});
map.addLayer(opl);
您甚至可以使用 this 转换从 Overpass 接收到的数据 到GeoJson.可以直接画路和面积.