2014-02-20 4 views
2

누구도 ArcMap Rest EndPoint에서 데이터를 가져올 수 없습니다. 나는 아래의 jQuery를 실행하고 있지만 restend 포인트arcGis rest endpoint에 대한 쿼리

내 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 Services 디렉토리를 살펴 보았습니다. 출력 필드에 *를 입력하고 텍스트 상자에 OBJECTID> = 0을 입력하면 224 개의 레코드가 반환됩니다. 나머지 버전은 10.21입니다.

희망 하시겠습니까?

답변

3

쿼리 매개 변수에서 정의 및 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

+0

답장을 보내 주셔서 감사합니다. '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);에 넣으면 작동이 멈 춥니 다. 그러나 의사가 당연한 말인데, 범위를 사용하여 필터를 적용하는 경우는 – Easty

+0

입니다. 범위에서 esri.geometry.webMercatorToGeographic을 할 필요가 없다고 생각합니다. try queryParams.geometry = myMap.extent; . 또는 쿼리의 spatialReference를 4326으로 ​​설정하여 쿼리가 지리적 좌표에서 선택을 수행하도록하십시오. – mchepurnoy

+0

아아, 그게 내가 시도하지 않은 유일한 것입니다! 고마워요. 재미있는'queryParams.geometry = esri.geometry.webMercatorToGeographic (myMap.extent);'는 교육용 매뉴얼에서 직접 나온 것입니다. 그게 문제 일 수 있다고 생각하지 마라. – Easty