• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            socketref,再見!高德

            https://github.com/adoggie

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            考慮將shp格式的地圖數據發布到webgis上去的想法有一段時間了,正好有空閑時間便忙碌開來,沒想到期間遇到了諸多的問題

            1.開發工具:
            Geoserver,Openlayer,Ext-js,Postgres/Postgis,Python2.6,PIL,TileCache
            2.地圖數據
            我的地圖數據是08年的全國地圖,按每個省市分隔開來,每個省市又分了若干個圖層文件,格式是mapinfo的Tab,容量10G
            由于沒有全國大比例圖,在偶然的一個機會從網上下載到一份C/S的監控系統,沒想到安裝目錄內就有一份全國圖,就是比例不高。
            3.處理過程
            1.Tab轉換成shp: Ogr工具可以完成這兩種格式的轉換,編寫python腳本可以輕易處理完
              在轉換數據之前需要提醒的是,發現在處理多邊形圖層時,這個多邊形圖層并不是簡單的多邊形,也就是那種mapinfo允許存在polygon和pline的圖層,這將導致之后的導入空間數據庫的失敗,因為postgis要求每個圖層數據類型必須是一致的,不能存在多種類型,所以編寫mapbasic腳本,將這些pline對象從這多邊形圖層中剔去即可。
            2.數據校驗: 這個過程非常重要,任何提供的的矢量數據都有可能存在錯誤數據,所以第一步必須要修復這些可能存在的錯誤,工具就是ArcGis,使用其工具對每個省市的每個圖層文件進行修復。
            3.導入空間數據庫: 編寫腳本,將shp數據轉成sql文件,此時必須注意空間數據庫的字符編碼與sql數據字符編碼要吻合或者能夠自動轉換。pg2sq由于轉換成sql時,由于shp數據中某些圖層表存儲的字符編碼不統一導致產生的非法的sql數據,所以必須對這些數據進行修正,并采用ultraedit將數據進行轉碼成數據的字符集類型,我使用的是utf-8.
            4.數據分離: 由于提供的全國地理數據是沒有根據應用來分層的,所有的道路都合在同一個叫road的圖層內,然后通過屬性來區分道路的級別,由于我們在控制顯示道路時是需要分層分級別的,所以必須將這些數據要分離成不同的道路圖層,道路共10級別(0-9),編寫腳本將每個省市的道路切割成road_?10級道路層(select into即可搞定)。
            同樣,除了道路之外還有其他的比如河流,POI對象等都需要進行分割到不同圖層以便更精確的現實控制。
            5.配置Geoserver: 數據都有了,接下來就是配置繪制引擎了。Geoserver提供WFS,WMS服務,性能一般,由于是java開發的。不管3721,配置了最新的I5主機,將java虛擬機的內存設置的最大,將postgis的數據庫內存也足夠調大。手工添加了1,2個圖層到geoserver,preview一下,ok!
            接下來編寫控制這些圖層的SLD了,這些花了好些時間學習和開發(學習sld對我以前開發嵌入式地圖引擎風格配置也是一種幫助,之后的嵌入式地圖引擎也全部使用sld進行配置了!)
            由于全國數據分31個省市,每個省市都配置了21個圖層,所以要人工11加到geoserver還真是很大的問題,不過沒關系,有python在手,然后對geoserver的配置文件研究了一把便寫了腳本將幾百個圖層全加了進去,然后將這些圖層按省市進行分組,再次Preview,ok!
            6.Cache Tile生成: 使用過GeoWebCache,發現很多地方實在不好理解,幸好找到了TileCache,代碼也容易修改,研讀了TileCache代碼之后修改了N處地方,把效率提高了10倍以上。現在的問題在于Tilecache實現了Disk Cache,Memory Cache,但就是沒有DB cache,每個tile將創建一個文件,如果這些文件很小,有的甚至才幾十字節也要浪費一個文件塊空間,效率不高,如果采用db的話空間就能節省很多,等以后有了時間自己編寫一個后端為postgres的Tile Cache吧。

            Tile Cache生成有些問題要注意:
            1. 空白tile: 由于我設置的繪制設置的BBox非常大,所以在繪制的時候有些空白區域也將提交給geoserver進行處理,這樣浪費了處理時間,同時這些產生的小規格圖塊大大占據了磁盤空間,所以修改的代碼將不存儲這些空白tile,僅僅存儲這些tile的文件名稱,而不保存內容
            2. tilecache的Resolutions,ZoomLevels,BBox和Openlayers的屬性必須一樣,否則Opnelayers無法顯示正確的tile
            3. tile相交檢測: 同樣是空白區域的繪制,如果每次都提交給geoserver的話,geoserver將根據配置的layer去相交并繪制一次,這就完全沒有必要的,我的解決方式就是提前將31個省市產生他們的MBR,然后再tile進行提交給geoserver之前,將請求的tile的bbox與這些省市的mbr進行相交測試,只有相交的圖層才送入geoserver繪制
            4. 大網格繪制: 每次以256×256的規格給geoserver繪制全國圖的話效率實在太低,之后修改成2048×2048規格,整體的繪制效率上升了n倍,繪制完了之后采用split_tile.py將這些大塊切割成256規格的小塊,必須注意產生的序號

            寫得好累



            posted on 2010-04-12 11:18 放屁阿狗 閱讀(2182) 評論(2)  編輯 收藏 引用 所屬分類: WebGisWebService

            Feedback

            # re: 發布中國圖到web的開發經歷 2010-04-12 15:18 陳梓瀚(vczh)
            Visual Studio專業版輕松搞定  回復  更多評論
              

            # re: 發布中國圖到web的開發經歷 2010-08-26 18:06 myfan0707
            很好,我的過程跟你的差不多,但是沒有你進行那么多的優化,因為不會Python,我結合mapserver和Openlayers寫的切圖程序,效率不太高,但是靈活一些,下一步會好好優化一下,你的文章受益匪淺,  回復  更多評論
              

            狠狠综合久久综合中文88| 无码八A片人妻少妇久久| 久久99国产精品久久99果冻传媒| 亚洲精品美女久久久久99| 麻豆成人久久精品二区三区免费| 中文字幕久久欲求不满| 伊人久久综合精品无码AV专区| 99久久精品午夜一区二区| 国产精品美女久久久免费| 99久久99久久精品国产片果冻 | 国产亚洲精久久久久久无码77777| 亚洲精品久久久www| 国产巨作麻豆欧美亚洲综合久久 | 久久久久亚洲AV成人网人人网站 | 国产A级毛片久久久精品毛片| 国产精品免费久久久久电影网| 亚洲第一极品精品无码久久| 亚洲国产精品成人AV无码久久综合影院 | 无码乱码观看精品久久| 国产亚洲欧美精品久久久| 亚洲欧美久久久久9999| 国产福利电影一区二区三区久久久久成人精品综合 | 中文字幕无码精品亚洲资源网久久 | 久久精品国产一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 要久久爱在线免费观看| 久久久中文字幕日本| 成人精品一区二区久久| 久久精品国产免费一区| 99国产精品久久| 97久久国产亚洲精品超碰热| 欧美一区二区三区久久综合| 久久亚洲私人国产精品vA | 久久福利资源国产精品999| 国产精品久久久99| 久久国产精品无码网站| 久久久久久久久久久免费精品| 伊人久久精品线影院| 欧美午夜A∨大片久久 | 久久久久人妻一区二区三区| 久久久久久亚洲精品影院|