OpenLayers实例:打开ArcGIS Rest服务

由于OpenLayers的例子实在太少并且没有注释,便在此整理工作中遇到的问题。

OpenLayers打开ArcGIS Rest 图层服务

This example loads new features from ArcGIS REST Feature Service.

html部分

<!doctype html>
<html lang="en">
  <head>
    <title>ArcGIS REST Feature Service</title>
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script src="../build/ol.js"></script>
    <link rel="stylesheet" href="../css/ol.css" type="text/css">
    <style>
      .map {
        height: 600px;
        width: 100%;
      }
    </style>
  </head>

  <body>
    <h2>ArcGIS REST Feature Service</h2>
    <div id="map" class="map"></div>
  </body>
  <script src="main.js"></script>
 </html>

javascript部分

      var serviceUrl = 'Your ArcGIS Rest Feature Server url';
      //注意此处layer的值,取决于你想添加的图层
      var layer = '0';
      var esrijsonFormat = new ol.format.EsriJSON();
      var vectorSource = new ol.source.Vector({
          loader: function (extent, resolution, projection) {
          var url =
              serviceUrl +
              layer +
              '/query/?f=json&' +
              'returnGeometry=true&spatialRel=esriSpatialRelIntersects&geometry=' +
              encodeURIComponent(
                '{"xmin":' +
                  extent[0] +
                  ',"ymin":' +
                  extent[1] +
                  ',"xmax":' +
                  extent[2] +
                  ',"ymax":' +
                  extent[3] +
                  ',"spatialReference":{"wkid":102100}}'
              ) +
              '&geometryType=esriGeometryEnvelope&inSR=102100&outFields=*' +
              '&outSR=102100';
            $.ajax({
              url: url,
              dataType: 'jsonp',
              success: function (response) {
                if (response.error) {
                  alert(
                    response.error.message + '\n' + response.error.details.join('\n')
                  );
                } else {
                  // dataProjection will be read from document
                  var features = esrijsonFormat.readFeatures(response, {
                    featureProjection: projection,
                  });
                  if (features.length > 0) {
                    vectorSource.addFeatures(features);
                  }
                }
              },
            });
          },
          strategy: ol.loadingstrategy.tile(
            ol.tilegrid.createXYZ({
              tileSize: 512,
            })
          ),
        });
      //添加矢量图层
      var vector = new ol.layer.Vector({
        source: vectorSource,
      });
      //添加栅格底图
      var raster = new ol.layer.Tile({
        source: new ol.source.XYZ({
          attributions:
            'Tiles © <a href="https://services.arcgisonline.com/ArcGIS/' +
            'rest/services/World_Topo_Map/MapServer">ArcGIS</a>',
          url:
            'https://server.arcgisonline.com/ArcGIS/rest/services/' +
            'World_Topo_Map/MapServer/tile/{z}/{y}/{x}',
        }),
      });

      var map = new ol.Map({
        layers: [raster, vector],
        target: document.getElementById('map'),
        view: new ol.View({
          center: ol.proj.fromLonLat([120.170205, 35.9418055]),
          zoom: 13,
        }),
      });

运行效果

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值