当前位置: 首页 > 知识库问答 >
问题:

添加标记到地图(Mapbox)

祁雪峰
2023-03-14

我在视图中使用mapbox,需要从JSON添加多个标记

这是我的JSON

  [
   {
      "name":"Thistle London Heathrow Termin",
      "address1":"Bath Road",
      "rating":3.0,
      "lng":-0.4836,
      "lat":51.4805
   },
   {
      "name":"Ibis London Heathrow Airport",
      "address1":"112  Bath Road Hayes",
      "rating":3.0,
      "lng":-0.430683,
      "lat":51.48079
   },
   {
      "name":"Britannia Inn",
      "address1":"54 Mansfield Road",
      "rating":2.0,
      "lng":0.066,
      "lat":51.563
   },
   {
      "name":"Cranbrook Hotel",
      "address1":"22 24 Coventry Road",
      "rating":2.0,
      "lng":0.069,
      "lat":51.563
   },
   {
      "name":"Park Hotel",
      "address1":"327 Cranbrook Road",
      "rating":2.0,
      "lng":0.065,
      "lat":51.568
   },
   {
      "name":"Rest Up London",
      "address1":"Driscoll House",
      "rating":2.0,
      "lng":-0.096403,
      "lat":51.494554
   },
   {
      "name":"Ascot Hyde Park",
      "address1":"11 Craven Road",
      "rating":3.0,
      "lng":-0.176815,
      "lat":51.514745
   },
   {
      "name":"Fairways Bayswater",
      "address1":"186 Sussex Gardens",
      "rating":2.0,
      "lng":-0.1748,
      "lat":51.5144
   },
   {
      "name":"Four Stars",
      "address1":"26 28 Sussex Gardens",
      "rating":3.0,
      "lng":-0.1685,
      "lat":51.5179
   },
   {
      "name":"King Solomon",
      "address1":"155 159 Golders Green Road",
      "rating":3.0,
      "lng":-0.21045388,
      "lat":51.58082156
   },
   {
      "name":"Somerset.",
      "address1":"6  Dorset Square",
      "rating":2.0,
      "lng":-0.1607,
      "lat":51.5229
   },
   {
      "name":"Trinity House",
      "address1":"26 Blackhorse Raod",
      "rating":2.0,
      "lng":-0.0356,
      "lat":51.5832
   },
   {
      "name":"Viking",
      "address1":"162 Romford Road",
      "rating":2.0,
      "lng":0.01299262,
      "lat":51.54324077
   },
   {
      "name":"Wedgewood",
      "address1":"49 51 Leinster  Square",
      "rating":2.0,
      "lng":-0.1928,
      "lat":51.51365
   },
   {
      "name":"Kensington Suite",
      "address1":"128 130 Holland Road",
      "rating":3.0,
      "lng":-0.2121,
      "lat":51.5015
   }
]

下面是我如何运行脚本添加地图到视图

let centerLatlng = new mapboxgl.LngLat(gon.destination_city.lng,gon.destination_city.lat);
  mapboxgl.accessToken = token;
  let map = new mapboxgl.Map({
        container: 'map-canvas',
        style: 'mapbox://styles/mapbox/streets-v9',
        center:centerLatlng,
        zoom: 9
  });
  map.addControl(new mapboxgl.NavigationControl());
  });

但是我想知道,我如何需要添加标记到map(对于json中的每个元素,我需要获得lat和lon)来映射。因为医生说我需要这样的Json

var Geojson={type:'FeatureCollection',特性:[{type:'Feature',几何:{type:'Point',坐标:[-77.032, 38.913]},属性:{title:'Mapbox',描述:'Washington, D. C.' } }, { type:'Feature',几何:{类型:'点',坐标:[-122.414, 37.776]},属性:{title:'Mapbox',描述:'San Francisco, California' } }] };

我可以用我的json做记号笔吗

共有2个答案

益银龙
2023-03-14

还有其他方法可以更快地工作,比如通过层添加源代码,GeoJson必须是您从文档链接的格式:

map.on('load', function () {
                            // Add an image to use as a custom marker
                            map.loadImage(
                             'img',
                              function (error, image) {
                                if (error) throw error;
                                map.addImage('custom-marker', image);
                                // Add a GeoJSON source with 2 points
                                map.addSource('points',geoJson);
                    
                                map.addLayer(
                                {
                                    'id': 'points',
                                    'type': 'symbol',
                                    'source': 'points',
                                    'layout': 
                                    {
                                        'icon-image': 'custom-marker',
                                        // get the title name from the source's "title" property
                                        'text-field': ['get', 'title'],
                                        'text-font': ['Open Sans Semibold','Arial Unicode MS Bold'],
                                        'text-offset': [0, 1.25],
                                        'text-anchor': 'top'
                                    }
                                });
                        });

这个例子可以在https://docs.mapbox.com/mapbox-gl-js/example/geojson-markers/

连德水
2023-03-14

我找到了解决办法

很简单

就像这样

 for(var i = 0; i < json.length; i++) {
    var obj = json[i];
    let myLatlng = new mapboxgl.LngLat(obj.lng, obj.lat);
    let marker = new mapboxgl.Marker()
    .setLngLat(myLatlng)
    .setPopup(new mapboxgl.Popup({ offset: 25 })
    .setHTML('<h3>' + obj.name + '</h3><p>' + obj.address1 + '</p>'))
    .addTo(map);
  }

或者使用jQuery

$.each(json, function(i, item) {
    let myLatlng = new mapboxgl.LngLat(json[i].lng, json[i].lat);
    let marker = new mapboxgl.Marker()
    .setLngLat(myLatlng)
    .setPopup(new mapboxgl.Popup({ offset: 25 })
    .setHTML('<h3>' + json[i].name + '</h3><p>' + json[i].address1 + '</p>'))
    .addTo(map);
  });
 类似资料:
  • 我想将事件侦听器添加到所有标记中,我正在使用GoogleMapsforRailsGem。这是我的密码 我试图将事件侦听器添加到所有标记中,但它没有发出任何警报。如何在google maps for rails中添加事件侦听器 我有一个数据数组,每个数据包含id,lat,lng

  • 我有一个函数,以一个地名作为输入,并在谷歌地图上那个地方的lat和lng位置下降一个pin。它还使用lat和lng位置设置边界,将pin设置为Viewport。一切都很好,但旧的标记没有得到清除,而添加一个新的标记。我已经清除了标记数组,但它不起作用。这是我的代码

  • 我有点麻烦。我想显示两点之间的路线,并给两个点自定义标记。它起作用了。 null 帕尔·特雷贝斯

  • 如何将本地映像添加到IJulia笔记本?图像与IPYNB文件位于同一本地网络文件夹中。通过符号链接访问该文件夹。我尝试了相对和绝对文件名。 两者显示相同,即符号旁边带有“图像测试”的断开图像链接。 Jupyter信息: 朱莉娅信息:

  • 我使用以下代码向google地图添加标记并创建边界 我想做的是添加标记并以一种在具有固定高度的地图中都可见的方式进行缩放 所有图标是否会出现取决于我为填充添加的值。 如果我增加值,所有图标都会显示出来。否则其他的是隐藏的。 考虑到我的googleMap有固定的设置宽度,我如何为填充提供正确的值?

  • 我正在尝试添加位图到谷歌地图标记图标。 下面是我将图像添加到标记图标的代码。由于位图大小,应用程序正在崩溃 错误:java。lang.IllegalArgumentException:尺寸为4096x8192的纹理大于支持的最大尺寸4096x4096