REST एंडपॉइंट्स को कैसे नेविगेट करें और फ़ील्ड जानकारी को प्रोग्रामेटिक रूप से पुनर्प्राप्त करें


9

मैं एक आर्कगिस सर्वर जावास्क्रिप्ट एपीआई मैप में डायनेमिक मैप सर्विस जोड़ रहा हूं, और मुझे प्रत्येक घटक लेयर और उसके फील्ड को पकड़ना होगा, इसलिए मैं एक क्वेरी चला सकता हूं।

Http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/HomelandSecurity/operations/MapServer पर नमूना ArcGIS सर्वर सेवा निर्देशिका देखें

यदि आप इस URL को किसी ब्राउज़र में खोलते हैं तो आप उपलब्ध परतों (0,1,2) और प्रत्येक परत के खेतों की सूची देख सकते हैं ।

मैं जावास्क्रिप्ट फ़ंक्शन के भीतर प्रोग्राम की फ़ील्ड्स की सूची कैसे प्राप्त कर सकता हूं? नीचे दिए गए कोड स्निपेट से पता चलता है कि परत के समापन बिंदु को कैसे पुनः प्राप्त किया जाए, लेकिन मैं यह नहीं देख सकता कि खेतों तक कैसे पहुँचा जा सकता है।

(एक विकल्प परतों को फ़ीचर परत के रूप में जोड़ना है, लेकिन यदि संभव हो तो मैं इससे बचना चाहूंगा)।

var url = "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/HomelandSecurity/operations/MapServer/";
var dynLayer = new esri.layers.ArcGISDynamicMapServiceLayer(url);
map.addLayer(dynLayer);

dojo.connect(dynLayer, "onLoad", function() {
   var infos = dynLayer.layerInfos;
   for (var i = 0; i <= infos.length - 1; i++) {
       var layerId = infos[i].id;
       var restEndPoint = url + layerId;
       //restEndPoint is the layer's URL - how can I retrieve its fields?
   }
});

धन्यवाद, स्टीव ( आरसीजीआईएस सर्वर मंच पर पोस्ट-पोस्ट )

जवाबों:


6

खेतों के बारे में जानकारी प्राप्त करने के लिए प्रत्येक परत के REST समापन बिंदु को हिट करने के लिए esri.request () का उपयोग करें। यहाँ एक सरल उदाहरण दिया गया है:

<html>
  <head>
    <script type="text/javascript">var djConfig = {parseOnLoad: true};</script>
    <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.4"></script>
    <script type="text/javascript">
      dojo.require("esri.map");
      // var service_url = 'http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hurricanes/NOAA_Tracks_1851_2007/MapServer/layers';
      var service_url = 'http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/MapServer/layers';

      function init() {
        esri.request({
          url: service_url,
          content: { f: 'json' },
          callbackParamName: 'callback',
          load: processServiceInfo,
          error: errorHandler
        });
      }
      // Runs once
      function processServiceInfo(info) {
        console.log('svc info: ', info);
        dojo.byId('info').innerHTML = '';
        dojo.forEach(info.layers, function(lyr) {

          // Add a new div for each Layer
          var lyr_div = dojo.create('div', { 
            id: 'layer_' + lyr.id,
            innerHTML: '<strong>Layer: ' + lyr.name + '</strong><br />'
          }, dojo.byId('info'));

          dojo.forEach(lyr.fields, function(field) {
            lyr_div.innerHTML += 'Name: ' + field.name + '; Alias: ' + field.alias + '<br />';
          });
        });
      }

      function errorHandler(err) {
        console.log('error: ', err);
      }

      dojo.ready(init);
    </script>
  </head>
  <body>
    <div id="info">field names and aliases will show up here.</div>
  </body>
</html>

यह कोड एपीआई के v2.0 का उपयोग करता है, लेकिन यही चीज 2.3 या 2.4 पर काम करेगी। मैं मूल रूप से एस्री जेएस एपीआई फोरम में तैनात हूं ।

संपादित करें: किसी सेवा में सभी परतों को संभालने के लिए अद्यतन किया गया। कोड अब एपीआई के संस्करण 2.4 का भी उपयोग करता है।


+1 अच्छा लग रहा है। चूँकि उपयोगकर्ता के पास 3 परतें हैं, लेकिन हो सकता है कि init कॉल करने पर प्रत्येक परत के लिए FieldsInit फ़ंक्शन अधिक उपयोगी हो।
Kirk Kendkendall

esri.request जाने का रास्ता है, लेकिन व्यक्तिगत परतों को क्वेरी करने के बजाय, बस http: //..../MapServer/layers? f = json को URL के रूप में उपयोग करके उन सभी को एक साथ क्वेरी करें।
सास इवेटिक

आप सभी के बीच, मुझे लगता है कि हमारे पास एक शानदार उत्तर है :) @ डेरेक आप सबा के सुझाव के अनुसार सभी परतों को संभालने के लिए कोड को संपादित कर सकते हैं, और मैं इसे स्वीकृत के रूप में चिह्नित करूंगा? सभी को धन्यवाद
स्टीफन लीड

वहाँ फिर जाओ स्टीव ... एक नक्शा सेवा में सभी परतों के लिए जानकारी प्रदान करने के लिए मेरे कोड नमूने को अद्यतन किया।
डेरेक स्विंगले

धन्यवाद। मैं JSON परिणाम को एक वैश्विक चर में लोड कर रहा हूं, जिसे मैं किसी भी समय उपयोग कर सकता हूं, नक्शे में उपलब्ध परतों और क्षेत्रों को निर्धारित करने के लिए। प्रतिभाशाली।
स्टीफन लीड

0

मेरे पास यहां छड़ी का गलत अंत हो सकता है, लेकिन क्या आप सवाल में परत पर एक क्वेरी नहीं करते हैं और परिणाम को परिणाम के रूप में वापस प्राप्त करते हैं? यदि आप इसे json में पूछते हैं, तो आप परिणामों को पार्स कर सकते हैं?

तो इसके लिए:

http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/1/query?where=STATE_NAME%3D%27Florida%27&f=json

वापसी है:

{ "DisplayFieldName": "STATE_NAME", "fieldAliases": { "STATE_NAME": "STATE_NAME"}, "geometryType": "esriGeometryPolygon", "spatialReference": { "wkid": 4326}, "फील्ड": [{ " नाम ":" STATE_NAME "," type ":" esriFieldTypeString "," उर्फ ​​":" STATE_NAME "," लंबाई ": 25}]," सुविधाओं ": [{" गुण ": {" STATE_NAME ":" फ्लोरिडा "} , "ज्योमेट्री": {"रिंग्स": [[- - 66०.2५६६२४०३०6५६,२39.55५१ ९ ४०३ ९ ५19०२६५], ... [-80.5878197219821,24.95637664909079556], [- 80.249453677873134,25.3549376646643643323326643]

(मैंने इसे पढ़ने में आसान बनाने के लिए अधिकांश ज्यामिति को हटा दिया है)


आप परत 1 को कैसे जानते हैं, और STATE_NAME नामक एक क्षेत्र था? यही कारण है कि मैं मक्खी पर काम करने की कोशिश कर रहा हूं (यानी, मुझे रन-टाइम में किसी भी बाकी समापन बिंदु के लिए काम करने की आवश्यकता है, न कि एक जिसे मैं पहले से जानता हूं)। साभार
स्टीफन लीड

सबसे अच्छा जवाब नक्शा सेवा में परतें गिनना होगा, और एक दूसरे मानचित्र सेवा, और उनके माध्यम से डेटा का अनुरोध करना होगा। एक क्वेरी बस एक अशक्त हो सकती है, इसलिए आप सब कुछ वापस लाते हैं। फिर आप डेटा को सूचीबद्ध करने वाली प्रतिक्रिया के माध्यम से लूप कर सकते हैं।
बालों वाली

इसलिए ऊपर दिए गए मेरे उदाहरण में, मैंने प्रत्येक restEndPoint के आधार पर एक QueryTask सेट किया, और एक क्वेरी का निर्माण किया जो ज्यामिति को वापस नहीं लाती थी - अच्छा विचार। मैं इसे एक कोशिश करूँगा - धन्यवाद!
स्टीफन लीड

मैं इसे कैसे
बालों वाली

इसे आज़माएँ: URL / yourLAYERNAME / MapServer / परतों को यूआरएल करने के लिए Url? F = json - इसमें आपकी सभी परतों और उनके क्षेत्रों या URL / yourLAYERNAME / MapServer / /? F = json का एक जोंस चित्रण लौटाना चाहिए जो आपको उस परत की संख्या का संकेत देता है
बालों वाली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.