乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MapInfo中按區(qū)域分割地圖的方法(帶MapBasic方法)

       zqbxi 2010-12-10
      問題的提出:
      我有一幅由三個圖層組成的地圖,一幅為河流,一幅全國大市圖,一幅為全國的縣市圖,現(xiàn)在有MAPINFO以其中的佛山為中心,分割出一個正方形的地圖。這么分割啊,不能是編程的,希望能寫出具體步驟。
      問題的追問:
      一:分割一個正方形地圖?一個還是很多個同樣大小的正方形。而且正方形的大小是多少?
      二:所說的區(qū)域是以什么參考區(qū)域來分割?是上面說的正方形還是各個省市這樣的區(qū)域?
      三:分割后是獨(dú)立成各個TAB文件還是什么?如何命名?
      問題的補(bǔ)充:
      一個正方形就形了;還有因?yàn)槟芡ㄟ^MAPINFO的放大與縮小,所以很難說他的大小,不過只要求這個正方形能覆蓋佛山這個城市就行了;還有作晚說錯了,不是全國地圖,而是兩廣地圖啊。兩廣的河流地圖,市地圖,縣市圖;置于區(qū)域:如果是在市地圖的話,包含佛山大市整個對象,佛山大市的周圍城市對象,就只能包含其一小部分了。同理如果是在縣市圖,佛山大市有四個區(qū),正方形內(nèi)要包含這四區(qū);這四區(qū)的周圍縣市就只能包含其一小部分了;在河流地圖的話,就不要這么嚴(yán)格了,不用分成正方形了;是分別保存的,所以可以分別來分割,不用一起分割了。
      個人覺得:
      覺得一,因?yàn)槟芡ㄟ^MAPINFO的放大與縮小,所以很難說他的大?。ㄎ宜f的大小不是相對大小,而是絕對大小,即在地圖上是多少米長寬的方形,這個大小是無法改變的);
      覺得二,如果是在市地圖的話,包含佛山大市整個對象,佛山大市的周圍城市對象,就只能包含其一小部分了(覺得沒有錯誤),同理如果是在縣市圖,佛山大市有四個區(qū),正方形內(nèi)要包含這四區(qū)(覺得有錯誤,應(yīng)該是每個方形包括一個區(qū),共四個區(qū)那么有四個方形。PS:經(jīng)過百度搜索在南方網(wǎng)發(fā)現(xiàn)佛山下面共有六個區(qū),即城區(qū)、石灣區(qū)、順德區(qū)、南海區(qū)、三水區(qū)、高明區(qū)[http://www.southcn.com/news/gdnews/informations/bianmzl/200201100675.htm ],不知道什么時候變成四個區(qū)了,可能市最新的劃分吧。不過查詢了國家行政編碼標(biāo)準(zhǔn)代碼,發(fā)現(xiàn)有三區(qū)四縣,即市轄區(qū)440601、城區(qū)440602、石灣區(qū)440603、順德市440681、南海市440682、三水市440683、高明市440684)
      覺得三,只要求這個正方形能覆蓋佛山這個城市就行(那么,這個區(qū)域的界線應(yīng)該比較清楚,最好有一個行政區(qū)劃這樣的面層,這樣所用方形的大小比較容易確定,不然是點(diǎn)或線或者在字段中有界線區(qū)分的話要求自行判定方形大小,即要看區(qū)域內(nèi)對象的minx,miny,maxx和maxy來確定這個方形)
      覺得四,超出方形范圍內(nèi)的線和面需要打斷或裁減。
      覺得五,所說的正方形應(yīng)該是矩形。(個人猜測和認(rèn)為,因?yàn)槿绻貓D投影是經(jīng)緯度投影的話就不大可能是正方形)
      個人解決思路:
      以一個大市來舉例說明,把佛山市分割成四個區(qū),即上面所說的大市下的小市,共需要分成四個方形。(我沒有對方數(shù)據(jù)故以上海市樣圖數(shù)據(jù)做演示說明,把上海市下的各個區(qū)分割開,每個區(qū)一個獨(dú)立的方形)
      在一個空層上繪制出方形,方形正好覆蓋這個區(qū)。將被方形包住的點(diǎn)選出,線和面選出后露在方形外面的部分切割掉,把這些選中的點(diǎn)線面提取出來,分割就完成了。(說起來還想很簡單的,也就那么兩句話,實(shí)現(xiàn)不一定容易,發(fā)現(xiàn)論壇上許多人都提問分割問題,我想應(yīng)該和這個問題類似吧)
      具體解決步驟:
      其實(shí)我是先做了BASIC程序完成這個問題的,但為了明了起見,我還是先講用MAPINFO中如何操作實(shí)現(xiàn),然后引入BASIC程序這樣程序便比較容易理解了。
      第一步:畫框。根據(jù)行政區(qū)域來畫,如果沒有這樣的區(qū)域,請根據(jù)我上面所說的先找到minx,miny,maxx和maxy,根據(jù)最大坐標(biāo)和最小坐標(biāo)來畫。
      第二步:點(diǎn)的解決。把上面的框?qū)幼鳛榈?,點(diǎn)層設(shè)為可編輯,運(yùn)用面板上的邊界選擇工具點(diǎn)下方形區(qū)則所有在框內(nèi)的點(diǎn)被全部選中了。把選中的Selection表另存副本就可以了。
      第三步:線的解決。同樣把方形框?qū)幼鳛榈祝x中線層所有對象(也可以是一個框下的部分)并把線層設(shè)為可編輯,菜單欄工具設(shè)置為對象,再選中一個方形框,然后菜單欄工具擦除外部(也可以分解,在下面的程序中運(yùn)用的就是分解的方法)。需要注意擦除后要保存值,不然你的表就為空了。然后選中剛才方形框下的線對象另存就可以了。(也用邊界選擇工具選擇,當(dāng)然為了下一個方形的數(shù)據(jù)沒有改變請不要保存,只將你需要的選中另存就可以了)
      第四步:面的解決。同上。
      程序方法:
      程序中均為些比較簡單的MAPBASIC語句,我就不多解釋了,程序中已經(jīng)解釋了部分。
        MapBasic代碼
       1  Include  " MAPBASIC.DEF "
       2  dim  minx,miny,maxx,maxy  as  float
       3  dim  myobj  as   object
       4  dim  ii  as   integer
       5  open table  " G:\sh_tab\Admin_Ploy.TAB "   as  admin_ploy  ' 面,方形范圍取于此面
       6  open table  " G:\sh_tab\Land.TAB "   as  land  ' 面
       7  open table  " G:\sh_tab\POI.TAB "   as  poi  ' 點(diǎn)
       8  open table  " G:\sh_tab\Road_Line.TAB "   as  road  ' 線
       9  open table  " G:\sh_tab\temp.TAB "   as  temp  ' 臨時面層,請預(yù)先建立,主要用于建立臨時方形
      10  map from temp,poi,road,land,admin_ploy
      11  set  map layer  " temp "  editable  on
      12  fetch first from admin_ploy
      13  ii = 1
      14  do   while   not  eot(admin_ploy)
      15    select   *  from admin_ploy where rowid = ii into tempa
      16   minx = tableinfo(tempa,TAB_INFO_MINX)
      17   miny = tableinfo(tempa,TAB_INFO_MINY)
      18   maxx = tableinfo(tempa,TAB_INFO_MAXX)
      19   maxy = tableinfo(tempa,TAB_INFO_MAXY)
      20   create rect (minx,miny) (maxx,maxy)
      21   ii = ii + 1
      22   fetch  next  from admin_ploy
      23  loop
      24  set  map layer  " temp "  editable off
      25 
      26  fetch first from temp
      27  ii = 1
      28  do   while   not  eot(temp)
      29   myobj = temp.obj
      30    ' 點(diǎn)的選擇與輸出,輸出為MIF的,也可以直接保存TAB的
      31    select   *  from poi where obj partly within myobj into tempa
      32   export  " tempa "  into  " G:\sh_tab\temp\poi " + ii + " .mif "  type  " MIF "
      33    ' 線,對線進(jìn)行分割后再保存,以保證方形外的不包括
      34    set  map layer  " road "  editable  on
      35    select   *  from road
      36    set  target  on
      37    select   *  from temp where rowid = ii
      38   Objects  Split  Into Target data name = name,class = class,remark = remark
      39    select   *  from road where obj within myobj into tempa
      40   export  " tempa "  into  " G:\sh_tab\temp\road " + ii + " .mif "  type  " MIF "
      41   Rollback Table road
      42    set  map layer  " road "  editable off
      43    ' 面
      44    set  map layer  " land "  editable  on
      45    select   *  from land
      46    set  target  on
      47    select   *  from temp where rowid = ii
      48   Objects  Split   Into Target data name = name,class = class,remark = remark
      49    select   *  from land where obj within myobj into tempa
      50   export  " tempa "  into  " G:\sh_tab\temp\land " + ii + " .mif "  type  " MIF "
      51   Rollback Table land
      52    set  map layer  " land "  editable off
      53   ii = ii + 1
      54   fetch  next  from temp
      55  loop
      56  note  " OK "
      57 
      58 
      問題的延伸: 其他的許多分割問題也應(yīng)該可以從這上面啟發(fā)應(yīng)用。比如把一個1:100W的圖分成1:2.5W的大比例圖也可以運(yùn)用此方法。本來想用MAPINFO OLE+VB做的,沒有太多時間,所以先做了個簡單的BASIC程序,有空再補(bǔ)上吧。有點(diǎn)累了,所以上面一些寫的比較簡單了,如有不明白的地方可以提出來我再詳細(xì)解釋下。最后我也不知道我這樣做是否算實(shí)現(xiàn)了功能呢?
      歡迎大家討論和指正,謝謝。
       
       
       
       
       
      本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/binghuiliang/archive/2008/02/19/2107455.aspx

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多