Flyingis

          Talking and thinking freely !
          Flying in the world of GIS !
          隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
          數(shù)據(jù)加載中……

          BlueViewer 地圖加載分析(C#)

               摘要: BlueViewer是基于.NET Link進行ArcIMS二次開發(fā)的一個實例,里面包含了WebGIS最基本的一些功能。全文對BlueViewer程序啟動地圖加載的整個過程進行了分析,可以作為.NET Link初學參考。  閱讀全文

          posted @ 2006-09-03 23:14 Flyingis 閱讀(2724) | 評論 (5)編輯 收藏

          關于 BOM

          ??? 作者:Flyingis

          ??? BOM全稱是Browser Object Model,在不依賴于網(wǎng)頁內(nèi)容的情況下提供和瀏覽器視窗交互的對象,下圖顯示了BOM的組成結(jié)構(gòu)。

          BOM-Structure.gif


          ??? 可以看出,window是BOM的核心對象,在使用window中所有對象時,可以省去window,例如window.document可以寫成document,window.frames[0]可以寫成frame[0]。為了對視窗進行操作,BOM提供了四種方法:moveBy(dx,dy)、moveTo(x,y)、resizeBy(dw,dh)、resizeTo(w,h),這四種方法比較簡單,具體使用可以參考相關資料。

          ??? BOM中沒有特別復雜的概念,但需要注意的是,現(xiàn)在BOM還沒有一個統(tǒng)一的標準,各種瀏覽器對BOM的支持程度也不一,相同的功能也許其對象描述并不相同,即使是BOM結(jié)構(gòu)本身也存在問題,如location既存在于window下的第二級結(jié)構(gòu)中,也存在于window.document下的第三級結(jié)構(gòu)中,但它們的功能描述是相同的。在目前情況下,只有針對用戶所使用的瀏覽器來定制代碼,或為不同的瀏覽器分別進行代碼描述。

          posted @ 2006-09-01 17:22 Flyingis 閱讀(1908) | 評論 (0)編輯 收藏

          SVG 中使用 JavaScript

          ??? 作者:Flyingis

          ??? SVG(Scalable Vector Graphics)是一種基于XML的語言,用來在Web中繪制矢量圖形。當前,除了Mozilla 2.0外,沒有一款瀏覽器在本質(zhì)上支持SVG,都需要插件來顯示SVG圖形,著名的有Adobe公司和Corel公司的SVG插件。

          ??? 一個簡單的SVG

          <?xml?version="1.0"?>
          <!DOCTYPE?svg?PUBLIC?"-//W3C//DTD?SVG?1.0//EN"
          "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
          >
          <svg?xmlns="http://www.w3.org/2000/svg"?xmlns:xlink=http://www.w3.org/1999/xlink?width="100%"?height="100%">
          <desc>
          顯示一個正方形和一個圓形
          </desc>
          <defs>
          <rect?id="myrect"?width="150"?height="150"?fill="red"?x="15"?y="15"?stroke="black"/>
          <circle?id="mycircle"?r="75"?fill="white"?stroke="black"?cx="150"?cy="150"/>
          </defs>
          <use?xlink:href="#myrect"?/>
          <use?xlink:href="#mycircle"?/>
          </svg>

          ??? 為了更好的理解SVG中的標簽,可以和HTML標簽作個簡單的比較,SVG中的<svg/>和HTML中的<html/>類似,<desc/>和<title/>類似,<g/>和<div/>類似。

          ??? 在SVG中可以使用JavaScript,當需要遵循一些規(guī)則:必須使用type屬性;language屬性是非法的;使用特殊XML字符時可以使用CDATA(SVG和CDATA都遵循XML規(guī)范);xlink:href替換src。

          <?xml?version="1.0"?>
          <!DOCTYPE?svg?PUBLIC?"-//W3C//DTD?SVG?1.0//EN"
          "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
          >
          <svg?xmlns="http://www.w3.org/2000/svg"?xmlns:xlink=http://www.w3.org/1999/xlink?width="100%"?height="100%">
          <desc>
          顯示一個正方形和一個圓形
          </desc>
          <![CDATA[
          ??function?comp(a,?b)?{
          ????if?(a?>?b)
          ??????alert("a?is?bigger?than?b");
          ????else
          ??????alert("a?is?not?bigger?than?b");
          ??}
          ]]>
          <defs>
          <rect?id="myrect"?width="150"?height="150"?fill="red"?x="15"?y="15"?stroke="black"/>
          <circle?id="mycircle"?r="75"?fill="white"?stroke="black"?cx="150"?cy="150"/>
          </defs>
          <use?xlink:href="#myrect"?/>
          <use?xlink:href="#mycircle"?/>
          </svg>

          ??? 在SVG中使用JavaScript可以寫在如下幾個位置:<desc/>標簽之后;在<defs/>中;在<g/>標簽之前。

          posted @ 2006-08-31 20:06 Flyingis 閱讀(4055) | 評論 (0)編輯 收藏

          瀏覽器中的 JavaScript

          ??? 作者:Flyingis

          ??? 之前寫過不少JavaScript基礎的隨筆,基本上都是針對其語法、語言結(jié)構(gòu)來論述的。但是,現(xiàn)在使用JavaScript最多的地方是在瀏覽器中,這里就簡單談談瀏覽器中使用JavaScript。

          ??? 在瀏覽器中使用JavaScript分為內(nèi)聯(lián)和外聯(lián)兩種方法,和CSS比較相似。

          ??? 內(nèi)聯(lián)

          <html>
          <head>
          <title>內(nèi)聯(lián)</title>
          <script?language="JavaScript">
          ??
          function?message()?{
          ????alert(
          "Good?Day?!");
          ??}

          </script>
          </head>
          <body></body>
          </html>

          ??? 外聯(lián)

          <html>
          <head>
          <title>外聯(lián)</title>
          <script?language="JavaScript"?src="../path/external.js"></script>
          </head>
          <body></body>
          </html>

          ??? 在external.js中,可以包含任何js代碼,例如類的定義、方法函數(shù)等。相比之下,使用外聯(lián)方法引用js文件可以做到更安全、代碼更容易管理、節(jié)省資源開銷。之所以能節(jié)省資源開銷,是因為當兩個頁面同時使用一個js文件時,該js文件只會被下載一次,避免的相同代碼重復下載增加頁面的代碼量。

          ??? 網(wǎng)頁中的JavaScript源代碼一般放置在<head></head>區(qū)域,當寫在<body></body>中時,一旦頁面加載就會執(zhí)行body中的JavaScript代碼,無法人工控制代碼的執(zhí)行。如果需要頁面加載時同時執(zhí)行JavaScript方法,則需要在head中定義該方法,否則系統(tǒng)會報錯。

          ??? JavaScript最初只有一種瀏覽器的支持,因此,需要一種方法將JavaScript代碼隱藏在老的瀏覽器中,避免對JavaScript解析產(chǎn)生錯誤,這就是我們過去經(jīng)常可以看到的,在代碼前后加上<!--><//-->,在現(xiàn)在看來,這種方法已經(jīng)沒有必要了,一是因為使用外聯(lián)方式引用JavaScript代碼更加合適,二是當前主流瀏覽器對JavaScript的支持已經(jīng)越來越多,當然也就能正確識別JavaScript代碼。

          ??? 在瀏覽網(wǎng)頁時,當某張圖片無法顯示時,可以通過文字來替換它,當網(wǎng)頁不支持某段JavaScript代碼時,我們也能通過一種替代的方式來提醒用戶自己的瀏覽器不支持JavaScript或禁止了JavaScript,即使用<noscript></noscript>,放置在body區(qū)域中。

          ??? 隨著XHTML(eXtensible HTML)標準的出現(xiàn),<script>標簽也出現(xiàn)了一些變化,過去我看到有的頁面在<script>標簽中使用languange屬性,有的使用type屬性,當時沒怎么注意,其實后者正是XHTML出現(xiàn)后所定義的,可以為JavaScript設置mime類型為"text/javascript"。

          ??? XHTML帶來的另外一個變化就是使用CDATA,使用CDATA可以在表達式中使用一些特殊字符,增強代碼的可讀性,避免使用"&lt"、"&gt"來分別表示小于和大于。

          <script?type="text/javascript">
          <![CDATA[
          ??
          function?comp(a,?b)?{
          ????
          if?(a?>?b)
          ??????alert(
          "a?is?bigger?than?b");
          ????
          else
          ??????alert(
          "a?is?not?bigger?than?b");
          ??}

          ]]
          >
          </script>

          ??? 代碼中大于和引號均使用了我們常見的書寫形式,避免了使用XML實體所帶來的閱讀上的困難。當然,這也存在舊的瀏覽器無法識別CDATA的問題,需要我們加入注釋來隱藏CDATA標簽。大家可以想到,最好的辦法還是使用外聯(lián)的方法使用JavaScript。

          <script?type="text/javascript">
          //<![CDATA[
          ??function?comp(a,?b)?{
          ????
          if?(a?>?b)
          ??????alert(
          "a?is?bigger?than?b");
          ????
          else
          ??????alert(
          "a?is?not?bigger?than?b");
          ??}

          //]]>
          </script>

          ??? 雖然部分瀏覽器還不完全支持XHTML,但我們應該盡量按照XHTML標準來書寫代碼,使得該標準能夠獲得更大更廣泛的支持。

          posted @ 2006-08-31 20:01 Flyingis 閱讀(2743) | 評論 (0)編輯 收藏

          正則表達式--簡單模式

          ??? 作者:Flyingis

          ??? 正則表達式除了用來匹配一些特殊字符外,還有許多其他的作用。Metacharacters,character classes和quantifiers都是正則表達式語法中的重要組成部分,可以用來實現(xiàn)更強大的功能。?

          ??? Metacharacters

          ??? 正則表達式的Metacharacters主要包括:

          ??? ([{\^$|)?*+.

          ??? 當需要使用這些符號的時候,需要在前面加上一個反斜杠"\",例如:

          var?reg?=?/\?/;
          var?reg?=?new?RegExp("\\?");

          ??? 一個字符的表示可以使用它的文字符號,也可以使用ASCII碼或Unicode碼來代碼它。例如,當一個字符使用ASCII碼表示的時候,我們需要在一個兩位十六進制的編碼前加上"\x"。

          var?name?=?"apple";
          var?regName?=?/\x61/;
          alert(regName.test(name));??
          //輸出"true"

          ??? 當然,使用十進制來表示字母a。

          var?reg?=?/\141/;

          ??? 使用Unicode來表示一個字符,需要四位十六進制的編碼,例如\u0062代表b。

          var?s?=?"big";
          var?reg?=?/\u0062/;
          alert(reg.test(s));??
          //輸出為"true"

          ??? 下面一段代碼可以到達同樣的效果:

          var?s?=?"big";
          var?reg?=?new?RegExp("\\u0062");
          alert(reg.test(s));??
          //輸出為"true"

          ??? 另外,有一些預定義好的特殊字符,用來表示特殊的含義。如:“\t,\n,\r,\f,\a,\e,\cX,\b,\v,\0”。

          //將用戶輸入的新一行的所有字符都刪除
          var?str?=?strWithNewLines.replace(/\n/g,?"");

          ??? Character classes
          ?
          ??? Character classer代表著需要匹配的一組字符,將需要匹配的字符放在一對中括號里,正則表達式將能有效的識別第一個字符,第二個字符,等等。

          ??? Simple classes

          ??? 如果需要同時匹配"pig"和"big",可以使用simple character class來實現(xiàn):

          var?str?=?"pig,?big";
          var?reg?=?/[pb]ig/gi;
          var?arr?=?str.match(reg);

          ??? 此時,arr中的數(shù)據(jù)包括"pig"和"big"。當然,使用ASCII或Unicode來表示p或b同樣可行。

          ??? Negation classes

          ??? 有時我們需要匹配除了少數(shù)幾個字符外的所有字符,在這種情況下,我們可以使用negation class來進行匹配。例如,匹配除了a和b之外所有的字符,可以表示為[^ab]。在上一個例子中,將reg表示為/[^p]ig/gi,則結(jié)果中將過濾掉pig。

          ??? Range classes

          ??? 顧名思義,range class就是用來指定某個范圍的匹配字符,例如從a到z可以表示為[a-z],從1到10可以表示為[1-10]。如果將range class指定的字符排除在外,可以使用[^1-10],表示除了1到10范圍外的所有字符。

          ??? Combination classes

          ??? 舉一個例子就清楚了,現(xiàn)在需要匹配從1到10,從a到g,并且加上新一行的所有字符,可以表示為[1-10a-g\n]。注意,在[]里不允許再嵌套[]
          ??
          ??? Predefined classes

          ??? 因為有許多樣式都不停在重復使用,因此一組預定義好的character classes可以用來簡化一些比較復雜的類型。具體的可以參考相關資料,下面舉個簡單的例子:
          ??
          var?str?=?"8743?apple";
          var?reg?=?/[0-9][0-9][0-9]/;
          alert(reg.test(str));??
          //輸出為"true"
          ??
          ??? 使用predefined class可以寫成:

          var?str?=?"8743?apple";
          var?reg?=?/\d\d\d/;
          alert(reg.test(str));??
          //輸出為"true"

          ??? Quantifiers
          ?
          ??? Quantifiers能夠指定某種匹配方式需要進行多少次,包括指定確定的次數(shù),或不確定的次數(shù)如至少多少次。

          ??? Simple quantifiers

          ??? 下面列表中,指定了某種模式需要重復進行的次數(shù),部分符號和閉包的意義一樣:

          simple quantifiers.gif

          ??? 例如var reg = /b?read/就可以表示bread或read。
          ??
          ??? 三種正則表達式的quantifiers

          ??? Greedy quantifier: 對一個目標串進行匹配搜索,當在目標串中沒有相匹配的字符串時,就刪去目標串的最后一個字符,再次進行匹配,如果沒有發(fā)現(xiàn)則再刪去最后一個字符,依此類推,最后的結(jié)果要么已經(jīng)將字符匹配上,要么目標串已經(jīng)為空。

          ??? Reluctant quantifier: 和greedy quantifier搜索風格相反。Reluctant quantifier從目標串的第一個字符開始對目標串進行搜索,當沒有匹配時,給目標串加上一個字符,再次進行搜索,依此類推,直到在目標串上匹配成功,或整個目標串都被搜索但仍然沒有完成匹配。

          ??? Possessive quantifier: 直接對整個目標串進行匹配,要么匹配上,要么匹配失敗,它只進行一次匹配。

          ??? 那么如何判斷這三種不同的quantifiers呢?主要就是根據(jù)問號(?)星號(*)和加號(+)的組合來判斷的,如下表所示。

          three quantifiers.gif

          ??? 需要注意的是,possessive quantifier在目前主流的瀏覽器中都不被支持,IE和Opera在碰到possessive quantifier時將會拋出異常,Mozilla雖然不會發(fā)生錯誤,但會將它作為greedy quantifier來對待。


          ??? 相關鏈接:正則表達式--JavaScript 實現(xiàn)基礎

          posted @ 2006-08-11 16:09 Flyingis 閱讀(3180) | 評論 (0)編輯 收藏

          組裝電腦與品牌機

               摘要: 最近開始在.NET平臺下進行工作,Visual Studio 2005的高效、易用及強大的功能都給我留下了深刻的印象,但在VS2005下進行一些基礎操作的時候,感覺自己好像在做工業(yè)設計,有時自己就會想,面對Java 和.NET,就好像是到電腦城去購買電腦一樣,是選擇DIY,還是選擇品牌整機?不管怎樣,充分利用已有平臺進行深層次開發(fā),把握對架構(gòu)的理解,就顯得更為重要。  閱讀全文

          posted @ 2006-08-11 09:16 Flyingis 閱讀(2562) | 評論 (9)編輯 收藏

          正則表達式--JavaScript 實現(xiàn)基礎

          ??? 作者:Flyingis

          ??? 正則表達式用來從某一段字符串中匹配所需要的字符,這些字符可以非常簡單,也可以非常復雜。JavaScript生來就對正則表達式有著良好的支持,在網(wǎng)絡的字符搜索匹配中發(fā)揮著重要的作用。

          ??? JavaScript通過RegExp類來支持正則表達式,舉一個最簡單的例子:
          ??
          var?regApple?=?new?RegExp("apple");

          ??? 它可以匹配一個字符串中出現(xiàn)的第一個"apple"字符串,并且對大小寫敏感。在構(gòu)造方法中加入第二個參數(shù)"g"則代表的搜索出字符串中所有的"apple",這里"g"代表"global"。如果第二個參數(shù)為"i",則代表著case-insensitive,匹配過程中將不考慮字母的大小寫。將上述兩者綜合起來,可以搜索出所有"apple"字符串,并且不考慮大小寫問題。

          var?regApple?=?new?RegExp("apple",?"gi");?

          ??? 正則表達式有著并不唯一的表示方法,使用Perl語言中的語法,可以將上述表達式表示為:

          var?regApple?=?/apple/gi;

          ??? 創(chuàng)建了一個RegExp對象后,RegExp的方法可以構(gòu)造出不同的匹配方式,因為正則表達式是對字符串進行的操作,所以String的一些方法在構(gòu)造正則表達式的過程中也扮演著重要角色。

          ??? RegExp對象的方法?

          var?sampleString?=?"Greenapple";
          var?regApple?=?/apple/;
          alert(regApple.test(sampleString));

          ??? 上面代碼輸出的結(jié)果是"true",因為sampleString中包含了需要匹配的字符串"apple",這是最簡單的檢測方式。有時,我們需要知道匹配的詳細結(jié)果,例如:

          var?sampleString?=?"green?apples,?red?apples";
          var?regApple?=?/apple/g;
          var?arr?=?regApple.exec(sampleString);

          ??? 通過使用exec()方法,返回的arr是關于匹配結(jié)果的一個數(shù)組,包括每一個匹配的值及其所在的段,例如上例中是"green apples"還是"red apples"。match()方法有著和exec()相同的功能,只是表達方式不同:

          var?sampleString?=?"green?apples,?red?apples";
          var?regApple?=?/apple/g;
          var?arr?=?sampleString.match(regApple);

          ??? search()方法和indexOf()比較類似,返回第一個匹配的字符串所在的位置:

          var?sampleString?=?"green?apples,?red?apples";
          var?regApple?=?/apple/gi;
          alert(sampleString.search(regApple));??
          //輸出"6"

          ??? String的方法

          ??? String的replace()方法可以將指定的字符串替換為另一個字符串:

          var?sampleString?=?"There?is?a?green?apple.";
          alert(sampleString.replace(
          "green",?"red"));??//輸出"There?is?a?red?apple."

          ??? 將replace()的第一個參數(shù)替換為一個正則表達式,可以達到同樣的效果:

          var?sampleString?=?"There?is?a?green?apple.";
          var?regApple?=?/green/;
          alert(sampleString.replace(regApple,?
          "red"));??//輸出"There?is?a?red?apple."

          ??? replace()的第二個參數(shù)可以替換為一個function(),該function()接受一個匹配字符串作為參數(shù),返回一個替換字符串。(存在疑問)

          ??? 使用正則表達式可以實現(xiàn)String的split()方法相同的功能。

          var?fruit?=?"apple,pear,lemon";
          var?arr?=?fruit.split(",");

          ??? 使用正則表達式:

          var?fruit?=?"apple,pear,lemon";
          var?reg?=?/\,/;
          var?arr?=?fruit.split(reg);

          ??? 以上這些都是JavaScript正則表達式最基本的一些特性,實現(xiàn)了一些最基本的功能,這些都不是正則表達式真正的強大之處,在作者接下來的隨筆中會繼續(xù)介紹。

          posted @ 2006-08-10 21:04 Flyingis 閱讀(5628) | 評論 (3)編輯 收藏

          ArcIMS 連接器--.NET Link 使用方法

               摘要: ArcIMS各種connector的開發(fā)方式存在著一些區(qū)別,其中.NET Link連接器僅僅是對XML文件的一種搭配與組裝,使用.NET Framework中對XML文件的操縱來拼裝所需的ArcXML請求,并接受ArcIMS應用服務器的響應。文章附加了一個簡單例子描述了整個過程。

          使用.NET Link進行ArcIMS二次開發(fā),開發(fā)人員不僅需要熟悉ArcXML_reference,還需要熟悉javascript客戶端開發(fā),因為用戶在客戶端進行的操作和地圖服務的響應,均是由javascript腳本來完成的。  閱讀全文

          posted @ 2006-07-30 21:16 Flyingis 閱讀(6380) | 評論 (70)編輯 收藏

          ArcGIS-ArcSDE-ArcIMS 9.1 sp2 更新

          ??? 7月13日美國ESRI公司一口氣放出了ArcGIS、ArcSDE和ArcIMS 9.1版本的Service Pack 2升級包,使用9.1版本的用戶可以下載更新。

          ??? ArcGIS 9.l Service Pack 2
          ???
          http://support.esri.com/index.cfm?fa=downloads.patchesServicePacks.viewPatch&PID=43&MetaID=1162

          ??? ArcSDE 9.1 Service Pack 2
          ???
          http://support.esri.com/index.cfm?fa=downloads.patchesServicePacks.viewPatch&PID=19&MetaID=1163

          ??? ArcIMS 9.1 Service Pack 2
          ???
          http://support.esri.com/index.cfm?fa=downloads.patchesServicePacks.viewPatch&PID=16&MetaID=1164

          ??? 最近ESRI公司的核心開發(fā)人員一直忙于9.2系列產(chǎn)品的研發(fā)工作,這次釋放出了三個9.1版本的產(chǎn)品的更新包,為9.1產(chǎn)品的用戶解決了一些問題,可惜的是,.Net ADF一直都沒有相應的更新,按照這個進度,很可能要等到9.2系列產(chǎn)品上市,.Net ADF作為其中之一才能獲得bug的修復和功能的更新。

          posted @ 2006-07-26 20:50 Flyingis 閱讀(2079) | 評論 (2)編輯 收藏

          FireFox 2 beta 1 支持 JavaScript 1.7

          ??? Mozilla已經(jīng)釋放出Firefox 2 beta 1以供測試,在新增的眾多功能特性中,支持最新的JavaScript 1.7是一個亮點,這使得Firefox成為了第一款支持最新JavaScript功能的瀏覽器。

          ??? JavaScript 1.7中最值得關注的功能是提供了對iterator的支持,這使得在JavaScript中對數(shù)據(jù)進行迭代成為可能。使用Firefox 2 beta 1可以立即感受JavaScript 1.7所支持的新的功能。

          posted @ 2006-07-25 13:59 Flyingis 閱讀(1336) | 評論 (1)編輯 收藏

          XMLHttpRequest 在 IE7 中將區(qū)分大小寫

          ??? 一直以來本地XMLHttpRequest對象是不區(qū)分大小寫的,但從IE7開始,XMLHttpRequest/ActiveX對象將對大小寫敏感,這將和傳統(tǒng)的面向?qū)ο笳Z言例如Java、C#等保持一致,ECMAScript中也是如此

          ??? 過去在IE7版本之前使用的方法和函數(shù)不需要關心這個問題,但如果要將程序遷移到IE7中或保持所有瀏覽器版本的兼容性,需要對過去的程序進行修改來保證程序的正確運行。

          ??? 其實這種變化應該是發(fā)展的趨勢,嚴格控制對象名稱可以規(guī)范代碼風格統(tǒng)一化并減少閱讀代碼所帶來的困難,這是即使在對大小寫沒有任何要求的時候也應該注意的問題,能形成規(guī)約是件好事。

          ??? IE7已經(jīng)放出beta3版本,需要在Windows XP SP2操作系統(tǒng)下安裝。

          posted @ 2006-07-25 11:39 Flyingis 閱讀(956) | 評論 (0)編輯 收藏

          JavaScript 中的繼承(下)

          ??? 作者:Flyingis

          ??? Prototype

          ??? 在《JavaScript中的對象(下)》一文中,我們了解到任何prototype的屬性和方法都會被傳遞到該類的所有實例中,利用這一特性,使用prototype也能實現(xiàn)繼承。
          ?
          function ClassA()? {
          }


          ClassA.prototype.id
          =?1998;
          ClassA.prototype.sayId
          =function(){
          ?? alert(
          this.id);
          }
          ;

          functionClassB(){
          }


          ClassB.prototype
          =newClassA();
          ClassB.prototype.name
          ="";
          ClassB.prototype.sayName
          =function(){
          ?? alert(
          this.name);
          }

          ??? 需要注意的是,這種實現(xiàn)繼承的方法不能將參數(shù)傳入到ClassA的構(gòu)造器中,是一個缺陷。ClassB的所有屬性和方法必需在將ClassB的prototype對象指向ClassA的實例之后進行附值。這樣做是因為,prototype指向一個新的對象,在此之前prototype的屬性和方法都被覆蓋銷毀。

          ??? 對代碼進行測試:

          var ?obj1 = new ClassA();
          var ?obj2 = new ClassB();
          obj1.id
          =?1998;
          obj2.id
          =?2000;
          obj2.name
          ="悉尼奧運會";
          obj1.sayId();??
          //輸出"1998"
          obj2.sayId();??//輸出"1998"
          obj2.sayName();??//輸出"悉尼奧運會"

          alert(obj2
          instanceofClassA);??//輸出"true"
          alert(obj2 instanceofClassB);??//輸出"true"

          ??? 在上述代碼中可以看出,使用prototype實現(xiàn)繼承,instanceof操作符出現(xiàn)了另外的用途,在用構(gòu)造起定義類實現(xiàn)繼承時,instanceof不會出現(xiàn)這種效果。但是使用prototype不能支持多重繼承。
          ??
          ??? 在《JavaScript中的對象(下)》和上文的論述中可以了解到,使用構(gòu)造器定義類實現(xiàn)繼承和使用prototype實現(xiàn)繼承均存在各自的缺陷,要避免出現(xiàn)這些情況,只有將兩者混合使用。

          ??? 混合方法

          ??? 《JavaScript中的對象(下)》一文中曾經(jīng)論述,創(chuàng)建一個類的最佳方法,是使用構(gòu)造器的方法去定義屬性,使用prototype定義方法。在繼承中同樣如此。

          function ClassA(id) {
          ??
          this .id = id;
          }


          ClassA.prototype.sayId
          =?function() {
          ?? alert(
          this.id);
          }
          ;

          function ClassB(id,?name) {
          ?? ClassA.call(
          this,?id);
          ??
          this.name =name;
          }


          ClassB.prototype
          =? new ClassA();
          ClassB.prototype.sayName
          =function(){
          ?? alert(
          this.name);
          }

          posted @ 2006-07-15 16:53 Flyingis 閱讀(1564) | 評論 (0)編輯 收藏

          JavaScript 中的繼承(上)

          ??? 作者:Flyingis

          ??? 繼承是面向?qū)ο笳Z言基本特征之一,通過繼承可以將父類所具有的特性遺傳到子類。ECMAScript中的繼承不像Java、C++等語言那么明顯,直接通過關鍵字來實現(xiàn),通常它是通過模擬方式來實現(xiàn)繼承功能的,并且實現(xiàn)方式有多種。

          ??? 在繼承中引入this關鍵字,使用構(gòu)造器方法定義類來實現(xiàn)繼承。一個構(gòu)造器是一個函數(shù),因此可以將父類的構(gòu)造器作為子類的一個方法使用并進行調(diào)用。

          function ClassA(id) {
          ??
          this .id = id;
          ??
          this .sayId =?function() {
          ???? alert(
          this.id);
          ?? }
          ;
          }


          function ClassB(id,?name) {
          ??
          this .newMethod = ClassA;
          ??
          this .newMethod(id);
          ??
          delete?this.newMethod;

          ??
          this.name= name;
          ??
          this.sayName=?function(){
          ???? alert(
          this.name);
          ?? }
          ;
          }

          ??? 注意,子類中所有新的屬性和方法都必需在刪除newMethod后引入,否則,可能存在用父類的屬性和方法重寫子類屬性和方法的危險。另外,使用這種方法還可以實現(xiàn)多重繼承,此時如果兩個父類具有相同的屬性或方法時,最后的類具有優(yōu)先級。由于這種繼承方法比較流行,ECMAScript第三版引入了兩個Function對象:call()和apply()。

          ??? call()

          ??? call()方法是最接近上述繼承方式的方法,它的第一個參數(shù)是this指向的對象,所有的其他參數(shù)都直接傳到function。

          function sayMessage(first,?last)?{
          ?? alert(first
          +?this.logic +last);
          }
          ;

          varobj =new Object();
          obj.logic
          =?"or";

          sayMessage.call(obj,
          "Coffee ",?"Tea");??//輸出"Coffee?or?Tea"

          ??? 用call()方法來實現(xiàn)繼承,只需要this.newMethod相關的三行代碼。

          function ClassB(id,?name) {
          ??
          ? //this.newMethod?=?ClassA;
          ??//this.newMethod(id);
          ??//delete?this.newMethod;
          ??ClassA.call(this,?id);??//this指向ClassB的對象

          ??
          this.name =name;
          ??
          this.sayName =?function()?{
          ???? alert(
          this.name);
          ?? }
          ;
          }

          ??? apply()

          ??? apply()方法需要兩個參數(shù):this所指向的對象,和傳到function的由參數(shù)組成的array。

          function?sayMessage(first,?last)??{
          ??alert(first?
          +?this.logic?+last);
          }
          ;

          var?obj?=?new?Object();
          obj.logic?
          =?"or";

          sayMessage.apply(obj,?
          new?Array("Coffee?",?"?Tea"));??//輸出"Coffee?or?Tea"
          ??
          ??? 同樣,使用 apply() 實現(xiàn)繼承可以通過如下方法實現(xiàn)。

          function?ClassB(id,?name)?{
          ??
          //this.newMethod?=?ClassA;
          ??//this.newMethod(id);
          ??//delete?this.newMethod;
          ??ClassA.apply(this,?new?Array(id));??//this指向ClassB的對象

          ??
          this.name?=?name;
          ??
          this.sayName?=?function()?{
          ????alert(
          this.name);
          ??}
          ;
          }

          ??? 當父類構(gòu)造器的參數(shù)和子類構(gòu)造器參數(shù)的順序一致時,可以使用子類的arguments對象作為第二個參數(shù)。否則,必需創(chuàng)建一個array來傳遞參數(shù),或是使用call()方法。

          ??? 文章待續(xù)……

          posted @ 2006-07-15 10:38 Flyingis 閱讀(1614) | 評論 (0)編輯 收藏

          ArcIMS 體系結(jié)構(gòu)

          ??? 作者:Flyingis

          ??? ArcIMS可以運行在一個分布式環(huán)境中,包含客戶端和服務器組件。一個完整服務的運行過程可以簡單的描述為:一個客戶端向服務器發(fā)送請求信息,服務器處理請求并返回信息到客戶端,客戶端將所獲取的信息展現(xiàn)給終端用戶。

          architecture.gif

          ??? ArcIMS空間服務器(ArcIMS Spatial Server)

          ??? ArcIMS空間服務器是ArcIMS 的中心樞紐,承載著高負荷的計算任務,對地圖數(shù)據(jù)的請求和相關信息進行處理。當接收到一個服務請求, ArcIMS空間服務器主要可以完成以下功能:

          ??? Image—從在ArcIMS Author或ArcMap中創(chuàng)建的地圖數(shù)據(jù)中創(chuàng)建影像文件
          ??? Feature—緩沖地圖特征數(shù)據(jù)
          ??? Query—查找和搜索條件相匹配的特征數(shù)據(jù)
          ??? Geocode—執(zhí)行地址匹配操作
          ??? Extract—從選擇的地圖特征數(shù)據(jù)中創(chuàng)建shapefile
          ??? Metadata—打印出metadata 數(shù)據(jù)
          ??? Route—在一系列的點之間計算路徑距離

          spatialserver.gif

          ??? 兩個后臺的進程支持著ArcIMS空間服務器的運行: ArcIMS Monitor和ArcIMS Tasker ,在Windows中它們作為后臺服務運行,在Unix和Linux中作為daemon進程。

          ??? ArcIMS Monitor跟蹤ArcIMS空間服務器的狀態(tài)。當系統(tǒng)重啟時,ArcIMS Monitor將自動恢復ArcIMS服務。

          ??? ArcIMS Tasker清除output目錄中的文件。這些由空間服務器創(chuàng)建,以支持ArcIMS服務的文件,將在用戶定義的時間間隔后被清除。當前服務為地圖服務時,用戶發(fā)送請求得到的數(shù)據(jù)均是由ArcIMS空間服務器對請求產(chǎn)生響應,返回的數(shù)據(jù)是圖片,保存在output目錄中, ArcIMS Tasker會在一定時間后清除這些圖片數(shù)據(jù)。

          ArcIMS應用服務器(ArcIMS Application Server)

          ??? ArcIMS應用服務器控制著傳入請求,跟蹤當前哪些服務運行在哪些ArcIMS空間服務器中。ArcIMS應用服務器將請求傳輸?shù)竭m合的空間服務器。應用服務器是一個Java應用程序,在Windows操作系統(tǒng)中作為一個Windows服務,在Unix和Linux中作為一個daemon進程。

          ArcIMS應用服務連接器(ArcIMS application server connectors)

          ??? ArcIMS應用服務連接器將Web服務器和ArcIMS應用服務器連接在一起。ArcIMS Servlet Connector是ArcIMS的默認連接器。它使用ArcXML在Web服務器和ArcIMS應用服務器之間傳遞信息。

          ??? 相對于ArcIMS Servlet Connector,還有幾種其他的連接器可供選擇:

          ??? ColdFusion Connector
          ??? ActiveX Connector
          ??? ArcIMS Java Connector
          ??? ArcIMS .NET Link

          ??? ColdFusion和ActiveX連接器配合自定義的客戶端工作,并且將自己的語言轉(zhuǎn)換成ArcXML。ArcIMS Java Connector通過 JSP客戶端或獨立的Java應用程序和ArcIMS應用服務器保持通信。.NET Link提供TCP/IP或HTTP連接到應用服務器。

          ??? 關于連接器的相關資料,在 ArcIMS Help 中搜索主題:

          ??? More about the ArcIMS Servlet Connector
          ??? Connectors and ArcMap Server
          ??? The ArcIMS documentation set
          ??? ArcIMS Viewers

          ??? 當使用ArcIMS Designer創(chuàng)建了一個為用戶提供地圖內(nèi)容的網(wǎng)站時,可以選擇三種ArcIMS Viewers:HTML、 Java Standard、或Java Custom。通過定制這些Viewers或定制客戶端可以達到基本相同的效果。另外,還可以使用比較成熟的客戶端,如ArcMap、ArcExplorer和Metadata Explorer。

          ??? 從本質(zhì)上說,viewer或客戶端就是Internet GIS 應用或網(wǎng)絡應用的網(wǎng)站,提供用戶需要的地圖服務。當用戶訪問這些網(wǎng)站的時候,他們可以在viewer中看到嵌入在網(wǎng)站中的定制地圖。整個viewer決定了網(wǎng)站的外觀和功能。

          ??? 相關viewer的相關資料,在ArcIMS Help中搜索主題:

          ??? Choosing a viewer for your Web site
          ??? Designing a Web site
          ??? Overview of using the ArcIMS Viewers

          ??? 關于連接器、客戶端的選擇,可以參考
          這篇文章

          ??? ---- 參考資料:ArcIMS Help

          posted @ 2006-07-09 11:50 Flyingis 閱讀(9693) | 評論 (12)編輯 收藏

          JavaScript 中的對象(下)

          ??? 作者:Flyingis

          5? 自定義類和對象

          5.1? 工廠方法

          ??? 在ECMAScript中創(chuàng)建工廠方法,返回一個特定類型的對象,以此實現(xiàn)代碼的簡潔適用。

          function?createFruit()?{
          ??
          var?tempFruit?=?new?Object;
          ??tempFruit.name?
          =?"apple";
          ??tempFruit.number?
          =?5;
          ??tempFruit.showName?
          =?function()?{
          ????alert(
          this.name);
          ??}
          ;
          return?tempFruit;
          }


          var?Fruit1?=?creatFruit();
          var?Fruit2?=?creatFruit();

          ??? 在createFruit()中可以加入形參來傳入?yún)?shù)的值。隨著ECMAScript不斷被規(guī)范化,這種創(chuàng)建對象的方法已不再流行,一部分原因是語法上的,一部分原因是功能上的,如每個對象的實例都擁有屬于自己的showName方法,給內(nèi)存管理帶來一定的開銷。

          5.2? 構(gòu)造函數(shù)

          ??? 選擇一個類名,第一個字母大寫,該類名即是構(gòu)造函數(shù)的名稱。創(chuàng)建一個構(gòu)造函數(shù)和工廠方法比較類似,不同的是需要使用關鍵字new來創(chuàng)建對象的引用。使用構(gòu)造函數(shù)的方式來創(chuàng)建對象和使用工廠方法有著相同的弊端。

          function?Fruit(name,?number)?{
          ??
          this.name?=?name;
          ??
          this.number?=?number;
          ??
          this.showName?=?function()?{
          ????alert(
          this.name);
          ??}
          ;
          }


          var?Fruit1?=?new?Fruit("apple",?5);
          var?Fruit2?=?new?Fruit("pear",?3);

          5.3? 使用 Prototype

          ??? 使用prototype屬性可以用來創(chuàng)建新的對象,首先需要一個空的構(gòu)造函數(shù)建立類的名稱,然后所有的屬性和方法都直接分配到prototype屬性中。

          function?Fruit()?{
          }

          Fruit.prototype.name?
          =?"apple";
          Fruit.prototype.number?
          =?5;
          Fruit.prototype.showName?
          =?function()?{
          ??alert(
          this.name);
          }
          ;

          var?fruit1?=?new?Fruit();
          var?fruit2?=?new?Fruit();

          ??? 但是,這樣同樣存在一些缺點。首先,構(gòu)造函數(shù)中沒有參數(shù),給初始化帶來一些麻煩,其次,當一個屬性指向的是一個對象而非方法時,該對象會被所有的實例所共享,任何一點改動都會影響到其他對象引用的使用。

          5.4? 混合使用工廠方法和Prototype

          這個概念很簡單:使用構(gòu)造函數(shù)定義所有除方法外的屬性,使用 prototype 定義對象的方法。這樣每個方法只會被創(chuàng)建一次,每個對象都能擁有自己對象實例的屬性。

          function?Fruit(name,?number)?{
          ??
          this.name?=?name;
          ??
          this.number?=?number;
          ??
          this.owner?=?new?Array("Jerry",?"Terry");
          }

          Fruit.prototype.showName?
          =?function()?{
          ??alert(
          this.name);
          }
          ;

          var?Fruit1?=?new?Fruit("apple",?5);
          var?Fruit2?=?new?Fruit("pear",?3);

          5.5? 動態(tài) prototype

          ??? 簡單來說,這種方法就是使用了一個標識符來判斷 prototype 是否已經(jīng)被指向某個方法,從而保證這些方法只會被創(chuàng)建并指向一次。

          5.6? 混合工廠方法

          ??? 這種方法和經(jīng)典的工廠方法及構(gòu)造函數(shù)方法在對象方法內(nèi)存管理上存在同樣的問題,一般不建議使用該方法,除了某些特殊情況(XML in JavaScript中有這樣的例子)。

          6? 修改對象

          ??? 使用prototype對象可以對對象進行修改。除了用戶自定義的對象外,ECMAScript原始對象也有prototype屬性。直接使用 prototype可以給對象創(chuàng)建新的方法。

          Number.prototype.toHexString?=?function()?{
          ??
          return?this.toString(16);
          }
          ;
          var?iNum?=?10;
          alert(iNum.toHexString());??
          //輸出A

          ??? 另外,使用prototype可以輕松修改已有的方法,讓方法名指向新的方法。需要注意的是,指向新的方法后,原有的方法不再被任何對象使用,將會被垃圾回收器銷毀,使得原有方法不再存在。比較安全的解決辦法是,建立一個新的引用來保存原有的方法,然后再將原方法覆蓋。

          ??? 比較特殊的是,ECMAScript中創(chuàng)建對象,在對象引用被創(chuàng)建后,可以給對象加入新的方法,并且可以立即在對象的引用中使用。這是ECMAScript的一個特性,但不推薦這樣使用,以免帶來不必要的麻煩,例如閱讀理解、文檔資料等。

          posted @ 2006-07-03 14:02 Flyingis 閱讀(3973) | 評論 (3)編輯 收藏

          JavaScript 中的對象(上)

          ??? 作者:Flyingis

          ??? 面向?qū)ο笳Z言需要具備三種基本特征:繼承(Inheritance)、多態(tài) (Polymorphism) 、封裝(Encapsulation and Aggregation)。和Java 、C++ 等語言一樣,ECMAScript 被認為是面向?qū)ο蟮模驗樗瑫r支持這些特征。
          ?
          var?obj?=?new?Object();

          ??? 該語句創(chuàng)建了一個對象,當構(gòu)造函數(shù)沒有參數(shù)時,可以省略后面的括號。我們通常是通過對象的引用來進行對象操作,當一個對象的引用為null時,ECMAScript將啟動垃圾回收程序刪除該對象,釋放內(nèi)存。當一個對象存在多個引用時,需要將所有的引用設置為null來釋放該對象所占用的空間。

          1? 早期綁定和動態(tài)綁定

          ??? 早期綁定是指在對象被實例化之前對象的屬性和方法已經(jīng)被定義,使得編譯器或解釋器能夠提前編譯機器碼。Java和VB支持這種特性,但ECMAScript 并非強類型,不支持早期綁定。

          ??? 動態(tài)綁定是指編譯器或解釋器在運行時才知道該對象的具體類型,之前并不會檢查,只會判斷這些屬性和方法是否得到該對象的支持。ECMAScript對所有的變量使用動態(tài)綁定。

          2? 對象類型

          2.1? 原始對象

          ??? ECMA-262 定義不受主機環(huán)境影響的ECMAScript支持的任意對象為原始對象,簡而言之,原始對象就是ECMA-262定義的引用類型,比較常用的有Object、Function、String、Boolean、Number、Array、Date。?

          ??? Array

          ???
          Array有許多常用的方法,很多和Java類似,在此不作介紹。需要注意的是,使用push()和pop()兩個方法,可以將Array看作一個棧,遵循后進先出規(guī)則(LIFO)。使用shift()和push()兩個方法,Array對象即可看作是一個隊列,遵循后進后出的規(guī)則(LILO)。splice()方法非常有用,它輕松的實現(xiàn)了鏈表的一些基本功能,如刪除數(shù)據(jù)項、插入數(shù)據(jù)、替換數(shù)據(jù)。

          ??? Date

          ???
          ECMAScript中的Date類是基于Java早期版本中的java.util.Date類的,它可以精確表示1970年1月1日(格林威治時間)前后285616年的任意時間。Date是少有的幾個重寫了toString()和valueOf()方法,并且兩個方法并不相同的類。valueOf()通常表示精確到毫秒級的時間,toString()通常返回個性化的時間表示方法,例如相同的時間在不同瀏覽器下顯示的效果可能不一樣。

          2.2? Build-in對象

          ??? Build-in 對象除了具備原始對象的基本特性外,它在 ECMAScript 程序開始運行時就可以使用,因此可以說任何 Build-in 對象就是原始對象。目前 ECMA-262 只定義了兩個 Build-in 對象: Global 和 Math 。

          ??? Global

          ???
          在ECMAScript里,沒有函數(shù)可以單獨存在,所有的函數(shù)都必須是某個對象的方法。如isNan()、isFinite()、parseInt()、parseFloat()、encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent() 等均是Global對象的方法,除此之外,Global對象還包括一些屬性。

          ??? Math

          ???
          Math中有許多屬性和方法可以用于數(shù)學計算,和Java中的比較類似。

          2.3? Host 對象

          ??? 除了原始對象和Build-in對象外,其他對象均是Host對象。所有的BOM和DOM對象均被認為是Host對象。

          3?
          類成員的訪問方式

          ???
          在面向?qū)ο笳Z言程序設計中,常見的類成員訪問方式有public、protected和private。在ECMAScript中,只有public一種訪問方式,對象中所有的屬性和方法都是可見的,因此,在程序設計時需要額外注意系統(tǒng)安全性的問題。在沒有合理的程序規(guī)范之前,程序員在編寫ECMAScript代碼時,通常使用一定規(guī)范的命名方式來說明該屬性或方法是私有的(僅僅是說明而已,實際上還是公有的),例如在名稱前后加上下劃線,或只在名稱前加下劃線。另外,在ECMAScript中沒有static方法。

          4? this
          關鍵字

          ??? this關鍵字是ECMAScript中一個非常重要的概念,通常在對象的方法中使用。

          function?whatFruit()?{
          ??alert(
          this.color);
          }


          var?table1?=?new?Object;
          table1.fruit?
          =?"apple";
          table1.whatFruit?
          =?whatFruit;
          var?table2?=?new?Object;
          table2.fruit?
          =?"pear";
          table2.whatFruit?
          =?whatFruit;
          table1.whatFruit();??
          //輸出apple
          table2.whatFruit();??//輸出pear

          ??? 當一個變量前面沒有對象或this來引用時,ECMAScript認為該變量是一個本地的或全局變量,于是在本地和全局中去搜尋該變量,如果最后仍沒有找到,將會在alert中輸出null。

          ??? 文章待續(xù)……

          posted @ 2006-06-30 15:20 Flyingis 閱讀(2362) | 評論 (0)編輯 收藏

          JavaScript 調(diào)試工具

          ??? 作者:Flyingis
          ?
          ??? JavaScript代碼看起來總是要比Java、C#亂的多,可能是自己還不熟悉JavaScript編程,因此一款優(yōu)秀的JavaScript調(diào)試器就顯得格外重要。目前在網(wǎng)絡和書上見到最多的有:

          ??? Microsoft Script Debugger: 集成在IE中的一款很原始的調(diào)試工具,具備基本的調(diào)試功能,除了可以用于調(diào)試客戶端腳本,還能調(diào)試在Microsoft IIS上運行的服務器端腳本。該工具命令窗口是基于文本的,針對VBScript和IE環(huán)境進行調(diào)試會更加適用。
          ?
          ??? Firefox JavaScript Console: 可以記錄JavaScript中出現(xiàn)的所有警告和錯誤,診斷出大多數(shù)錯誤。工具比較簡單實用。
          ?
          ??? Venkman: 一個基于Mozilla的瀏覽器的JavaScript調(diào)試環(huán)境,是Mozilla瀏覽器的一個擴展。Venkman基于Mozilla JavaScript調(diào)試API(js/jsd),js/jsd API 構(gòu)成了 Netscape JavaScript Debugger 1.1的基礎,Netscape瀏覽器4.x系統(tǒng)都提供了這個調(diào)試工具。Venkman是目前比較流行的JavaScript調(diào)試工具。

          ??? 相關下載:

          ??? http://www.hacksrus.com/~ginda/venkman/
          ??? 上面最新的版本是0.9.85,對于Firefox只能支持1.5以前的版本。

          ??? https://dwr.dev.java.net/files/documents/2427/22010/venkman-0.9.85.jw2.xpi
          ??? venkman-0.9.85.jw2.xpi是venkman-0.9.85xpi的修改版本,可以支持Firefox 1.5.0。?

          ??? https://addons.mozilla.org/firefox/216/
          ??? 在Mozilla官方站點上,venkman有了另外的一個名稱——JavaScript Debugger,已經(jīng)發(fā)布了0.9.87版本,支持Firefox 0.9-3.0,Mozilla 1.0-1.8,Thunderbird 0.9-3.0的所有版本瀏覽器。
          ??? 除了官方網(wǎng)站外,該工具的擴展安裝也可以通過鏈接
          ??? http://www.aygfsteel.com/Files/flyingis/javascript_debugger-0.9.87.rar進行本地下載。
          ?
          ??? 另外有一些JavaScript專用IDE,有興趣可以試用一下:
          ?
          ??? Cardinal JavaScript IDE:
          ??? http://home.earthlink.net/~mafriedman/ide/

          ??? JavaScript IDE for Eclipse:
          ??? http://www.basement.org/archives/2005/09/js_eclipse_javascript_ide for.html

          ??? JavaScript IDE(共享軟件):
          ??? http://www.downloadjunction.com/product/software/42264/index.html

          posted @ 2006-06-16 20:16 Flyingis 閱讀(13304) | 評論 (3)編輯 收藏

          ECMAScript 基礎

               摘要: JavaScript三大核心之一ECMAScript語言快速入門基礎。
          目前已更新:ECMAScript語言基本特點;原始數(shù)據(jù)類型;數(shù)據(jù)轉(zhuǎn)換;Type Casting;引用類型;操作符和語句;Functions……
          最近更新日期:2006-6-16  閱讀全文

          posted @ 2006-06-13 15:36 Flyingis 閱讀(3652) | 評論 (4)編輯 收藏

          JavaScript 基本組成

          ??? JavaScript的學習,以Nicholas C.Zakas的《Professional JavaScript for Web Developers》為基礎材料。

          ??? JavaScript作為一種網(wǎng)絡客戶端的腳本語言,由以下三部分組成:

          1.? ECMAScript--JavaScript的核心,描述了語言的基本語法和對象。

          ??? ECMAScript經(jīng)歷了三個版本的更新,現(xiàn)在大多數(shù)網(wǎng)絡瀏覽器都支持Edition3。ECMAScript主要提供語言相關的信息與標準,如語法、類型、聲明、關鍵字、保留字、操作運算符、對象等等。

          2.? DOM--The Document Object Model,描述了作用于網(wǎng)頁內(nèi)容的方法和接口。

          ??? DOM是HTML的一個應用程序接口,它也經(jīng)歷了三個版本的更新,其中以第一和第二個版本使用最為廣泛,在第二個版本中,最重要的特性莫過于提供了事件響應的接口,處理CSS的接口,移動窗口的接口,并且能夠控制代碼樹的結(jié)構(gòu)等等。
          ??? 除了使用最多的DOM Core和DOM HTML標準接口外,其他的部分語言也擁有自己的DOM標準,如SVG、MathML、SMIL。

          3.? BOM--The Browser Object Model,描述了和瀏覽器交互的方法和接口。

          ??? 例如彈出新的瀏覽器窗口,移動、改變和關閉瀏覽器窗口,提供詳細的網(wǎng)絡瀏覽器信息(navigator object),詳細的頁面信息(location object),詳細的用戶屏幕分辨率的信息(screen object),對cookies的支持等等。BOM作為JavaScript的一部分并沒有相關標準的支持,每一個瀏覽器都有自己的實現(xiàn),雖然有一些非事實的標準,但還是給開發(fā)者帶來一定的麻煩。

          posted @ 2006-06-11 11:37 Flyingis 閱讀(3320) | 評論 (0)編輯 收藏

          了解 Ajax 框架--充電開始

          ??? 作者:Flyingis
          ???
          ??? 這學期一直忙著找工作、畢業(yè)論文和畢業(yè)前的各種手續(xù),學習速度放慢了不少,大多數(shù)時候只是上來看看。現(xiàn)在正式開始充電,補充新的知識,為了工作需要,首先從客戶端技術Ajax開始。

          ??? Ajax高手在Blogjava上有不少,還有眾多潛水高手,在這里,隨筆記錄的僅僅是自己的學習軌跡,不足之處希望大伙能指出,和大家一起討論,幫助我提高。“
          工欲善其事,必先利其器”,首先總結(jié)一些Ajax常用的框架。

          ??? Ajax框架有基于服務器端和客戶端兩種,多數(shù)是開源實現(xiàn),并且發(fā)展速度很快。

          ??? 服務器端框架

          ??? 1.? Sajax
          ??? Sajax擁有活躍的社區(qū),支持Perl、Python、Ruby、ASP等語言,每種語言Sajax都有一個簡單的庫,利用Sajax可以直接從JavaScript調(diào)用服務器代碼。
          ??? 官方網(wǎng)站:
          http://www.modernmethod.com/sajax

          ??? 2.? JSON
          ??? JSON作為JavaScript語言的一個子集,是一種描述數(shù)據(jù)的輕量級語法,和XML類似,用于交換數(shù)據(jù)。XML相關的有XML-RPC,JSON也有JSON-RPC遠程調(diào)用協(xié)議,它在Java、Ruby、Python、Perl中都有實現(xiàn)。
          ??? 網(wǎng)上參考:http://www.crockford.com/json/?。

          ??? 3.? DWR
          ????DWR這個字眼出現(xiàn)的頻率較高,在網(wǎng)上搜索了一下,查到DWR全稱是Direct Web Remoting,代表著可以直接從JavaScript遠程調(diào)用Java方法。使用DWR需要一些額外的配置,如編輯Web應用的描述文件,編輯DWR的配置文件,來指定可以遠程創(chuàng)建和調(diào)用的類,從這種方式可以看出其中存在一些安全隱患,但是,由于DWR支持常用的Struts/WebWork/Tapestry Web框架,在Apache協(xié)議下發(fā)布,加上豐富的文檔資料,使得DWR在Java領域非常流行。
          ??? 介紹DWR的相關文章可以參考:
          ??? http://www.aygfsteel.com/mstar/category/2359.html
          ??? http://www.aygfsteel.com/zkjbeyond/category/11348.html
          ????更多信息可以訪問:http://getahead.ltd.uk/dwr/index

          ??? 4.? Buffalo
          ??? Buffalo是由國人開發(fā)的Ajax框架。Buffalo中定義了Web遠程調(diào)用的傳輸基礎,并且將遠程調(diào)用對象完整的序列化到了本地,成為可以被JavaScript編程觸及的對象。Buffalo中的重要組件-BuffaloBinding,提供了將JavaScript對象綁定到HTML元素的能力。這種綁定將是無侵入的,只需要在HTML元素中加入若干個不影響排版的屬性,即可將數(shù)據(jù)與界面綁定。Buffalo1.2引入了新的眾多的特性包括,新的重新改寫的Spring集成,與流行JavaScript庫Prototype的集成,支持瀏覽器前進后退按鈕等等。
          ??? 下載鏈接:http://www.amowa.net/buffalo/?。[引自CSDN]

          ??? 5.? Ajax.Net
          ??? 顧名思義,Ajax.Net是.Net平臺下的Ajax框架,它可以從JavaScript客戶端調(diào)用.Net方法。Ajax.Net所包括的DLL可以和VB.Net/C#配合使用,其相關文檔也很多。參考網(wǎng)站:http://ajax.net/?。

          ????6.??Atlas
          ??? 這是Microsoft的一個項目,其特點在于提供客戶端腳本框架、ASP.Net控件及Web服務集成。微軟的項目,還是值得關注的。
          ??? 相關介紹:http://blog.joycode.com/saucer/archive/2005/06/30/58284.aspx/?。

          ????7.? Ruby on Rails
          ??? 這個就不用多說了,前段時間開始就炒的異常火熱的一個框架,建立在Ruby語言基礎上,其最顯著的特性是能夠快速開發(fā)Web應用,使用Rails會覺得Ajax非常簡單。Rails擁有許多JavaScript庫,另外有一個模塊封裝了Ruby的JavaScript調(diào)用。對各種Rails的介紹,可以參考江南白衣的文章各系Rails大點兵。網(wǎng)站參考:http://www.rubyonrails.org/

          ??? 客戶端框架

          ??? 1.? Dojo
          ??? 最老的框架之一,2004年9月開始開發(fā),它具有一個獨特的特性,即支持向后和向前按鈕,通過注冊一個回調(diào)的方法,使得用戶在點擊向后和向前按鈕的時候調(diào)用改方法,實現(xiàn)后退前進的功能。Dojo是相對成熟的工具包之一。
          ??? 具體內(nèi)容參考網(wǎng)站:
          http://dojotoolkit.org/

          ??? 2.? Rico
          ??? Rico側(cè)重點在于拖放效果、數(shù)據(jù)網(wǎng)格、自定義頁面布局、淡入淡出等人性化效果的輕易實現(xiàn),使用Rico需要Prototype.js庫來支撐,
          zkjbeyond有關于Prototype.js的基本介紹
          ??? Rico官方網(wǎng)站:
          http://openrico.org/home.page/

          ??? 3.? Flash/JavaScript集成庫
          ??? 當我剛進入大學的時候,F(xiàn)lash技術和JavaScript特效都是當時網(wǎng)絡中最流行的字眼,但Flash豐富的用戶體驗更讓人印象深刻,小小系列以及雪村的網(wǎng)絡MTV都是比較早的作品,還有眾多Flash制作的網(wǎng)站。在現(xiàn)在Ajax流行的環(huán)境下,F(xiàn)lash的臃腫和需要安裝插件機制使得它不再那么耀眼,但是如果要混合使用Flash和Ajax,則可以使用Flash/JavaScript集成庫,這個工具集可以使得JavaScript和ActionScript(Flash中支持的語言)能夠相互調(diào)用,傳遞數(shù)據(jù)。
          ??? 相關資料可以訪問:
          http://weblogs.macromedia.com/flashjavascript/

          ??? 4.? SACK
          ??? SACK是一個針對XMLHttpRequest的瘦包裝器,可以簡化Ajax開發(fā),它由一個JavaScript文件組成,包含很少的代碼,入門比較方便,它最主要的特性應該就是足夠簡單。
          ??? 相關信息可以訪問:
          http://twilightuniverse.com/projects/sack/

          ??? 5.? RSLite
          ??? RSLite是遠程腳本的一個實現(xiàn),從2000年開始發(fā)展。它的特性在于擁有廣泛瀏覽器的支持(因為沒有利用XMLHttpRequest對象),它是一個輕量級的框架。
          ??? 網(wǎng)站信息:
          http://www.ashleyit.com/rs/rslite/

          ??? 6.? Google AJAXSTL
          ??? Google AJAXSTL是使用XPath的XSL轉(zhuǎn)換(XSLT)的JavaScript實現(xiàn)。該工具包很小,并且還不完善,但作為使用AJAX的先驅(qū),還是應該給予一定的關注。
          ??? 開源鏈接:http://goog-ajaxslt.sourceforge.net/

          ??? 這些是個人最初所關注的一些框架,
          ComputerboyAjax框架匯總Ajax Resources有更多的對Ajax框架及相關資源的介紹。

          posted @ 2006-06-10 17:42 Flyingis 閱讀(4696) | 評論 (0)編輯 收藏

          學術與工作

          ??? 作者:Flyingis

          ??? 在校園里我已經(jīng)度過了第二十四個年頭,一直還沒有機會踏入到社會中去經(jīng)歷工作的鍛煉。在大學校園里六年,我感受的是學術的氛圍,學習的是做學問的方法。只是在碩士期間參與導師的一個橫向項目,讓我第一次有機會在實際工程項目中施展拳腳,也親身感受到了學術與項目工作之間的差異。

          ??? 做學術和實際工作有一些共同點,它們都需要有踏實認真的學習態(tài)度,都需要循序漸進不斷積累,它們對參與者態(tài)度的要求是一致的。并且都需要有良好的合作團隊來使得大家共同提高,事半功倍。但是它們又存在太多的不同,主要體現(xiàn)在以下幾個方面:

          ??? 1. 學術上對理論強調(diào)的比較多,任何發(fā)表在高水平期刊上的論文,沒有厚實的理論基礎作為支撐根本不可能發(fā)表,即使是在Nature&Science上發(fā)表的原創(chuàng)性論文,也是“站在巨人的肩膀上”完成的,因此,做學術需要看大量的相關文獻資料,在前人的基礎上做研究。工作側(cè)重的是實際工作經(jīng)驗,和完成工作的能力,在工作中,老板基本不會過問你采用什么技術來實現(xiàn)這一目標,他需要了解的是你能否達到他的目標,需要多長時間,預計完成的效果如何,能否滿足客戶要求等等,有時候碰到一個難點可能有多種方法來解決,當技術人員所具備的技術并不是最高效的方法,但也能解決問題,如果基本不影響結(jié)果往往會采用自己所熟悉的方法來完成,因為客戶他們一般是不怎么太關心中間的技術細節(jié)的,但在學術中講究的就是最好,要求的是突破前人的研究成果,否則你的成果只能說是一個應用,而不是創(chuàng)新。

          ??? 2. 做學術,在中國注重的還是發(fā)表的文章,期刊的質(zhì)量越高越好,這種評判一個人學術水平的高低既合理,但又存在問題。合理體現(xiàn)在,一篇高質(zhì)量或至少是自己精心研究完成的論文,代表的是自己研究的精華,垃圾論文不說,寫一篇好的論文其實真的不是件容易的事情,特別是理學的學科,一篇短短的萬字不到的論文,需要你閱讀的可能是百萬字的文獻,以及對文獻的思考,再加上自己在該領域的實際工作的提煉,文字、排版、制圖、分析、投稿、修改,每個過程都不省事,在SCI特別是外文的SCI上發(fā)表一篇文章的確是自己的精心之作。但其中存在的問題,就是急功近利的人太多,不僅是在實際工作中,在學術上浮躁的人也太多太多,使得現(xiàn)在國內(nèi)垃圾刊物靠論文賺錢,一般的核心期刊靠專輯來盈利,并靠有國家自然科學基金、985、973重大項目支撐的論文撐門面,減少了對學術本質(zhì)的專注,使得學術領域也漸漸成為了中國最腐敗的領域之一。做項目,注重的是最后的運行效果能否滿足客戶需要,中間的過程和技術框架只是項目完成報告中的例行公事,只要軟件能夠運行起來,并在功能、效率、安全、界面上都符合要求,用.net還是Java,用WebWork還是JSF其實都是次要的了,更不用去過多的考慮我采用的技術在理論上是否達到了國內(nèi)領先、國際先進了,關鍵還是結(jié)果。工作中,當然也逃不掉浮躁之風,特別是政府的政績工程項目,往往是爛掉不能用的。

          ??? 3. 做學術,從理論上說,在某些領域可能不需要太多的資金支持,當自己研究成果出來了就可以名利雙收,這樣的學者在國外可能更多一些。做項目工作,沒有錢是肯定不行的,否則怎么能讓這么多員工安家樂業(yè),只有資金才能創(chuàng)造好的工作環(huán)境,才能吸引人才。

          ??? 前段時間忙自己的畢業(yè)論文,確實讓我著急了幾天,因為自己兩年畢業(yè)時間比較倉促,論文的題目和自己先前做的項目又沒有任何關系,只能從一個應用的角度,加上一些理論經(jīng)驗的支撐,完成了論文,碩士論文總共所花的時間是一個半月,真正緊張從早到晚忙論文的時間是半個月,自己不是貶低自己論文的水平,至少能夠符合現(xiàn)在對碩士論文的要求,但我知道自己能做的更好,并且能好不少,如果我有一個更好的平臺,自己所做的項目能支撐自己的論文。還好我完成了論文,我之前的項目經(jīng)驗也讓我在找工作的時候沒有碰到什么困難,但看著BlogJava上眾多高手對技術的癡迷和豐富的工作經(jīng)驗,有時我在想我在學校里獲得了什么,一點項目經(jīng)驗和一個學位證,但兩者根本就是脫離的,在我們這批學生中,我還算是比較幸運的,那其他的人怎么辦呢?因此才會出現(xiàn)現(xiàn)在企業(yè)招人難,但學生也過剩的問題,看到這兩天BlogJava中也有
          對企業(yè)招人的討論 。一位博士對我說過,在碩士、博士階段,如果學術上沒有什么成就,你獲得的就是交際層面的提高、擴大,還有一個學位證,同學資源的確是寶貴的,學位證,在中國有還是比沒有好,他說的沒錯。

          ??? 當然,不是所有的畢業(yè)生都是能力差的,出色的也不少,可以這樣說,只要是在大學里認真做過事情,學習過知識的人,找工作都不難。文中所說的,只是作者自身的一些感受。馬上就要奔赴工作崗位了,從學術轉(zhuǎn)到工作,對我來說應該問題不大,但自己已經(jīng)開始感覺到壓力,踏實工作是我現(xiàn)在唯一能想到的事情。

          ??? 忘了一件事,今天六一,這節(jié)日早已不屬于我們,但祝愿博客園中已成為父母的程序員的寶寶們節(jié)日快樂,健康成長!

          posted @ 2006-06-01 11:59 Flyingis 閱讀(1364) | 評論 (6)編輯 收藏

          一幅土地資產(chǎn)評價簡圖

          ??? 近段時間在忙畢業(yè)設計,研究程序開發(fā)設計的時候少了。
          ???
          ??? 傳一張論文中用到的圖示,遙感數(shù)據(jù)的解譯、編輯、空間地理計算、成圖在Erdas + ArcGIS中完成,計算的理論基礎層次分析法(AHP)和Saaty提出的1~9比較標度法。圖中省略了一些圖層信息和基本元素。(點擊標題進入可以看到圖

          土地資產(chǎn)價值分布圖.jpg

          posted @ 2006-05-23 10:02 Flyingis 閱讀(908) | 評論 (0)編輯 收藏

          GeoServer 1.3.1 beta 發(fā)布(重大更新)

          地理信息系統(tǒng)服務器 GeoServer OpenGIS Web 服務器規(guī)范的 J2EE 實現(xiàn),利用 GeoServer 可以方便的發(fā)布地圖數(shù)據(jù),允許用戶對特征數(shù)據(jù)進行更新、刪除、插入操作,通過 GeoServer 可以比較容易的在用戶之間迅速共享空間地理信息。

          GeoServer 主要特性包括:兼容 WMS WFS 特性;支持 PostGIS Shapefile ArcSDE Oracle VPF MySQL MapInfo ;支持上百種投影;能夠?qū)⒕W(wǎng)絡地圖輸出為 jpeg gif png SVG KML 等格式;能夠運行在任何基于 J2EE/Servlet 容器之上;嵌入 MapBuilder 支持 AJAX 的地圖客戶端;除此之外還包括許多其他的特性

          GeoServer 最新的版本 1.3.1 beta 增加了 GeoTools 2.2.x GeoTools 是一款基于 Java 的開源 GIS 工具集,允許用戶對地理數(shù)據(jù)進行基本操作。通過 GeoTools 的各種接口和 helper 類,可以寫入新的數(shù)據(jù)格式,通過 GeoTools GeoServer 提供的插件,在不進行重新編譯的情況下,可以讓 GeoServer 支持更多的數(shù)據(jù)格式,甚至只需要通過 GUI option 設置即可。

          一直都比較關注 GeoServer GeoTools 的發(fā)展情況, GeoServer 提供了一個相對簡易的地理信息服務系統(tǒng), GeoTools 包含地理信息數(shù)據(jù)基本操作的源碼實現(xiàn),是學習地理信息基礎研發(fā)和 WebGIS 的經(jīng)典資料庫,兩者的合并和今后的發(fā)展無疑會吸引眾多地理信息開發(fā)者的目光。
          ??? ?


          GeoServer 主頁: http://docs.codehaus.org/display/GEOS/Home

          GeoTools 主頁: http://www.geotools.org/

          GeoServer 1.3.1 beta 下載:

          http://docs.codehaus.org/display/GEOS/2006/05/06/GeoServer+1.3.1+beta+release

          posted @ 2006-05-14 11:13 Flyingis 閱讀(3076) | 評論 (6)編輯 收藏

          模型與地理建模

          作者: Flyingis

          模型是為了理解和預測現(xiàn)實世界而構(gòu)建的一種有效的替代物,它不是現(xiàn)實世界的復制,它是物體的一種簡化,并能夠體現(xiàn)物體的關鍵特征。地理學研究的目的是理解人類與環(huán)境間的關系,在地理建模過程中必然包含了許多人為或主觀因素,但也不能隨心所欲去表達所要表達的世界。一個好的模型可以把一個復雜的問題簡單明了地表達出來,反之則會將問題描述的非常復雜難懂。

          建模的步驟一般分為:建立概念模型;建立定量模型;模型檢驗(模型驗證、模型確認);模型應用。目前,由于地理問題的復雜性和不確定性,地理學的量化水平還比較低,其建模主要是借鑒地質(zhì)學、生態(tài)學和水文學等相關學科的模型和建模方法來研究有關地理環(huán)境問題。

          地理建模一般具有復雜性、空間性、時間性和模糊性特點。在地理學中,建模的對象是地理系統(tǒng),它具有明確的時間和空間特征。地理建模包含兩種含義:空間實體對象建模和地理問題建模。空間實體對象是地理特征的抽象與幾何表示,它的建模是地理信息系統(tǒng)所關注的主要內(nèi)容。地理問題建模則涉及到地理學的所有領域。

          在地理建模中,地理信息系統(tǒng)提供了數(shù)據(jù)的支持、模型庫的管理和建模結(jié)果的可視化,是地理建模重要的技術支持。地理信息系統(tǒng)側(cè)重于空間數(shù)據(jù)的存儲、管理和制圖,分析方法基本以空間位置為核心,關注的是對象之間的空間位置關系。地理建模中,空間位置是作為數(shù)據(jù)的屬性來考慮,研究各個要素之間的關系以及這種關系的表現(xiàn)形式。歸納起來,地理信息系統(tǒng)的主要研究內(nèi)容是空間數(shù)據(jù)的管理、空間關系的分析和表示,地理建模研究的是地理要素之間關系的建立、解釋和分析。

          地理建模針對地理問題,使用系統(tǒng)分析方法、物理方法和數(shù)學方法建立模型,對模型進行分析,以便為政府或經(jīng)濟、社會發(fā)展的決策提供基礎支持。地理建模應用的方法,不同于決策分析中應用的方法,決策分析主要涉及信息論和控制論的內(nèi)容,如規(guī)劃方法、投入產(chǎn)出方法等。

          posted @ 2006-05-09 10:35 Flyingis 閱讀(1403) | 評論 (1)編輯 收藏

          網(wǎng)站項目管理(二)

               摘要: 網(wǎng)站項目管理中的團隊氛圍,項目文檔,和其他要求。  閱讀全文

          posted @ 2006-04-25 23:09 Flyingis 閱讀(2314) | 評論 (1)編輯 收藏

          網(wǎng)站項目管理(一)

               摘要: 網(wǎng)站項目管理中的網(wǎng)站界面,項目進度,和人力資源。  閱讀全文

          posted @ 2006-04-25 11:14 Flyingis 閱讀(2044) | 評論 (1)編輯 收藏

          GIS 緩沖區(qū)應用及算法實現(xiàn)

          作者: Flyingis

          地理信息空間幾何關系分析主要包括鄰近度 (proximity) 分析、疊加分析、網(wǎng)絡分析等。緩沖區(qū)分析是鄰近度分析的一種,緩沖區(qū)是為了識別某一地理實體或空間物體對其周圍地物的影響度而在其周圍建立具有一定寬度的帶狀區(qū)域。緩沖區(qū)作為獨立的數(shù)據(jù)層進行疊加分析,可應用到道路、河流、環(huán)境污染源、居民點、輻射源等的空間分析,為某種應用目的提供科學依據(jù),另外,結(jié)合不同的專業(yè)模型,可以在生活、軍事、城鄉(xiāng)規(guī)劃等領域發(fā)揮重要的作用。

          針對點、線、面不同的幾何類型,建立緩沖區(qū)的方式相互有所不同。建立點緩沖區(qū)比較簡單,即以某點要素為圓心,以緩沖半徑 R 作圓,得到點要素的緩沖區(qū);線要素的緩沖區(qū)是以線為軸,以 R 為距離作兩側(cè)的平行線,在線的兩端構(gòu)建兩個半圓弧段,和平行線一起組成緩沖區(qū);面緩沖區(qū)的建立,是以面要素的邊界為基線向內(nèi)外側(cè)作平行線,平行線和基線里的區(qū)域就是面緩沖區(qū)。除此之外,還可以對柵格數(shù)據(jù)建立緩沖區(qū),根據(jù)不同的模型方程建立動態(tài)緩沖區(qū),不論對什么樣的數(shù)據(jù)建立緩沖區(qū),其基本方法都是相似的。

          緩沖區(qū)實現(xiàn)算法有矢量方法和柵格方法兩種。其中矢量方法數(shù)據(jù)量小,方法相對成熟,柵格圖像需要進行柵格像元之間進行布爾運算,當緩沖區(qū)較大時會帶來較重的運算負荷,實際運用中存在一定的局限性。矢量方法算法一般遵循以下步驟:

          :確定中心點——以中心點為圓心、 R 為半徑生成一個圓——得到緩沖區(qū)邊界

          線、面 :確定軸線——以距離 R 生成中心軸線的平行曲線——處理轉(zhuǎn)角弧段——對生成的弧段進行求交、合并運算——生成緩沖區(qū)邊界

          常用的矢量數(shù)據(jù)中心線擴張算法:

          角分線法

          基本思想:即“簡單平行線法”,在軸線的兩邊作出平行線,在轉(zhuǎn)角處形成尖角,兩端形成弧段,組成緩沖區(qū)。

          缺陷:難以保證在尖角處緩沖區(qū)左右邊線等寬;校正過程復雜,主要體現(xiàn)在軸線折角很大和很小時的情況;算法模型復雜,主要是因為幾何生成過程中需要處理較多的異常。

          凸角圓弧法

          基本思想:顧名思義,即是在轉(zhuǎn)角外側(cè)用圓弧來代替尖角,內(nèi)側(cè)仍然使用尖角的方法,生成緩沖區(qū)。

          實施步驟:

          1.??????? 直線性判斷,判斷相鄰三點是否在同一直線上;

          2.??????? 折點凸凹性判斷,確定轉(zhuǎn)角的地方哪側(cè)使用直線求交,哪側(cè)使用圓弧連接;

          3.??????? 凸點圓弧的嵌入,即將轉(zhuǎn)角外側(cè)形成的圓弧和兩邊的線段相連;

          4.??????? 邊線關系的判別與處理,島嶼多邊形參與緩沖區(qū)邊界的構(gòu)成,重疊多邊形不參與緩沖區(qū)邊界的構(gòu)成;

          5.??????? 緩沖區(qū)邊界的形成,具體是將重疊區(qū)域進行合并,繪制外圍的邊線,包括島嶼多邊形的輪廓,形成最終的緩沖區(qū)邊界。

          在緩沖區(qū)算法中,需要注意的一個問題是緩沖區(qū)多邊形的重疊與合并,包括同一要素緩沖區(qū)的重疊和多個要素之間緩沖區(qū)的重疊。柵格數(shù)據(jù)緩沖區(qū)內(nèi)的柵格具有一個與其影響度對應的一個值,如果重疊區(qū)域具有相同影響度則任取一值,如果不同則采取影響度大的代替影響度小的方法處理。對于矢量數(shù)據(jù)的處理算法有三種:數(shù)學運算法;矢量-柵格轉(zhuǎn)換法;矢量-柵格混合法。?

          posted @ 2006-04-17 15:25 Flyingis 閱讀(7755) | 評論 (9)編輯 收藏

          地理網(wǎng)格


          ??? 作者:Flyingis

          地理網(wǎng)格是將平面以某種規(guī)則分級的空間數(shù)據(jù)結(jié)構(gòu),具有較高的標準化程度,它有利于面向空間數(shù)據(jù)庫和幾何操作算法的研究和開發(fā)。使用地理網(wǎng)格可以將地理空間定位和地理特征描述關聯(lián)起來,以網(wǎng)格單位作為基本分辨率,控制在允許的誤差范圍內(nèi)。

          最常見的地理網(wǎng)格是經(jīng)線和緯線組成的網(wǎng)格系統(tǒng),網(wǎng)格由等度數(shù)間隔的經(jīng)線和緯線交叉組成,空間數(shù)據(jù)的屬性與經(jīng)緯網(wǎng)格內(nèi)的點相關聯(lián),方便網(wǎng)格內(nèi)空間數(shù)據(jù)的獲取與處理。網(wǎng)格系統(tǒng)可以在原有較小分辨率網(wǎng)格的基礎上創(chuàng)建更細的子網(wǎng)格,增大其分辨率。一個網(wǎng)格可以被分成 n- 2 個子網(wǎng)格,最常見的網(wǎng)格結(jié)構(gòu)即是n=2的四叉樹網(wǎng)格結(jié)構(gòu)。更普遍的,可以定義 nd 樹結(jié)構(gòu)的網(wǎng)格系統(tǒng),其主要特性有:

          1.??????? 在空間數(shù)據(jù)庫理論中,二維空間域便許存儲在存儲器的一個線性地址空間里,因此空間位置信息必須經(jīng)過一定的轉(zhuǎn)換才能存儲在計算機中,使用 nd 樹可以拓展線性空間的排序方法,便于計算機存儲。

          2.??????? 創(chuàng)建分級的一維地址。如果較大范圍的空間區(qū)域內(nèi)某種屬性值一致,則以較低分辨率的網(wǎng)格來表示,如果屬性值經(jīng)常變化,則用較高分辨率的網(wǎng)格來表示,這樣可以節(jié)省存儲空間。

          因此,用地理網(wǎng)格來模擬地球曲面的時候,最為關鍵的問題是分辨率和網(wǎng)格。使用地理網(wǎng)格的目的就在于對空間格局的一種表達,并且提供簡單有效的空間數(shù)據(jù)結(jié)構(gòu)算法。在空間數(shù)據(jù)結(jié)構(gòu)中,它既可以像柵格數(shù)據(jù)一樣用最小單元格來表達空間區(qū)域?qū)ο螅部梢韵袷噶繑?shù)據(jù)一樣用點代替?zhèn)鹘y(tǒng)的坐標點來表達空間實體的幾何特征,這兩種數(shù)據(jù)結(jié)構(gòu)分別對應于存儲區(qū)域信息的網(wǎng)格系統(tǒng)和存儲位置信息的網(wǎng)格系統(tǒng)。

          目前,建立全球地理網(wǎng)格模型還面臨許多困難,這些困難主要來自于基于地理坐標系統(tǒng)的地理網(wǎng)格還存在一些缺陷,例如網(wǎng)格單元面積不等所帶來的復雜性,網(wǎng)格的各種形式的變形,網(wǎng)格復雜的鄰接特性,這些都給實際應用帶來了困難。

          參考資料:
          GIS空間分析原理與方法
          ?

          posted @ 2006-04-13 23:19 Flyingis 閱讀(1716) | 評論 (0)編輯 收藏

          GIS空間分析

          ??? 作者:Flyingis

          ??? 空間分析是為了解決地理空間問題而進行的數(shù)據(jù)分析與數(shù)據(jù)挖掘,是從GIS目標之間的空間關系中獲取派生的信息和新的知識,是從一個或多個空間數(shù)據(jù)圖層中獲取信息的過程。空間分析通過地理計算和空間表達挖掘潛在的空間信息,其本質(zhì)包括探測空間數(shù)據(jù)中的模式;研究數(shù)據(jù)間的關系并建立空間數(shù)據(jù)模型;使得空間數(shù)據(jù)更為直觀表達出其潛在含義;改進地理空間事件的預測和控制能力。

          ??? 空間分析主要通過空間數(shù)據(jù)和空間模型的聯(lián)合分析來挖掘空間目標的潛在信息,而這些空間目標的基本信息,無非是其空間位置、分布、形態(tài)、距離、方位、拓撲關系等,其中距離、方位、拓撲關系組成了空間目標的空間關系,它是地理實體之間的空間特性,可以作為數(shù)據(jù)組織、查詢、分析和推理的基礎。通過將地理空間目標劃分為點、線、面不同的類型,可以獲得這些不同類型目標的形態(tài)結(jié)構(gòu)。將空間目標的空間數(shù)據(jù)和屬性數(shù)據(jù)結(jié)合起來,可以進行許多特定任務的空間計算與分析。

          ??? 現(xiàn)在不少空間分析方法已經(jīng)在GIS軟件中實現(xiàn),ArcGIS ToolsBox中就集成了大量的空間分析工具,例如空間信息分類、疊加、網(wǎng)絡分析、領域分析、地統(tǒng)計分析等等,另外,還有一系列適應地理空間數(shù)據(jù)的高性能計算模型和方法,例如人工神經(jīng)網(wǎng)絡、模擬退火算法、遺傳算法等等。但總的來說,目前在GIS軟件中實現(xiàn)的專業(yè)空間分析模塊還比較少,由于空間分析理論自身的不完善,也使得還沒有比較全面、權(quán)威的軟件包集成于GIS軟件中。目前GIS軟件與空間分析軟件相結(jié)合的方式有兩種,一種是高度耦合,一種是松散耦合。

          ??? 高度耦合結(jié)構(gòu)即把空間分析模塊嵌入到GIS軟件包中,供用戶直接從圖形界面中選擇各種功能,GIS中相關的數(shù)據(jù)直接可以參與到空間分析計算中,這種方式方便了用戶,但代價是開發(fā)費用較高,實現(xiàn)周期長。目前也只有少數(shù)的大型GIS公司才會深入的涉足到高耦合結(jié)構(gòu)GIS軟件的設計與開發(fā)中,例如美國ESRI公司。

          ??? 松耦合結(jié)構(gòu)則是在相對獨立的GIS軟件和空間分析軟件之間使用一個數(shù)據(jù)交換接口,GIS軟件中的數(shù)據(jù)通過接口為空間分析軟件提供基本的分析數(shù)據(jù)源,經(jīng)空間分析軟件計算出的結(jié)果通過接口以圖形的方式顯示在GIS軟件中,實現(xiàn)這種架構(gòu)方式相對容易,費用也相對較低,一般可以使用開源的GIS軟件即可實現(xiàn)這種結(jié)構(gòu)。

          ??? 在GIS中開發(fā)有效的空間分析工具相對難度較大,《地理空間數(shù)據(jù)分析與GIS》中將GIS環(huán)境下空間分析方法分為六種:

          1.? 確定性空間分析
          2.? 探索性空間數(shù)據(jù)分析
          3.? 時空數(shù)據(jù)分析
          4.? 專業(yè)模型集成分析
          5.? 智能化空間分析
          6.? 可視化空間分析

          posted @ 2006-04-07 16:13 Flyingis 閱讀(5205) | 評論 (4)編輯 收藏

          地理空間數(shù)據(jù)挖掘

          ??? 作者:Flyingis

          ??? 數(shù)據(jù)挖掘是一個由數(shù)據(jù)庫、人工智能、數(shù)理統(tǒng)計和可視化等多學科與技術交叉、滲透、融合形成的交叉學科。地理空間數(shù)據(jù)挖掘(Geospatial Data Mining)是數(shù)據(jù)挖掘的一個研究分支,即從地理空間數(shù)據(jù)庫中挖掘時空系統(tǒng)中潛在的、有價值的信息、規(guī)律和知識的過程,包括空間模式與特征、空間與非空間數(shù)據(jù)之間的概要關系等。數(shù)據(jù)挖掘可以用來模擬事物的一種變化方式,通過一些先驗的知識或樣本來判斷事物未來的發(fā)展狀況或某種狀態(tài)。地理空間數(shù)據(jù)挖掘則可以作為一種可用的科學方法來解決一些地學相關的問題,對地學狀況的變化作出分析和預測,這些分析很多都是基于對空間分析的基礎上的,因此地理空間數(shù)據(jù)挖掘的根本是事物的空間特性,例如方位、距離、拓撲關系等等。

          ??? 數(shù)據(jù)挖掘需要通過訪問正確、完整和集成的數(shù)據(jù)庫才能進行深層次的分析,挖掘出有用的信息,而這些正確的、完整的數(shù)據(jù)信息則是由數(shù)據(jù)立方體所提供的,其聯(lián)機分析功能OLAP為數(shù)據(jù)挖掘提供了一個良好的操作平臺。

          ??? 地理空間數(shù)據(jù)挖掘典型方法主要有以下幾種:
          1.? 地理空間統(tǒng)計方法
          ??? 地理空間統(tǒng)計是指分析地理空間數(shù)據(jù)的統(tǒng)計方法,主要是利用了空間中鄰近的要素通常比相距較遠的要素具有較高的相似性這一原理。該模型可以分為三類:地統(tǒng)計、格網(wǎng)空間模型和空間點分步形態(tài)。
          2.??地理空間聚類方法
          ??? 地理空間數(shù)據(jù)聚類是按照某種距離度量準則,在大型、多維數(shù)據(jù)集中標識出聚類或稠密分布的區(qū)域,從而發(fā)現(xiàn)數(shù)據(jù)集的整體空間分步模式。該方法主要分為四類:分割法、層次法、基于密度的方法及基于網(wǎng)格的方法。
          3.? 地理空間關聯(lián)分析
          ??? 地理空間關聯(lián)分析利用空間關聯(lián)規(guī)則提取算法發(fā)現(xiàn)空間數(shù)據(jù)庫中空間目標間的關聯(lián)程度,從而進行空間數(shù)據(jù)關聯(lián)分析的知識發(fā)現(xiàn)研究,其核心內(nèi)容是挖掘空間關聯(lián)規(guī)則。
          4.? 地理空間分類與預測分析
          ??? 地理空間分類與預測是根據(jù)已知的分類模型把數(shù)據(jù)庫中的數(shù)據(jù)映射到給定類別中,進行數(shù)據(jù)趨勢預測分析的方法。人工神經(jīng)網(wǎng)絡可以作為該方法的典型技術應用于實際研究中。
          5.? 異常值分析
          ??? 顧名思義,異常值分析即將數(shù)據(jù)庫中與通常的行為或數(shù)據(jù)模型不一致的數(shù)據(jù)提取出來的分析方法。通過這種方法可以提取出數(shù)據(jù)庫中的異常信息或噪聲數(shù)據(jù),有時也會導致隱藏的重要數(shù)據(jù)丟失。異常值分析方法主要有三種:基于統(tǒng)計的異常值分析、基于距離的異常值探測、基于偏差的異常值探測。

          ??? 使用地理空間數(shù)據(jù)挖掘方法進行數(shù)據(jù)分析、信息提取時,Mathlab是一個非常好的輔助工具,很多函數(shù)庫和可視化界面可以方便的使用,也可以很好的判斷算法是否達到了應用要求,同時還可以作為其他語言實現(xiàn)數(shù)據(jù)挖掘方法的一種對比參考。

          參考資料:
          GIS空間分析原理與方法

          posted @ 2006-04-05 19:58 Flyingis 閱讀(2033) | 評論 (2)編輯 收藏

          僅列出標題
          共6頁: 上一頁 1 2 3 4 5 6 下一頁 
          主站蜘蛛池模板: 砀山县| 洞口县| 泽普县| 西充县| 钦州市| 新河县| 洞口县| 中江县| 潜山县| 清水县| 财经| 上蔡县| 岑巩县| 木里| 固安县| 怀来县| 棋牌| 定日县| 深圳市| 政和县| 壶关县| 岢岚县| 黄陵县| 福泉市| 孙吴县| 靖州| 竹山县| 秀山| 莱阳市| 河曲县| 胶州市| 张掖市| 孝义市| 昌乐县| 屯门区| 梨树县| 郎溪县| 岚皋县| 台中县| 壶关县| 泊头市|