Бештар

OpenLayers 3 - Маҷбур кардани манбаи қабат барои дархости сафолҳо дар бораи тағирёбии параметр


Дар замимаи OL3 дар айни замон, ман бисёр қабатҳои OL Tile дорам, ки ҳамон як объекти Source -ро истифода мебаранд. Ин манбаъ TileArcGISRest аст. Ҳадаф аз он иборат аст, ки вақте корбарон қабаҳоро фаъол / хомӯш мекунанд, ман қабатҳои парамро месозам ва манбаъро нав мекунам, то система танҳо ба сервери ArcGIS барои тасвирҳо як дархост кунад.

Ман инро бо дидани рӯйдоди тағирёбии намоёни қабат, ёфтани ҳама қабатҳои намоён ва сипас сохтани пурсиши парам ба ин тарз иҷро мекунам:

/ * Сохтани параметрҳои қабатҳои * / var layerParam = 'show:'; барои (var i = 0; i 

Масъала дар инҷо он аст, ки OL то ҳол плиткаи ҳифзшударо истифода мебарад, ҳатто пас аз тағир ёфтани параметрҳо ва ман дастӣ як рӯйдоди 'тағирот' мефиристам. Масалан, ман метавонам як қабатро фаъол кунам ва онро хуб нишон диҳам, пас агар ман қабатро хомӯш кунам ва қабати дигарро бе гардиши OL даргиронам, тасвирҳои сафолиро дарбар мегирад, ки қабати аввал доранд.

Ман чунин мешуморам, ки инҳо ҳифз шудаанд ва ОЛ гумон мекунад, ки онҳо барои истифода дурустанд, гарчанде ки параметрҳои манбаъ тағир ёфтанд, ки ман қабати / манбаъро маҷбур месозам, ки тағиротро дарёбад ва сафолҳои навро дубора дархост кунад.

Тақвиме, ки ман дар айни замон дорам, маҷбур кардани манбаъ барои тоза кардани тамоми кэш аст, ман метавонистам барои ин кор усули мувофиқе наёфтам, бинобар ин ман чунин кор мекунам:

/ * Тозакунии кеш * / var cache = source.tileCache; while (cache.count_> 0) {cache.pop (). dispose (); }

Ин хеле бад аст ва дар айни замон ман намедонам, ки ин ягон таъсири манфӣ хоҳад дошт, дар айни замон он таъсири дилхоҳ дорад ва маҷбур мекунад, ки сафолҳои навро талаб кунанд.

Пас саволи ман ин аст: оё роҳи беҳтаре барои ин вуҷуд дорад? Тааҷҷубовар аст, ки пас аз тағир додани параметрҳо ва оташ задани 'тағирёбии' ҳодисаи OL, қарор қабул мекунад, ки аксҳои ҳифзшуда аз занги қаблӣ бо истифодаи сатри гуногуни парам барои истифода хубанд.

Ғайр аз он, оё имконпазир аст, ки OL сафолро то он даме, ки ивазашро иваз накунад, набарорад? Ё ин рафтори муқаррарӣ ва азбаски ман кэшро тоза карда истодаам, сафолҳо якбора нопадид мешаванд ва сипас дубора дархост мешаванд?


Ин ҳалли муваққатӣ аст, аммо ин аст он чизе ки мо дар барномаи худ истифода мебарем:

source.setTileLoadFunction (source.getTileLoadFunction ());

Ҷавоби Oterral ягона ҷавобест, ки ман барои кор ёфтам.

// Параметри қабати дохили MapService ҳар вақт даъват карда мешавад, бояд функсияи changeLayerVisibility (sID, oItem, bOn) иваз карда шавад {var sPID = oItem.parentId; if (sPID! == null) {// Қабати волидайн қабати воқеӣ бо MapService Url var acLayer = getParentLayer (sPID) // Сохтани сатри EX "show": "show: 1,2,3" дар асоси қабат toggles var sLayers = getParentLayerString (sPID) / * Агар сатр ночиз бошад, пас ҳамаи қабатҳои ин хидмат хомӯшанд * ва қабати намоёни қабат ба false * дар акси ҳол параметҳоро навсозӣ кунед ва сафолҳои навро маҷбур кунед * / if (sLayers! == null) {var oSource = acLayer.getSource (); acLayer.setVisible (true) // Essentially // url / MapServer / Export? otherQueryParams = "stuff" & LAYERS = show: 1,2,3 oSource.updateParams ({LAYERS: sLayers}) oSource.setTileLoadFunction (oSource.getTileLoadFunction) ); | } else {acLayer.setVisible (false)}} else {// инҷо намоёнии қабати ғайри ArcGis. }}


Видеоро тамошо кунед: Openlayers 6 Tutorial #6 - Layer Switcher (Сентябр 2021).