أكثر

يتم تقييد FeatureLayer fullExtent بواسطة اللوحة الجانبية Dojo ContentPane


لدي تطبيق ArcGIS JavaScript يعرض واحد FeatureLayer على الخريطة الموجودة في Dojo BorderContainer / ContentPane قالب مماثل لما هو معروض هنا. أحاول تهيئة الخريطة إلى السعة الكاملة لطبقة FeatureLayer الفردية. أنا أنجز هذا على النحو التالي:

map.on ("Layers-add-result"، function (evt) {map.setExtent (evt.layers [0] .layer.fullExtent)})؛

ومع ذلك ، أجد أن النقاط الموجودة على طرفي الخريطة مقطوعة. على وجه التحديد ، هذه طبقة من النقاط عبر شرق ووسط غرب الولايات المتحدة ، ولكن هناك بضع نقاط في كاليفورنيا وواحدة في فرنسا. النقاط في كاليفورنيا وفرنسا خارج نطاق الخريطة.

كان حدسي هو أنه يتم تعيين النطاق على افتراض عدم وجود لوحة جانبية ContentPane ، ثم يتم فرضه في إطار العرض الأصغر بمجرد عرض ContentPane. لقد اختبرت هذه النظرية من خلال إنشاء خريطة تغطي 100٪ من عرض الصفحة. من المؤكد أن المشكلة اختفت.

كيف يمكنني ضمان ذلكmap.setExtent ()يأخذ في الاعتبار اللوحات الجانبية ContentPane؟ أنا بالفعل أطلبدوم جاهز!والدعوةparser.parse (). أي شيء آخر أنا في عداد المفقودين؟

تم تحريره بمزيد من التفاصيل في 2/24

لقد نسيت أن أضيف أن لديّ FeatureTable والذي يعمل أساسًا كجدول سمات للنقاط في FeatureLayer. لقد قمت بضبط الخريطة لإعادة التصغير إلى أقصى حد عند إلغاء تحديد FeatureTable. عند حدوث هذا التصغير ، يتم تكبير الخريطة إلى النطاقات الصحيحة وتتضمن جميع النقاط. يدعم هذا نظريتي القائلة بأن الاستدعاء الأولي لـ map.setExtent ليس "على دراية" بإطار عرض الخريطة الأصغر عند تحميل الصفحة في البداية ، ولكنه هو لاحقًا بمجرد تحميل الصفحة بالكامل.


حاول الاتصالmap.resize ()بعد تقديم ContentPane وتغيير حجم الخريطة div. قد تضطر أيضًا إلى استخدامmap.reposition ()اعتمادًا على ما إذا تم نقل div أم لا.

قم بالتحرير ، ردًا على تعليقك حول التأكد من استمراره بعد تغيير موضع لوحة المحتوى:

سيؤدي وضعه بعد window.onload إلى التأكد من إطلاقه بعد تحميل كل شيء آخر بالكامل:

window.onload = function () {map.resize () ؛ وظيفة لتعيين مدى الخاص بك}

بهذه الطريقة سيتم تحميل كل شيء ، بما في ذلك الأجزاء التي تتسبب في تغيير حجم الخريطة div ، ثم تقوم بتغيير حجم الخريطة ثم تكبيرها إلى المدى الذي تريده.


لقد اتصلت بدعم Esri الفني بخصوص هذا السؤال. لقد ذكروني أنسيتسينتتأخذ الدالة متغيري إدخال:setExtent (مدى ، ملائم؟). النحيفتم تعيين المتغير علىخاطئةبشكل افتراضي ، ولكن وفقًا لوثائق الوظيفة ، فإنها تضمن أن أي خريطة بها طبقات خدمة الخرائط المبلطة سوف "تتناسب" مع الشاشة.

لذلك ، تمكنت من إصلاح هذه المشكلة والحصول على النتيجة المرجوة من خلال التعديل التالي على الكود الأصلي:

قديم (خطأ)

map.on ("Layers-add-result"، function (evt) {map.setExtent (evt.layers [0] .layer.fullExtent)})؛

جديد (صحيح)

map.on ("Layers-add-result"، function (evt) {map.setExtent (evt.layers [0] .layer.fullExtent، true)})؛