集集 2023-09-21 11:15 采纳率: 0%
浏览 13

ArcGIS中根据不同的比例尺下,显示不同的要素怎么设置?

ArcGIS中根据不同的比例尺下,显示不同的要素怎么设置?类似高德地图,比如一开始默认显示的是路线,和政府,放大一级显示的内容更多,放到最大,显示的最详细。比例尺缩小,显示的内容就少,这种怎么实现效果?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-21 14:45
    关注

    【相关推荐】



    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7398582
    • 您还可以看一下 黄晓军老师的ArcGIS在国土空间·城乡规划中的实战应用课程中的 计算及重分类各类因子小节, 巩固相关知识点
    • 除此之外, 这篇博客: ArcGIS 地图的一些常用方法汇总中的 4.我直接贴上整个代码,附带注释。以供更好的理解,或整体使用。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      代码如下(示例):

          createMapView() {
            var map;
            var view;
            var that = this;
            var nnerId = "";
            loadModules([              //引入的这些注意顺序,有时候顺序不对,也会报错加载不出来的。
              "esri/config",
              "esri/Map",
              "esri/views/MapView",
              "esri/widgets/Sketch", //绘图小组件
              "esri/Graphic", //现实世界地理现象的矢量表示
              "esri/layers/GraphicsLayer", //绘制图层
              "esri/layers/GroupLayer",
              "esri/layers/MapImageLayer",
              "esri/layers/TileLayer",
              "esri/layers/FeatureLayer", //矢量图层
              "esri/renderers/HeatmapRenderer",
              "esri/widgets/LayerList",
              "esri/tasks/support/Query", //用于从图层或图层视图执行要素查询的参数
              "esri/tasks/QueryTask", //查询操作
              "esri/symbols/SimpleLineSymbol", //	创建线符号
              "esri/symbols/SimpleFillSymbol", //  创建面符号
              "esri/widgets/Slider",
              "esri/geometry/Point",
              "dojo/dom", //定义了核心 dojo DOM 构建 API(dom.byid)
              "dojo/on", //用于 DOM 节点和其他事件发射对象的通用事件处理程序模块,提供规范化的事件侦听和事件调度功能。
              "esri/Color", //创建新的颜色对象
            ]).then(
              ([
                config,
                Map,
                MapView,
                Sketch,
                Graphic,
                GraphicsLayer,
                GroupLayer,
                MapImageLayer,
                TileLayer,
                FeatureLayer,
                HeatmapRenderer,
                LayerList,
                Slider,
                QueryTask,
                Query,
                SimpleFillSymbol,
                SimpleLineSymbol,
                Point,
                dom,
                on,
                Color,
              ]) => {
                var layer = new TileLayer({
                  url: "",   //注释:地图分为电子地图,影像地图等多种。(看你需要的是省市地图,还是全国地图,把地图链接放在这里。默认加载的就是当前的地图图层。)
                });
                map = new Map();
                map.add(layer);
      
                // 初始化图层视角
                const view = new MapView({
                  container: "viewDiv",     //跟页面的id相对应
                  map: map,
                  popup: { defaultPopupTemplateEnabled: true }, //开启"FeatureLayer"特征图层属性弹窗
                });
      
                // 初始化地图视角和视图更新
                const location = new Point({
                  x: this.longitude,     //经纬度,视角
                  y: this.latitude,
                  spatialReference: 4490,
                });
                view.center = location;
                view.zoom = this.zooms;   //视角大小
                // view.zoom = 6;
      
                //创建多个不同类型的图层,并进行组合,以列表的方式显示
                const FWM = new FeatureLayer({
                  url: "",     //楼栋图层,点击可以获取当前的楼栋信息。(根据你自己需求,可用可不用)
                  title: "楼栋图层",
                  visible: false,
                  outFields: ["*"],
                });
                const yxLayer = new TileLayer({
                  url: "",  //对应的另一种地图。
                  title: "影像地图",
                  visible: false,
                });
      
                var citiesRenderer = {
                  type: "simple", // autocasts as new SimpleRenderer()
                  symbol: {
                    type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
                    size: 6,
                    color: "black",
                    outline: {
                      // autocasts as new SimpleLineSymbol()
                      width: 0.5,
                      color: "white",
                    },
                  },
                };
                // 视频监控图层
                var citiesLayer = new FeatureLayer({
                  id: "video",
                  title: "视频监控图层",
                  outFields: ["channo", "id"], //获取图层表字段,"*"=返回所有字段,字段名称=返回指定字段
                  url: "", //视频图层
                  renderer: citiesRenderer,
                });
                //地图的点击事件
                view.on("click", function (event) {
                  view.hitTest(event).then(function (response) {
                    if (response.results.length) {
                      var graphic = response.results.filter(function (result) {
                        return result.graphic.layer === citiesLayer;
                      })[0].graphic;
                      console.log(graphic.attributes.channo);  
                     //可以获取到当前点击的楼栋或视频编码信息。当然要进行视频播放的话,还得需要播放器等
                    } else {
                      console.log("选中图层内容,才能返回数据");
                    }
                  });
                });
      
                //组合图层
                const demographicGroupLayer = new GroupLayer({
                  title: "图层控制",
                  // visible: false,
                  visibilityMode: "independent", //exclusive=图层互斥,始终显示一个,inherited=图层叠加显示
                  layers: [yxLayer, FWM, citiesLayer],   //多个图层组合起来。
                  opacity: 1, //图层透明度
                });
                map.add(demographicGroupLayer); // 添加图层组到地图
      
                //创建图层列表小部件,并添加至右上角
                view.when(() => {
                  const layerList = new LayerList({
                    view: view,
                  });
                  view.ui.add(layerList, "top-left");
                });
                view.ui.move("zoom", "bottom-right");
                //添加绘图小部件
                const graphicsLayer = new GraphicsLayer();
                map.add(graphicsLayer);
                view.when(() => {
                  var sketch = new Sketch({
                    layer: graphicsLayer,
                    view: view,
                    //single:只能操作一次,再次操作需要选择操作
                    //continuous:连续操作
                    //update:操作完成后,将选择图形进行更新操作
                    creationMode: "update",
                  });
                  view.ui.add(sketch, "top-right");
      
                  sketch.on("create", function (event) {
                    if (event.state === "complete") {
                      console.log(event);
                      //使用graphic.geometry 去查询相交特征
                      //console.log(event.graphic.geometry);
                      //使用geometry(QueryTask)
                      querysTask(event.graphic.geometry);
                    }
                  });
                });
      
                //去掉地图右下角logo
                view.ui._removeComponents(["attribution"]);
                view.on("click", function (e) {
                  console.log(e);
                });
                //4.7空间查询(QuerysTask)
                function querysTask(geometry) {
                  // console.log(geometry);
                  var china =
                    "http://10.101.21.140:81/ServiceAdapter/MAP/FWM2000/f61896e203dbb6216c19a86c1364da20/0";
                  var qTask = new QueryTask({
                    url: china, //全国矢量
                  });
                  var query = new Query({
                    returnGeometry: true,
                    outFields: ["*"], //结果要素包含的属性字段
                  });
                  query.geometry = geometry;
                  query.where = "1=1";
                  //空间参考信息
                  query.outSpatialReference = map.spatialReference;
                  //查询的标准,此处代表和geometry相交的图形都要返回
                  query.spatialRelationship = Query.SPATIAL_REL_INTERSECTS;
                  // //执行空间查询
                  qTask.execute(query).then(function (results) {
                    showQueryResult(results.features);
                  });
                }
      
                //4.8执行查询
                function showQueryResult(queryResult) {
                  console.log("queryResult:", queryResult);  //用图标工具选中的地方全部的楼栋名称及经纬度
                  //创建线符号
                  var lineSymbol = new SimpleLineSymbol(
                    SimpleLineSymbol.STYLE_DASH,
                    new Color([0, 255, 0, 0.5])
                  ); //rgba:0.5是设置的透明度
                  //创建面符号
                  var fill = new SimpleFillSymbol(
                    SimpleFillSymbol.STYLE_SOLID,
                    new Color([0, 255, 0])
                  );
                  if (queryResult.length == 0) {
                    dom.byId("divShowResult").innerHTML = "查询结果为空!";
                    return;
                  }
                  var htmls = "";
                  if (queryResult.length >= 1) {
                    htmls = htmls + '<table style="text-align: center;width: 100%;">'; //创建一个表,使用了转义字符
                    htmls = htmls + "<tr><th>楼栋信息</th></tr>";
                    for (var i = 0; i < queryResult.length; i++) {
                      htmls = htmls + "<td>" + queryResult[i].attributes.MC + "</td>";
                      htmls = htmls + "</tr>";
                    }
                    htmls = htmls + "</table>";
                    dom.byId("tasblea").innerHTML = htmls;   //这是我自己写的进行了一个循环,展示我所选中的所有楼栋名称,在页面中显示出来。
                  }
                }
                //下面的两个方法,一个是经纬度,一个是圆点样式的设置。用来在地图中显示当前定位的地方。
                const polygon = {
                  type: "point",
                  longitude: this.longitude,
                  latitude: this.latitude,
                };
                // console.log(this.longitude);
                const simpleFillSymbol = {
                  type: "simple-marker",
                  color: [116, 15, 224], // Orange
                  outline: {
                    color: [255, 255, 255], // White
                    width: 2,
                  },
                };
                const pointGraphic = new Graphic({
                  geometry: polygon,
                  symbol: simpleFillSymbol,
                });
      
                graphicsLayer.add(pointGraphic);
      
      		 //热力图
                var heatmapRenderer = new HeatmapRenderer({
                  //设置渲染器
                  colorStops: [
                    { ratio: -0.1, color: "rgba(0, 255, 0, 0)" },
                    { ratio: 0.5, color: "rgba(255, 140, 0, 1)" },
                    { ratio: 0.9, color: "rgba(255, 0,   0, 1)" },
                  ],
                  blurRadius: 6, //确定一个点周围的影响区域
                  //maxPixelIntensity: 20,
                  //minPixelIntensity: 20
                });
      
                var heatDataUrl = ``;  //热力图的经纬度接口。
                $.getJSON(heatDataUrl, {}, function (data, textStatus, jqXHR) {
                  //读取数据,设置点数据集
                  var features = [];
                  for (var i = 0; i < data.data.length; i++) {
                    var x = data.data[i].lng;
                    var y = data.data[i].lat;
                    features.push({
                      geometry: {
                        type: "point",
                        x: x,
                        y: y,
                      },
                      attributes: {
                        ObjectID: i, //重要!!!
                      },
                    });
                  }
                  var featureLayer = new FeatureLayer({
                    source: features, //点数据集
                    title: "热力图",
                    objectIdField: "ObjectID", //重要!!!
                    renderer: heatmapRenderer, //渲染器
                  });
                  map.add(featureLayer);
                });
              }
            );
          },
      


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月21日

悬赏问题

  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥15 QT6颜色选择对话框显示不完整
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥15 DS18B20内部ADC模数转换器