• ArcGIS API for JavaScript实现要素服务query接口的功能


    需求:

    使用ArcGIS API for JavaScript实现要素服务query接口的功能,以get请求和post请求两种方式进行实现。

    动态地图服务也可以参考类似的思路进行查询

    效果图:

     要素服务地址:

    https://ncportal.geoscene.cn/server/rest/services/Hosted/station1/FeatureServer/0

    查询区域:

    使用geometry(polygon)作为查询的范围,如下图:rings的值

    {
      "displayFieldName" : "",
      "fieldAliases" : {
        "FID" : "FID",
        "Id" : "Id"
      },
      "geometryType" : "esriGeometryPolygon",
      "spatialReference" : {
        "wkid" : 4326,
        "latestWkid" : 4326
      },
      "fields" : [
        {
          "name" : "FID",
          "type" : "esriFieldTypeOID",
          "alias" : "FID"
        },
        {
          "name" : "Id",
          "type" : "esriFieldTypeInteger",
          "alias" : "Id"
        }
      ],
      "features" : [
        {
          "attributes" : {
            "FID" : 0,
            "Id" : 0
          },
          "geometry" : {
            "rings" : [
              [
                [
                  107.11666700000018,
                  29.166667000000132
                ],
                [
                  114.50000000000011,
                  29.60000000000008
                ],
                [
                  114.35000000000014,
                  25.400000000000148
                ],
                [
                  107.18333300000006,
                  24.966667000000143
                ],
                [
                  107.11666700000018,
                  29.166667000000132
                ]
              ]
            ]
          }

        }
      ]
    }

    1、要素服务rest界面实现

    可以以get请求来进行查询,也可以post请求进行查询,查询出有158条要素记录符号要求

      

     2、get请求实现

    1. <html>
    2. <head>
    3. <meta charset="utf-8" />
    4. <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
    5. <title>
    6. 查询要素数据
    7. title>
    8. <link rel="stylesheet" href="https://js.arcgis.com/4.23/esri/themes/light/main.css" />
    9. <script src="https://js.arcgis.com/4.23/">script>
    10. <style>
    11. html,
    12. body,
    13. #viewDiv {
    14. padding: 0;
    15. margin: 0;
    16. height: 100%;
    17. width: 100%;
    18. }
    19. style>
    20. <script>
    21. require(["esri/Map", "esri/views/MapView",
    22. "esri/rest/query",
    23. "esri/layers/TileLayer",
    24. "esri/rest/support/Query",
    25. "esri/Graphic",], (
    26. Map,
    27. MapView,
    28. query,
    29. TileLayer,
    30. Query,
    31. Graphic
    32. ) => {
    33. // url to the layer of interest to query
    34. let queryUrl = "https://ncportal.geoscene.cn/server/rest/services/Hosted/station1/FeatureServer/0";
    35. //设置查询参数
    36. let queryObject = new Query();
    37. queryObject.where = "1=1";
    38. queryObject.outSpatialReference = { wkid: 4326 };
    39. queryObject.outFields = '*';
    40. queryObject.spatialRel = 'esriSpatialRelIntersects';
    41. queryObject.geometryType = 'esriGeometryPolygon';
    42. queryObject.inSR = 4326;
    43. queryObject.outSR = 4326;
    44. queryObject.returnGeometry = true;
    45. queryObject.geometry = {
    46. type: "polygon",
    47. rings: [
    48. [
    49. [
    50. 107.11666700000018,
    51. 29.166667000000132
    52. ],
    53. [
    54. 114.50000000000011,
    55. 29.60000000000008
    56. ],
    57. [
    58. 114.35000000000014,
    59. 25.400000000000148
    60. ],
    61. [
    62. 107.18333300000006,
    63. 24.966667000000143
    64. ],
    65. [
    66. 107.11666700000018,
    67. 29.166667000000132
    68. ]
    69. ]
    70. ]
    71. };
    72. const layer = new TileLayer({
    73. url: "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer",
    74. format: "jpgpng" // server exports in either jpg or png format
    75. });
    76. /**************************
    77. * Add image layer to map
    78. *************************/
    79. const map = new Map({
    80. basemap: {
    81. baseLayers: [layer],
    82. }
    83. });
    84. const view = new MapView({
    85. container: "viewDiv",
    86. map: map,
    87. center: [110.884, 27.285],
    88. zoom: 4
    89. });
    90. query.executeQueryPBF(queryUrl, queryObject).then(function (results) {
    91. // results.graphics contains the graphics returned from query
    92. console.log(results)
    93. results.features.forEach(function (item) {
    94. //实例化Graphic
    95. var feature = new Graphic({
    96. geometry: item.geometry,
    97. attributes: item.attributes,
    98. symbol: {
    99. type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
    100. style: "square",
    101. color: "blue",
    102. size: "8px", // pixels
    103. outline: { // autocasts as new SimpleLineSymbol()
    104. color: [255, 255, 0],
    105. width: 3 // points
    106. }
    107. },
    108. popupTemplate: {
    109. title: "{name}",
    110. content: "具体信息:{type} {stationid}"
    111. }
    112. });
    113. view.graphics.add(feature);
    114. });
    115. view.goTo({
    116. target: view.graphics
    117. });
    118. })
    119. });
    120. script>
    121. head>
    122. <body>
    123. <div id="viewDiv">div>
    124. body>
    125. html>

    3、post请求实现

    1. <html>
    2. <head>
    3. <meta charset="utf-8" />
    4. <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
    5. <title>
    6. Intro to ImageryLayer | Sample | ArcGIS API for JavaScript 4.23
    7. title>
    8. <script src="https://code.jquery.com/jquery-3.0.0.min.js">script>
    9. <link rel="stylesheet" href="https://js.arcgis.com/4.23/esri/themes/light/main.css" />
    10. <script src="https://js.arcgis.com/4.23/">script>
    11. <style>
    12. html,
    13. body,
    14. #viewDiv {
    15. padding: 0;
    16. margin: 0;
    17. height: 100%;
    18. width: 100%;
    19. }
    20. style>
    21. <script>
    22. require(["esri/Map", "esri/views/MapView",
    23. "esri/layers/TileLayer",
    24. "esri/Graphic",], (
    25. Map,
    26. MapView,
    27. TileLayer,
    28. Graphic
    29. ) => {
    30. const layer = new TileLayer({
    31. url: "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer",
    32. format: "jpgpng" // server exports in either jpg or png format
    33. });
    34. /**************************
    35. * Add image layer to map
    36. *************************/
    37. const map = new Map({
    38. basemap: {
    39. baseLayers: [layer],
    40. }
    41. // basemap:"streets-vector"
    42. });
    43. const view = new MapView({
    44. container: "viewDiv",
    45. map: map,
    46. center: [110.884, 27.285],
    47. zoom: 4
    48. });
    49. let url = 'https://ncportal.geoscene.cn/server/rest/services/Hosted/station1/FeatureServer/0/query'
    50. let data = {};
    51. data.where = "1=1";
    52. data.geometry = "{'rings': [[[107.11666700000018,29.166667000000132],[114.50000000000011,29.60000000000008],[114.35000000000014,25.400000000000148],[107.18333300000006,24.966667000000143],[107.11666700000018,29.166667000000132]]]}";
    53. data.geometryType = "esriGeometryPolygon";
    54. data.spatialRel = "esriSpatialRelIntersects";
    55. data.units = "esriSRUnit_Meter";
    56. data.returnGeometry = true;
    57. data.f = "pjson";
    58. data.outFields = "*";
    59. console.log(data);
    60. $(document).ready(function () {
    61. $.ajax({
    62. type: 'post',
    63. url: url,
    64. async: false,
    65. dataType: 'jsonp',
    66. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    67. data: data,
    68. success: function (resData) {
    69. //alert("请求数据成功");
    70. resData.features.forEach(function (item) {
    71. let point = {
    72. type: "point", // autocasts as new Point()
    73. longitude: item.geometry.x,
    74. latitude: item.geometry.y
    75. };
    76. //实例化Graphic
    77. var feature = new Graphic({
    78. geometry: point,
    79. attributes: item.attributes,
    80. symbol: {
    81. type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
    82. style: "square",
    83. color: "blue",
    84. size: "8px", // pixels
    85. outline: { // autocasts as new SimpleLineSymbol()
    86. color: [255, 255, 0],
    87. width: 3 // points
    88. }
    89. },
    90. popupTemplate: {
    91. title: "{name}",
    92. content: "具体信息:{type} {stationid}"
    93. }
    94. });
    95. view.graphics.add(feature);
    96. });
    97. view.goTo({
    98. target: view.graphics
    99. });
    100. },
    101. error: function (jqXHR, textStatus, errorThrown) {
    102. console.log("连接数据的时候出现了:" + textStatus);
    103. }
    104. })
    105. })
    106. });
    107. script>
    108. head>
    109. <body>
    110. <div id="viewDiv">div>
    111. body>
    112. html>

    参考资料:

    ArcGIS Server 动态地图服务Query 请求问题小结_孙同学的一个笔记本的博客-CSDN博客_arcgis query

  • 相关阅读:
    nginx代理后如何获取用户真实访问的ip,以及访问耗时接口是nginx报504问题处理
    Delphi 编程实现拖动排序并输出到文档
    shiro会话管理
    WorkPlus一站式解决方案,助力企业构建统一门户系统
    二分查找:74搜索二维矩阵
    selenium自动化测试神器
    鲲鹏devkit开发套件——编译调试工具介绍
    到github上去学别人怎么写代码
    ESP8266-Arduino编程实例-ADXL345三轴加速计驱动
    HarmonyOS 鸿蒙DevEco:导入无法运行提示Sync failed
  • 原文地址:https://blog.csdn.net/gislaozhang/article/details/126447786