फ़ीचर लेयर के सेट के साथ फ़ीचरटेबल को कैसे सिंक करें?


9

आर्कगिस सर्वर जेएस एपीआई में एक नया फ़ीचरटेबल क्लास होता है, जो फ़ीचरलेयर के अनुरूप विशेषता तालिका दिखाता है। एक विकल्प तुल्यकालन है जो:

मानचित्र और सुविधा तालिका के बीच सहभागिता को सक्षम करता है। इस गुण को सही पर सेट करना तालिका में पंक्ति पर क्लिक करके मानचित्र पर एक सुविधा का चयन करने की अनुमति देता है, और मानचित्र पर एक सुविधा पर क्लिक करके तालिका की पंक्ति का चयन करना

हालांकि, यह परत के खिलाफ प्रोग्राम के अनुसार किए गए एक चयन सेट का सम्मान नहीं करता है ।

Https://developers.arcgis.com/javascript/3/sandbox/sandbox.html?sample=featuretable पर नमूना लेते हुए , यदि मैं फ़ीचर लेयर पर चयन करता हूँ तो यह फीचरटेबल में परिलक्षित नहीं होता है

// Create the feature layer
myFeatureLayer = new FeatureLayer("https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Warren_College_Trees/FeatureServer/0", {
  mode: FeatureLayer.MODE_SELECTION,
  visible: true,
  outFields: ["*"],
  id: "fLayer"
});
var myQuery = new Query();
myQuery.where = "Spp_Code ='SABA'";
myFeatureLayer.selectFeatures(myQuery,FeatureLayer.SELECTION_NEW)

यह चयन को सही ढंग से फीचर लेयर पर लागू करता है (ध्यान दें कि मैप में केवल एक बिंदु होता है), लेकिन फीचर टेबल पर नहीं (यह 0 चयनित सभी 1146 बिंदुओं को सूचीबद्ध करता है):

यहां छवि विवरण दर्ज करें

क्या चयन सेट को प्रतिबिंबित करने के लिए सुविधा तालिका को ताज़ा करने का एक तरीका है?


एक नोट के रूप में, मैंने myFeatureTable.grid.select () उन पंक्तियों पर कॉल करने का प्रयास किया जहां FID ने फीचरलेयर "चयन-पूर्ण" कॉलबैक में चयन परिणामों का मिलान किया, और मैं परिपत्र कॉलबैक में भाग गया। शायद यह देखने के लिए कि पंक्ति का चयन किया गया था या नहीं, एक चेक को जोड़ने से काम होगा। बाद में और शोध करेंगे।
रेकेन्डो

जवाबों:


2

3.16 से शुरू और बाद में, उस SyncSelectionबूलियन का कार्यान्वयन आपके द्वारा वर्णित से थोड़ा अलग है:

मानचित्र और सुविधा तालिका के बीच सहभागिता को सक्षम करता है। इस संपत्ति को सही पर सेट करना तालिका में एक पंक्ति पर क्लिक करके मानचित्र पर एक सुविधा के चयन की अनुमति देता है। हालाँकि, यह उपयोगकर्ता द्वारा मानचित्र पर किसी सुविधा पर क्लिक करने पर तालिका में रिकॉर्ड के चयन को सक्षम नहीं करेगा। मानचित्र से तालिका में चयन को सक्षम करने के लिए, डेवलपर को परत के क्लिक तर्क को स्पष्ट रूप से लागू करना होगा। ऐसा इसलिए है क्योंकि आवेदन का अपना चयन तर्क कहीं और हो सकता है या उनके स्वयं के क्लिक तर्क हो सकते हैं। (V3.16 पर जोड़ा गया)

इसलिए, मुझे पता है कि यह एक शाही दर्द है, लेकिन मेरा मानना ​​है कि आपको मैप-लेयर्स चयनित सुविधाओं के माध्यम से लूप करना होगा और उन पर चयन कार्यक्रम (प्रोग्रामेटिक रूप से) पर क्लिक करके उन्हें फिर से चुनना होगा।


2

यह केवल मानचित्र पर दृश्यमान दृश्य के लिए मेरा समाधान है (देखने में :)

    _selectViewIds: function() {
        var objectIdFieldName = this.layer.layerObject.objectIdField;
        q = new Query();
        q.outFields = [objectIdFieldName];
        q.geometry = this.map.extent;
        var exp=this.layer.layerObject.getDefinitionExpression();
        q.where = exp;
        q.returnGeometry = true;
        new QueryTask(this.layer.layerObject.url).execute(q).then(lang.hitch(this, function(ev) {
            var selectedIds = ev.features.map(function(f) {return f.attributes[objectIdFieldName];});

            this.myFeatureTable.filterRecordsByIds(selectedIds);
        }));
    }

...

        on(selectFeaturesBtn, 'change', lang.hitch(this, function(ev) {
            if(selectFeaturesBtn.isChecked()) {
                this._selectViewIds();
                on(this.map, "extent-change", lang.hitch(this, this._selectViewIds, this));
            } else {
                this.myFeatureTable.clearFilter();
            }
        }));

1

selection-completeघटना के लिए हुक , उपयोग getSelectedFeatures(), आईडी के एक परिणाम के लिए नक्शा, और के FeatureTableमाध्यम से पारित है selectRows। फिर घटना के selectFeaturesलिए हुक clickऔर आप कर रहे हैं।

एक मोटे विचार के रूप में:

layer.on("click", function(evt) {
    var query = new Query();
    query.geometry = evt.mapPoint;
    layer.selectFeatures(query, FeatureLayer.SELECTION_NEW, function() {
        var ids = layer.getSelectedFeatures().map(function(feature) {
            return feature.attributes[objectIDFieldName];
        });
        featureTable.selectRows(ids);
    });
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.