隨筆 - 81  文章 - 1033  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          在浮躁的年代里,我們進取心太切,患得患失;虛榮心太強,戰(zhàn)戰(zhàn)兢兢。一心爭強好勝,惟恐榜上無名。
          I think I can fly , and flying like a bird !
          程序員一名,已售出,缺貨中!

          我的郵件聯(lián)系方式

          用且僅用于MSN

          博客點擊率
          free web counter
          free web counter

          常用鏈接

          留言簿(36)

          隨筆檔案

          搜索

          •  

          積分與排名

          • 積分 - 187057
          • 排名 - 309

          最新評論

          閱讀排行榜

          評論排行榜

          ??? 算是校友的Tom兄在MapEasy的Google Group中提問“能否在放大縮小事件中動態(tài)添加MapType?”,并給出了自己用來實現(xiàn)此功能的代碼片段,但是無法達到想要的效果。下面根據(jù)Tom兄的代碼進行分析,并給出一種實現(xiàn)方式,希望給其他需要的朋友一個借鑒。

          ??? Tom兄代碼(聲明:下面代碼的相關權益完全歸Tom Xu所有):

          ?1?/**
          ?2??*?地圖放大
          ?3??*/
          ?4?this.zoomin?=?function()?{
          ?5?????var?level?=?this.model.getZoom().getLevel();
          ?6?????if?(level?<?MapModel.maxZoomLevel)?{
          ?7?????????this.model.setZoom(new?Zoom(level?+?1));
          ?8?//????if(level+1?==?SatelliteLevel)
          ?9?//????{
          10?//??????if(MapModel.mapTypes.length?==?1)
          11?//????????{
          12?//????????????MapModel.mapTypes.push(new?YTSMapType());
          13?//????????}
          14?//????}
          15?//????else
          16?//????{
          17?//????????if(MapModel.mapTypes.length?==?2)
          18?//????????{
          19?//????????????MapModel.mapTypes.pop();
          20?//????????}
          21?//????}
          22?????}
          23?}?

          ??? Tom兄原帖:
          ??? 當前只有一個基本的繼承自MapType的地圖類型,還有一個地圖類型想在第一個地圖放大到第N級時動態(tài)添加, 到其他級就刪除,使用了下列代碼,但不起作用,不知是不行還是需要配備其他操作?

          ??? 在Tom兄的代碼中把地圖放大的方法做了擴展,加入了判斷現(xiàn)在縮放的級別是否和設定好的級別一致,如果一致則添加一個地圖類型,否則把地圖類型彈出。在此過程中加入了容錯,判斷現(xiàn)在mapTypes數(shù)組中地圖類型個數(shù)是否正確。

          ??? Tom兄的想法完全是正確的,在zoomin方法中直接設置maptype也是很優(yōu)雅的實現(xiàn)方式,避免了修改mapeasy核心類,但是卻忽略了一個很重要的步驟。我在一種更普遍的情況下(當大于一個給定級別時不顯示,小于這個給定級別時候顯示)給出我修改后的代碼,并做一些說明。

          ?1?/**
          ?2??*?地圖放大
          ?3??*/
          ?4?this.zoomin?=?function()?{
          ?5?????????var?level?=?this.model.getZoom().getLevel();
          ?6?????????if?(level?<?MapModel.maxZoomLevel)?{
          ?7???????????? //SatelliteLevel表示臨界級別,判斷只在通過這個級別的時候通知監(jiān)聽器修改了maptype,從而
          ?8減少不必要的操作
          ?9?????????????????if(level+1?==?SatelliteLevel){
          10?????????????????????????//當只有一個地圖類型時,其實放大操作不涉及
          11?????????????????????????if(MapModel.mapTypes.length?==?1){
          12?????????????????????????????????MapModel.mapTypes.push(new?Edushi2DMapType());
          13?????????????????????????//當有兩個地圖類型時,縮小操作不涉及
          14?????????????????????????}else?if(MapModel.mapTypes.length?==?2){
          15?????????????????????????????????this.model.setCurrentMapType(MapModel.mapTypes.length-2);
          16?????????????????????????????????MapModel.mapTypes.pop();
          17?????????????????????????}
          18?????????????????????????//注意,在這里以command方式通知監(jiān)聽器修改了maptype,并設置了當前的地圖類型。
          19??????????????????? command.exec("maptype",new Array(this.model.getId(), this.model.currentMapType));
          20??????????????? }
          21??????????????? this.model.setZoom(new?Zoom(level?+?1));
          22??????? }
          23
          24}?

          ??? 縮小操作類似。中間那段可以重構出來給放大和縮小方法共用。

          ??? 因為為了不侵犯核心類,所以當通知監(jiān)聽器修改地圖類型和設置了新的縮放級別時候會重復的畫地圖。解決的方法是對核心類進行簡單修改,或者直接侵入修改對象屬性(不是調(diào)用setXXX(),getXXX())。

          ??? 大家可以仔細琢磨MapEasy中的兩種監(jiān)聽者的方式,一種是地圖模型本身繼承監(jiān)聽類,實現(xiàn)監(jiān)聽,完成自身的方法修改某些屬性的監(jiān)聽功能;另一種即為非常有用的command方式的監(jiān)聽者,可以在Action中加入監(jiān)聽,從而在外部調(diào)用監(jiān)聽方法。

          ??? 監(jiān)聽器幾乎是MapEasy完成絕大多數(shù)用戶交互的靈魂,請大家務必精讀相關代碼!
          posted on 2007-02-06 16:53 cresposhi 閱讀(2485) 評論(6)  編輯  收藏

          FeedBack:
          # re: MapEasy答疑(一) 能否在放大縮小事件中動態(tài)添加MapType 2007-02-06 17:49 BeanSoft
          不錯, 大家都來分享一下, 很快就能壯大!  回復  更多評論
            
          # re: MapEasy答疑(一) 能否在放大縮小事件中動態(tài)添加MapType 2007-02-06 20:54 梅穎
          四月肥?
            回復  更多評論
            
          # re: MapEasy答疑(一) 能否在放大縮小事件中動態(tài)添加MapType 2007-02-06 22:34 施偉
          是啊,需要大家都來分享。再次感謝beansoft兄貢獻的好想法  回復  更多評論
            
          # re: MapEasy答疑(一) 能否在放大縮小事件中動態(tài)添加MapType 2007-02-07 10:50 梅穎
          我也想貢獻哈  回復  更多評論
            
          # re: MapEasy答疑(一) 能否在放大縮小事件中動態(tài)添加MapType 2008-01-22 15:00 longlong
          我有兩個MapType,一個是WMSMapType,一個是RSMapType,分別是矢量地圖和影像地圖,單獨的情況下都能顯示,現(xiàn)在我想做他們的疊加,怎么做呢?

            回復  更多評論
            
          # re: MapEasy答疑(一) 能否在放大縮小事件中動態(tài)添加MapType 2009-03-01 14:46 深圳夜
          高人,MAPEASY在移動過程中占用非常多的內(nèi)存,怎么解決呀。
          我QQ491560009  回復  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 凌云县| 舒城县| 沈丘县| 鸡西市| 江西省| 建平县| 拉孜县| 霞浦县| 吉首市| 奎屯市| 寻乌县| 蕲春县| 耒阳市| 安多县| 拉萨市| 榆中县| 冷水江市| 陆良县| 珠海市| 祁门县| 武邑县| 酉阳| 太康县| 平潭县| 永年县| 纳雍县| 依兰县| 永寿县| 仙居县| 凤庆县| 扎赉特旗| 北海市| 房山区| 建始县| 囊谦县| 嘉义县| 平泉县| 巨鹿县| 陈巴尔虎旗| 安康市| 龙陵县|