Javascript 如何使用宣传册从MapBox上的现有平铺集获取几何图形(点)?

Javascript 如何使用宣传册从MapBox上的现有平铺集获取几何图形(点)?,javascript,geometry,leaflet,mapbox,tile,Javascript,Geometry,Leaflet,Mapbox,Tile,我们在MapBox上有一个用于道路的现有瓷砖集(图层) 我知道该瓷砖集(图层)中一条线/要素的属性值(道路uniq编号) 如何从带有传单0.7.x的MapBox中获取该线的点的几何图形?遗憾的是,我发现没有解决方案可以直接使用普通传单访问瓷砖集的特征。幸运的是,有另一个简单的解决方案使用。使用此库,您可以轻松访问瓷砖集的功能及其属性。为了向您展示它是如何完成的,我创建了一个示例: 假设我们有一个道路层,我从这里下载并添加到MapBox中作为一个。然后,您需要创建一个自定义文件以供以后访问。然后需

我们在MapBox上有一个用于道路的现有瓷砖集(图层)

我知道该瓷砖集(图层)中一条线/要素的属性值(道路uniq编号)


如何从带有传单0.7.x的MapBox中获取该线的点的几何图形?

遗憾的是,我发现没有解决方案可以直接使用普通传单访问瓷砖集的特征。幸运的是,有另一个简单的解决方案使用。使用此库,您可以轻松访问瓷砖集的功能及其属性。为了向您展示它是如何完成的,我创建了一个示例:

假设我们有一个道路层,我从这里下载并添加到MapBox中作为一个。然后,您需要创建一个自定义文件以供以后访问。然后需要使用
mapboxgl.Map()
创建一个新的映射,例如:

mapboxgl.accessToken = '{your-access-token}';

var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/{name}/{style-id}',
    center: [14.5, 47],
    zoom: 6
});
var features = map.queryRenderedFeatures({
layers:['roads-bm6ga5'], # Here you may add your layer name to query
filter: ["==", "id", 2] # Here you may add your query condition     
在此之后,您只需使用
map.queryRenderedFeatures()
查询渲染的分幅,例如:

mapboxgl.accessToken = '{your-access-token}';

var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/{name}/{style-id}',
    center: [14.5, 47],
    zoom: 6
});
var features = map.queryRenderedFeatures({
layers:['roads-bm6ga5'], # Here you may add your layer name to query
filter: ["==", "id", 2] # Here you may add your query condition     
结果将根据您设置的图层名称和条件返回一个对象。从该对象可以访问矢量数据集中的所有特性,包括几何体及其坐标。使用
功能[0]。几何图形。坐标
您将接收沿线串的所有点(例如道路)

mapboxgl.accessToken='pk.eyj1ijoichjhewvyiiwiysi6imi3ogrjzjcy2jiztuzodmwuxzddinjrimwe4nji5in0.zETX-x6-XPpAv3zt4MiFwg';
var map=new mapboxgl.map({
容器:“映射”,
风格:'mapbox://styles/prayer/ciub6rm2j004v2iodiej359ox',
中间:[14.547],
缩放:6
});
地图上('点击')功能(e){
var features=map.queryRenderedFeatures({
图层:['roads-bm6ga5'],
过滤器:[“==”,“id”,1]
});
document.getElementById('features')。innerHTML='Road with ID'+features[0]。properties.ID+'的坐标为:'+
“
”+JSON.stringify(功能[0].geometry.coordinates,null,2); }); 地图上的“加载”功能(e){ 警报(“在地图中单击以显示ID为1的道路坐标”) });
body{margin:0;padding:0;}
#映射{位置:绝对;顶部:0;底部:0;宽度:100%;}
#特征{
位置:绝对位置;
排名:0;
右:0;
底部:0;
宽度:300px;
溢出:自动;
背景:rgba(255,255,255,0.8);
}
#地图画布{
光标:十字线;
}


提供一个小提琴会非常有帮助,然后我可以进行测试,这样就不需要创建mapbox帐户了。你是说这条线的起点和终点?您是否尝试过:map.getLayer(“LayerID”).feature.geometry.coordinates?如果mapbox tileset与geoJSON layerTanks@Manuel表示相同,那么这可能会起作用。问题是获取所有创建路径的点-起点、中点和终点。我知道对于不同的缩放,我们有不同的点数。没关系。我正在搜索按属性过滤的方法(API)。要获得一个特征,请选择所有点。我是如何知道LayerID的?理想情况下,我希望有一个获取参数的映射对象的方法:层对象/名称(道路)、缩放级别、过滤器属性名称、过滤器属性值。并返回具有几何图形的特征(给定缩放时直线的所有点)。请帮忙!今天我将发布一个示例,在整个页面中运行该代码段,因为存在一个错误minifiedTypeError:features[0]在Firefox中未定义。它在移动三星galaxy s5上运行。为什么不在Firefox中?Chrome中的错误“未能初始化WebGL(…)”