Көбірек

OpenLayers 3 - Параметрлердің өзгеруіне плиткаларды сұрауға қабат қабатын мәжбүрлеу

OpenLayers 3 - Параметрлердің өзгеруіне плиткаларды сұрауға қабат қабатын мәжбүрлеу


Қазіргі уақытта OL3 қосымшасында бірдей Source объектісін қолданатын көптеген OL Tile қабаттары бар. Бұл дереккөз TileArcGISRest болып табылады. Идея мынада: пайдаланушылар қабаттарды қосқанда / өшіргенде мен қабаттар парамын құрамын және дерек көзін жаңартам, сонда жүйе суреттер үшін ArcGIS серверіне бір ғана сұраныс жасайды.

Мен мұны қабатты көрінетін өзгеріс оқиғасын қарап, барлық көрінетін қабаттарды тауып, содан кейін параменттік сұранысты құру арқылы жасаймын:

/ * Build қабаттарының параметрі * / var қабаттарыParam = 'көрсету:'; for (var i = 0; i 

Мәселе мынада, OL параметрлері өзгергеннен кейін де, мен «өзгерту» оқиғасын қолмен жібергеннен кейін де кэштелген плиткаларды қолданады. Мысалы, мен қабатты қосып, оны жақсы көрсете аламын, егер мен OL-ге өтпестен қабатты өшіріп, басқа қабатты қоссам, онда бірінші қабаттан тұратын кескіндер қайтарылады.

Менің ойымша, бұлар кэштелген және OL оларды дереккөздердегі параменттер өзгергенімен қолдануға жарамды деп санайды, бұл қабатты / көзді өзгерісті анықтауға және жаңа тақтайшаларды қайта сұрауға мәжбүр етеді деп ойладым.

Қазіргі уақытта менің ойымша, көзді барлық кэшті тазартуға мәжбүрлеу, бұл үшін ыңғайлы әдіс таба алмадым, сондықтан мен келесі әрекеттерді орындаймын:

/ * Кэшті тазалау * / var cache = source.tileCache; while (cache.count_> 0) {cache.pop (). dispose (); }

Бұл өте жағымсыз болып көрінеді, қазіргі уақытта мен оның жағымсыз әсер ететінін білмеймін, ол қазіргі уақытта қажетті аффектке ие және жаңа тақтайшаларды сұрауға мәжбүр етеді.

Сондықтан менің сұрағым мынау: мұның жақсы тәсілі бар ма? Параметрлерді өзгерткеннен және «өзгеріс» оқиғасынан кейін OL бұрынғы қоңыраудың басқа парамент жолын пайдаланып кэштелген кескіндерді қолдануға болады деп шешетіні таңқаларлық.

Сонымен қатар, OL тақтайшаны алмастырғанға дейін оны алмауға болады ма? Немесе бұл әдеттегі мінез-құлық және мен кэшті тазалап жатқандықтан, тақтайшалар бірден жоғалады, содан кейін қайта сұралады ма?


Бұл уақытша шешім, бірақ біз қолданбада осылай қолданамыз:

source.setTileLoadFunction (source.getTileLoadFunction ());

Oterral-дің жауабы - мен жұмыс істеу үшін тапқан жалғыз жауап.

// MapService ішіндегі қабат параметрін әр уақытта шақыру керек, өзгерту функциясын өзгерту керекLayerVisibility (sID, oItem, bOn) {var sPID = oItem.parentId; егер (sPID! == нөл) {// Ата-ана қабаты MapService Url бар нақты деңгей болып табылады var acLayer = getParentLayer (sPID) // «шоу» жолын жасаңыз EX: «шоу: 1,2,3» қабаты негізінде ауысады var sLayers = getParentLayerString (sPID) / * Егер жол бос болса, онда бұл қызметке арналған барлық қабаттар өшірулі * және қабат көрінетін күйге орнатылған * әйтпесе параменттерді жаңартып, жаңа тақтайшаларды мәжбүрлейді * / 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 деңгейінің көрінбейтіндігін өңдеу. }}

Бейнені қараңыз: HOW TO MAKE SIMPLE GIS WEB BASED WITH GOOLGE API, OPEN LAYERS, AND LEAFLET IN 5 MINS