【问题标题】:query on arcGis rest endpoint查询 arcGis 休息端点
【发布时间】:2014-03-21 13:32:13
【问题描述】:

谁能帮我从 ArcMap Rest EndPoint 中获取一些数据。我正在运行下面的 jquery,但它没有从重新结束点返回任何数据

我的 Jquery:

        dojo.require("esri.map");
dojo.require("esri.dijit.OverviewMap");
dojo.require("dijit.form.CheckBox");
dojo.require("esri.layers.FeatureLayer");
dojo.require("dojox.grid.DataGrid");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("esri.tasks.query");
dojo.require("esri.dijit.Measurement");
dojo.require("esri.dijit.Scalebar");

var myMap;

function init() {

    var initialExtent = new esri.geometry.Extent({"xmin":455248.7328447895,"ymin":404516.307641385,"xmax":532048.7328447895,"ymax":484516.307641385,"spatialReference":{"wkid":27700}});
    myMap = new esri.Map("mainMap", {extent:initialExtent});

    // myMap.infoWindow.resize(210,95);
    var baseLayer = new esri.layers.ArcGISTiledMapServiceLayer("http://g*****************.uk/ArcGIS/rest/services/ProxyMaps/OSBaseMap/MapServer");
    myMap.addLayer(baseLayer);

    var imageParameters = new esri.layers.ImageParameters();
    imageParameters.layerIds = [5];
    imageParameters.layerOption = esri.layers.ImageParameters.LAYER_OPTION_SHOW;

    layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://*************/arcgis/rest/services/New_ForwardPlanning/MapServer", {"imageParameters":imageParameters});

    myMap.addLayer(layer);

    var featureLayer1 = new esri.layers.FeatureLayer("http://************/arcgis/rest/services/New_ForwardPlanning/MapServer/0",{
        mode: esri.layers.FeatureLayer.MODE_ONDEMAND,
        id: "sd_neighborhoods",
        outFields: ["*"],
        opacity:0.6
    }); 

    dojo.connect(myMap, 'onLoad', function(myMap) {

        myMap.addLayer(featureLayer1);
        initGrid();

    });


   }


   function initGrid() {
    dojo.connect(myMap, 'onExtentChange', function() {
        console.log("myMap zoom = " + dojo.toJson(myMap.getZoom()));
        console.log("myMap extent = " + dojo.toJson(myMap.extent.toJson()));
        updateGrid(myMap.getLayer("sd_neighborhoods"));
    });
}

function updateGrid(fLayer) {
    var queryParams = new esri.tasks.Query();
    queryParams.geometry = esri.geometry.webMercatorToGeographic(myMap.extent);
    queryParams.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
    fLayer.queryFeatures(queryParams, queryTask_callback);
}

function queryTask_callback(fSet) {
    var myAttribs = {};
    var myItems = [];
    //begin for-loop to calculate myAtttribs objects and populate myItems
    for (var i=0, il=fSet.features.length; i<il; i++) {
        myAttribs = {"NAME":fSet.features[i].attributes.NAME, "ownPct":fSet.features[i].attributes.URL};
        myItems.push(myAttribs);
    }


    //end for-loop
    var myData = { items: myItems };
    var myStore = new dojo.data.ItemFileReadStore({ data: myData });
    myGrid.setStore(myStore);
    myGrid.resize();


}

      dojo.ready(init);

我在var myAttribs = {}; 上设置了一个断点,并查看了queryTask_callback 函数中的fSet 对象。这将显示字段名称,因此它必须连接到 EndPoint。但是当我查看特征时,数组是空的。

所以我的注意力转移到了查看 ArcGIS REST 服务目录单击页面底部的查询链接。我在输出字段中输入 *,在 where 文本框中输入 OBJECTID >=0,它返回 224 条记录。其余版本为 10.21。

希望你能帮忙

【问题讨论】:

    标签: jquery rest esri arcmap arcgis-js-api


    【解决方案1】:

    您需要在查询参数中设置 where 定义和 outFields。

    function updateGrid(fLayer) {
    var queryParams = new esri.tasks.Query();
    queryParams.geometry = esri.geometry.webMercatorToGeographic(myMap.extent);
    //your specific query here
    queryParams.where = "1=1"; 
    queryParams.outFields = "*";
    
    queryParams.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
    fLayer.queryFeatures(queryParams, queryTask_callback);
    

    您可以查看文档以获取更多选项。 https://developers.arcgis.com/javascript/jsapi/query-amd.html

    【讨论】:

    • 感谢您的回复。 function updateGrid(fLayer) { var queryParams = new esri.tasks.Query(); //queryParams.geometry = esri.geometry.webMercatorToGeographic(myMap.extent); queryParams.where = "1=1"; queryParams.outFields = "*"; //queryParams.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS; fLayer.queryFeatures(queryParams, queryTask_callback); } 此代码根据您的建议工作,但是当我输入 queryParams.geometry = esri.geometry.webMercatorToGeographic(myMap.extent); 时它停止工作。但根据我想使用范围过滤的文档
    • 我认为您不需要在范围上执行 esri.geometry.webMercatorToGeographic。尝试 queryParams.geometry = myMap.extent; .或者尝试将您的查询的 spatialReference 设置为 4326,以告诉您的查询在地理坐标中执行选择。
    • 啊,这是我唯一没有尝试过的事情!谢谢,现在已经奏效了。有趣的queryParams.geometry = esri.geometry.webMercatorToGeographic(myMap.extent); 直接出自培训手册。从没想过这可能是问题
    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多