יותר

קבל/הגדר את היקף ol.source.tile xyz


יש לי סדרה של מקורות אריחים המשווים לספקי מפות שונים ברזולוציות ספציפיות והייתי רוצה להגדיר מידה כך שכאשר נבחרת השכבה הרלוונטית, המפה עוברת ומתקרבת למידת האריחים.

בעקבות דוגמה זו הגדרתי את ההיקף לכל מקור. אני יכול גם לקבל את היקף השכבה שנבחרה באמצעות קוד זה בשליטה על מכשיר השכבות שלי:

curExtent = map.getView (). calculateExtent (map.getSize ()); אם (מידה! = null) {omfang = שכבות [s] .getExtent (); } אחרת {היקף = map.getView (). calculateExtent (map.getSize ()); } layerZoom = שכבות [s] .getProperties (). minZoom; map.getView (). fit (במידה, map.getSize ()); שכבות [s] .setVisible (true);

אני יכול להשיג את הרזולוציה/זום בשלב זה אבל אני לא בטוח כיצד להגדיר את התצוגה למאפיין minResolution/zoom של כל מקור. מישהו יכול בבקשה לעזור?

בהמשך לכך אני יכול כעת לגרום למפה להתהפך ולזום אך אריחי השכבה אינם מופיעים. חשבתי שזו בעיה של הקרנה אבל אני נמצא במיקום הנכון ובזום. האם אני צריך לעכב את טעינת האריחים אולי?

להלן הקוד המתוקן:

var curExtent = map.getView (). calculateExtent (map.getSize ()); if (title == selectedValue) {if (scope! = []) {omfang = שכבות [s] .getExtent (); } else {scope = curExtent; } console.log (היקף); layerZoom = שכבות [s] .getProperties (). minZoom; var sourceCentre = ol.extent.getCenter (היקף); console.log (sourceCentre); console.log (layerZoom); console.log (curExtent); console.log (היקף); map.getView (). setCenter (sourceCentre); map.getView (). setZoom (layerZoom); שכבות [s] .setVisible (true); } אחרת {שכבות [.] .setVisible (שקר); }

הקמתי כינור פשוט שעכשיו נראה שהוא עובד למרות שאני מתקשה להשיג את היקף שכבות המפה הסטנדרטיות האחרות ונראה שהפונקציונליות נשברת לאחר הפעולה המוצלחת הראשונית.


אז הפתרון שמצאתי לזה היה להוסיף צ'ק על ערך נוסף על השכבה. במקרה זה, הערך של 'תת'. זה איפשר לי לבצע בדיקה האם מקור השכבה הוא במידה מוגדרת. אם נמצאה המידה, חיפשתי את ערך minZoom, קיבלתי את קואורדינטת המרכז של ההיקף ואז הגדרתי את התצוגה כך.

נראה שהפונקציונאליות נשברת אם בדקתי את היקף הנכס על מקור לא מוגדר, כך שהמחאה של נכס 'המשנה' שללה זאת. עברה דרך ארוכה מאיתור פונקציה מרובעת, חישוב כיצד ליישם זאת על כתובת אתר xyz מותאמת אישית, לגלות כיצד לשנות את הקרנת המידה ולאחר מכן להביט בזום ולהגדיר תצוגה חדשה; שלא לדבר על יצירת תפריט נבחר מהשכבות, אבל המאמץ בהחלט היה שווה את זה.

אני בטוח שהקוד שלי נראה קצת חבל עבור רוב האנשים ותהיה לי הזדמנות לחדד אותו מאוחר יותר אבל תודה לכל מי שעזר בדרך. @AlvinLindstam, @JonatasWalker ו- @Pavlos סייעו לי להבין טוב יותר כיצד כל זה משתלב. לטובת כל מי שמחפש לעשות משהו דומה, אפרסם את הקוד למטה והנה קישור לכינור.

var sub = שכבות [s] .get ('תת'); // כאשר שכבות [s] הן תוצאה של מידת חיפוש בשכבות; if (title == selectedValue) {if (sub == undefined) {שכבות [s] .setVisible (true); } if (sub == 'premium') {var duration = 2000; var start = +תאריך חדש (); var view = map.getView (); var pan = ol.animation.pan ({duration: duration, // easing: eval (ol.easing.inAndOut), source: (view.getCenter ()), start: start}); var bounce = ol.animation.bounce ({משך: משך, רזולוציה: 4 * view.getResolution (), התחל: התחל}); // הוסף אנימציה למפת הצינור render.beforeRender (פאן, הקפצה); omfang = שכבות [s] .getExtent (); console.log (היקף); layerZoom = שכבות [s] .getProperties (). minZoom; var sourceCentre = ol.extent.getCenter (היקף); view.setCenter (sourceCentre); view.setZoom (layerZoom); שכבות [s] .setVisible (true); }

אתה יכול לבדוק את השאלה הזו זה יעזור לך לפתור את הבעיה GetExtent, ובדיקת שאלה זו תעזור לך הן בהיקף השכבות והן בתיאום בעיות המרת הקרנה.


צפו בסרטון: PREVIOUS VERSION Electric tile saw for Mosaic and Tiles (אוֹקְטוֹבֶּר 2021).