mapbox gl 上的 ArcGis 图层

Posted

技术标签:

【中文标题】mapbox gl 上的 ArcGis 图层【英文标题】:ArcGis layers on mapbox gl 【发布时间】:2018-04-20 11:06:00 【问题描述】:

我正在尝试从 ArcGis 上的 api 添加一个图层: https://maps2.dcgis.dc.gov/dcgis/rest/services/DCGIS_DATA/Facility_and_Structure/MapServer/1

在传单中可以使用:

  L.esri.featureLayer(
  url:"https://maps2.dcgis.dc.gov/dcgis/rest/services/DCGIS_DATA/Facility_and_Structure/MapServer/1",
    style: function () 
    return  color: "#70ca49", weight: 2 ;
    
    ).addTo(map);

有没有办法在 mapboxgl 上做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用leaflet-mapbox-gl.js 来集成leaflet 和mapbox。从 mapbox 获取令牌并将其添加到下面的示例中以使其工作。

参考:https://github.com/mapbox/mapbox-gl-leaflet

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css"/>
    <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
    <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v1.5.0/mapbox-gl.css' rel='stylesheet' />
    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v1.5.0/mapbox-gl.js'></script>
    <script src="https://unpkg.com/mapbox-gl-leaflet/leaflet-mapbox-gl.js"></script>
    <script src="https://unpkg.com/esri-leaflet/dist/esri-leaflet.js"></script>
    <style>
      html, body, #map 
        margin:0; padding:0;  width : 100%; height : 100%;
      
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>
      var token = "";//add token before running this example

      const INITIAL_VIEW_STATE = 
          latitude: 45.528,
          longitude: -122.680,
          zoom: 13
        ;

      var map = L.map('map').setView([45.528, -122.680], 13);
      L.esri.basemapLayer("NationalGeographic").addTo(map);
      var parks = L.esri.featureLayer(
        url: "https://services.arcgis.com/rOo16HdIMeOBI4Mb/arcgis/rest/services/Portland_Parks/FeatureServer/0",
        style: function () 
          return  color: "#70ca49", weight: 2 ;
        
      ).addTo(map);

      var gl = L.mapboxGL(
            accessToken: token,
            style: 'mapbox://styles/mapbox/dark-v10'
        ).addTo(map);

      //To add anything on mapbox, first access the mapbox using getMapboxMap()
      gl.getMapboxMap().on('load', () => 
          //To load any layer on mapbox
          //gl.getMapboxMap().addLayer();
      );
      var popupTemplate = "<h3>NAME</h3>ACRES Acres<br><small>Property ID: PROPERTYID<small>";

      parks.bindPopup(function(e)
        return L.Util.template(popupTemplate, e.feature.properties)
      );
    </script>
  </body>
</html>

【讨论】:

【参考方案2】:

嗨Jorge Monroy - Mapbox GL JS 期望数据源为such。如果您想从 ArcGIS REST 服务加载建筑物覆盖区,最好的办法是将它们加载为 geojson。

您似乎正在从 ArcServer 10.31 发布服务。在这种情况下,我加载 ArcGIS REST 服务的方式是通过AGOL 公开它们,如那里所述。如果你有那个选项,那似乎是最简单的。否则,还有其他(解决方法)[https://gis.stackexchange.com/questions/13029/converting-arcgis-server-json-to-geojson] 我没有经验。

以华盛顿特区为例,如果您导航到:http://opendata.dc.gov/datasets/building-footprints,然后单击 API,您可以将链接复制到 geojson 服务。

然后您可以通过此处显示的 geojson 源的data 属性加载到 MapboxGL JS。

【讨论】:

以上是关于mapbox gl 上的 ArcGis 图层的主要内容,如果未能解决你的问题,请参考以下文章

Mapbox-GL setStyle 移除图层

Mapbox GL Js:添加和删除 GeoJSON 源和图层

在 mapbox gl js 中删除源不会删除其图层

Mapbox GL JS:样式未完成加载

删除 Mapbox GL JS 上的所有标签?

Mapbox GL JS:缩放到过滤的多边形?