我是Mapbox API的新手,我正在尝试开发一些东西,其中从服务器返回geojson文件,并在地图上绘制要素。
我已成功在地图上绘制要素。我要做的是浏览所有记录,查看geojson列是否具有值,如果可以,则从服务器获取它,创建一个新层并将其绘制在该层上。
这些都是多边形。我需要做的是在单击一个多边形时触发一个事件,这就是为什么我使用单个图层的原因。这是代码:
<script type="text/javascript">
L.mapbox.accessToken = 'someKey';
var map = L.mapbox.map('map', 'someMap')
.setView([-39.67, -69.26], 4);
$(document).ready(function(){
$('header h2').text('Equipment Map');
$.getJSON('distributor-companies', function (data) {
var layers = [];
$.each(data, function(i, item) {
if(item.geojson != ''){
var file = item.geojson;
layers[i] = L.mapbox.featureLayer().addTo(map);
$.getJSON('/geojson/' + file, function(data){
console.log('layer' + i);
layers[i].setGeoJSON(data);
});
}
});
$.each(layers, function(i, item){
console.log(item);
// item.on('click', function(e){
// alert('hello');
// });
});
layers[32].on('click', function(e){
alert('hello');
});
layers[31].on('click', function(e){
alert('hello hi');
});
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
现在,我从分销商-公司路线中获取所有数据,并每次创建一个新层并为每条记录绘制数据。所以最后我剩下很多多边形。
最后,我尝试在运行良好的各个层上分别注册一个click事件侦听器。但是在我试图遍历该层之前的代码不起作用。console.log函数将所有图层显示为对象,但是当我尝试在该项目上注册on …
我有一个mapbox,想要在其上显示一层esri数据.我正在从这个json文件中获取数据:
数据['results'] [0] ['value'] ['features']数组看起来像这样:
[{'attributes':{'key':'value'}},{'geometry':{'paths':[[ - 13273770,4064608],[ - 13273762,4064613],....]}}, {'attributes':{'key':'value'}},{'geometry':{'paths':[[ - 13273770,4064608],[ - 13273762,4064613],....]}},{ 'attributes':{'key':'value'}},{'geometry':{'paths':[[ - 13273770,4064608],[ - 13273762,4064613],....]}}}]
我的问题是关于几何数组.那里的数据没有Lat/Lng值(我希望这样),所以我不知道如何将这些添加到我的地图中.我是GIS的新手,到目前为止我所做的研究都指向了SpatialReferences.任何帮助显然非常感谢!
大家好,我有一组标记是在.each循环上动态创建的,就像这样。
$.each(data, function(index, element) {
markerArr[element.id] = L.marker(map.unproject([element.LocationX,element.LocationY],map.getMaxZoom()-4)).addTo(map);
});
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在单击时为每个弹出窗口打开弹出窗口,并在弹出窗口中显示唯一ID?
如果要像这样用唯一的名称声明每个标记,则可以执行此操作。
var marker1 = L.marker([158,395]).addTo(mapl);
var marker2 = L.marker([158,410]).addTo(mapl);
marker1.bindPopup("Kanye West");
marker1.on('click', function (e) {
this.openPopup();
});
marker2.bindPopup("50 Cent");
marker2.on('click', function (e) {
this.openPopup();
});
Run Code Online (Sandbox Code Playgroud)
但是我需要能够打开数组中的所有标记。
尝试这样的事情没有运气
markerArr[this].on('click', function (e) {
this.openPopup();
});
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
谢谢。
我们目前正在从geojson数据将图层加载到mapbox GL中。如果我们的geojson具有包含点和多边形的要素集合,则由于需要设置图层类型,因此似乎没有办法同时显示mapbox gl。
有没有办法为图层设置多种类型?似乎无法处理多个。
map.addLayer({
"id": "route",
"type": "line", //THIS SEEMS TO BE THE LIMITATION
"source": "route",
});
Run Code Online (Sandbox Code Playgroud) 有人可以提供代码示例以将ArcGIS Map Service消费到MapBox GL API中吗?谢谢!
在最新的Chrome浏览器中使用Mapbox-gl.js时,一切正常.当我想使用默认的mapbox.js实现时,地图图块会混淆并显示完全错误.见截图

我完全不知道为什么这对mapbox.js不起作用,而我没有遇到mapbox-gl.js的任何问题
我想在地图上添加geotif图像层,我可以在mapbox studio中轻松地做到这一点,有没有办法使用mapbox gl js库来做到这一点。我使用带有mapbox gl js库的以下代码添加了geojson文件:
map.addSource("quakes", {
"type": "geojson",
"data": "http://localhost:3000/Srikakulam.geojson"
});
Run Code Online (Sandbox Code Playgroud)
对于tiff图像,我找不到类似的解决方案。
我有数百张tiff图片要根据天气和日期动态加载。
我想删除Mapbox地图上的源和图层。我设法删除了所有的源和图层,除了我添加到Mapbox地图中的第一个源和图层。
请注意,我不太擅长使用jQuery $ .post。
这是我添加所有源和图层的方法。
$.post('ajax/marker.php', function(data)
{
var firstSplit = data.split(",");
for(i=0;i<firstSplit.length-1;i++)
{
var secondSplit = firstSplit[i].split("|");
var id = secondSplit[0];
var lat = secondSplit[1];
var lng = secondSplit[2];
var point = {
"type": "Point",
"coordinates": [lat, lng]
};
map.addSource(id, { type: 'geojson', data: point });
map.addLayer({
"id": id,
"type": "symbol",
"source": id,
"layout": {
"icon-image": "airport-15"
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
记住,我设法查看了Mapbox地图上的所有源和图层。 只是我不能只删除添加到地图的第一个源和图层。我希望外面有人对此有一些想法。谢谢。
我在循环中使用了以下两个语句来删除源和图层。
map.removeSource(id);
map.removeLayer(id);
Run Code Online (Sandbox Code Playgroud)
我做了一个测试,手动删除了第一个源和图层,如下所示,但它不起作用。
map.removeSource('1612280004A');
map.removeLayer('1612280004A');
Run Code Online (Sandbox Code Playgroud)
但是,它适用于下一个源和层。
我正在使用地图,并且在模拟器上运行它时,该地图将无法工作。在我的日志中,我收到一条错误消息,告诉我必须授予对ACCESS_FINE_LOCATION的访问权限。如何在KOTLIN中做到这一点?我只能在使用Java的S / O上找到答案。我得到的错误是:
位置提供者需要ACCESS_FINE_LOCATION权限
我有一个视图(在我的情况下为MGLMapview:mapboxView),该视图显示在我的第一个VC中。我希望我的第二个VC显示相同的视图。
所以从VC1到VC2我做到了:
self.VC2.mapView = self.mapView
self.navigationController?.pushViewController(self.VC2, animated: true)
Run Code Online (Sandbox Code Playgroud)
然后在VC2的viewDidLoad中:
view.addSubview(mapView)
Run Code Online (Sandbox Code Playgroud)
我的问题是什么也没出现。但是,当我在第二个VC中打印mapView的大小和高度时,它不为零。
我想念什么吗?
感谢您的帮助