<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Flyingis

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

    BlueViewer 地圖加載分析(C#)

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

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

    關(guān)于 BOM

    ??? 作者:Flyingis

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

    BOM-Structure.gif


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

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

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

    SVG 中使用 JavaScript

    ??? 作者:Flyingis

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

    ??? 一個(gè)簡單的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>
    顯示一個(gè)正方形和一個(gè)圓形
    </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中的標(biāo)簽,可以和HTML標(biāo)簽作個(gè)簡單的比較,SVG中的<svg/>和HTML中的<html/>類似,<desc/>和<title/>類似,<g/>和<div/>類似。

    ??? 在SVG中可以使用JavaScript,當(dāng)需要遵循一些規(guī)則:必須使用type屬性;language屬性是非法的;使用特殊XML字符時(shí)可以使用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>
    顯示一個(gè)正方形和一個(gè)圓形
    </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可以寫在如下幾個(gè)位置:<desc/>標(biāo)簽之后;在<defs/>中;在<g/>標(biāo)簽之前。

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

    瀏覽器中的 JavaScript

    ??? 作者:Flyingis

    ??? 之前寫過不少JavaScript基礎(chǔ)的隨筆,基本上都是針對其語法、語言結(jié)構(gòu)來論述的。但是,現(xiàn)在使用JavaScript最多的地方是在瀏覽器中,這里就簡單談?wù)劄g覽器中使用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é)省資源開銷,是因?yàn)楫?dāng)兩個(gè)頁面同時(shí)使用一個(gè)js文件時(shí),該js文件只會被下載一次,避免的相同代碼重復(fù)下載增加頁面的代碼量。

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

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

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

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

    ??? XHTML帶來的另外一個(gè)變化就是使用CDATA,使用CDATA可以在表達(dá)式中使用一些特殊字符,增強(qiáng)代碼的可讀性,避免使用"&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實(shí)體所帶來的閱讀上的困難。當(dāng)然,這也存在舊的瀏覽器無法識別CDATA的問題,需要我們加入注釋來隱藏CDATA標(biāo)簽。大家可以想到,最好的辦法還是使用外聯(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,但我們應(yīng)該盡量按照XHTML標(biāo)準(zhǔn)來書寫代碼,使得該標(biāo)準(zhǔn)能夠獲得更大更廣泛的支持。

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

    正則表達(dá)式--簡單模式

    ??? 作者:Flyingis

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

    ??? Metacharacters

    ??? 正則表達(dá)式的Metacharacters主要包括:

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

    ??? 當(dāng)需要使用這些符號的時(shí)候,需要在前面加上一個(gè)反斜杠"\",例如:

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

    ??? 一個(gè)字符的表示可以使用它的文字符號,也可以使用ASCII碼或Unicode碼來代碼它。例如,當(dāng)一個(gè)字符使用ASCII碼表示的時(shí)候,我們需要在一個(gè)兩位十六進(jìn)制的編碼前加上"\x"。

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

    ??? 當(dāng)然,使用十進(jìn)制來表示字母a。

    var?reg?=?/\141/;

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

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

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

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

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

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

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

    ??? Simple classes

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

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

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

    ??? Negation classes

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

    ??? Range classes

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

    ??? Combination classes

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

    ??? 因?yàn)橛性S多樣式都不停在重復(fù)使用,因此一組預(yù)定義好的character classes可以用來簡化一些比較復(fù)雜的類型。具體的可以參考相關(guān)資料,下面舉個(gè)簡單的例子:
    ??
    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能夠指定某種匹配方式需要進(jìn)行多少次,包括指定確定的次數(shù),或不確定的次數(shù)如至少多少次。

    ??? Simple quantifiers

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

    simple quantifiers.gif

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

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

    ??? Reluctant quantifier: 和greedy quantifier搜索風(fēng)格相反。Reluctant quantifier從目標(biāo)串的第一個(gè)字符開始對目標(biāo)串進(jìn)行搜索,當(dāng)沒有匹配時(shí),給目標(biāo)串加上一個(gè)字符,再次進(jìn)行搜索,依此類推,直到在目標(biāo)串上匹配成功,或整個(gè)目標(biāo)串都被搜索但仍然沒有完成匹配。

    ??? Possessive quantifier: 直接對整個(gè)目標(biāo)串進(jìn)行匹配,要么匹配上,要么匹配失敗,它只進(jìn)行一次匹配。

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

    three quantifiers.gif

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


    ??? 相關(guān)鏈接:正則表達(dá)式--JavaScript 實(shí)現(xiàn)基礎(chǔ)

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

    組裝電腦與品牌機(jī)

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

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

    正則表達(dá)式--JavaScript 實(shí)現(xiàn)基礎(chǔ)

    ??? 作者:Flyingis

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

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

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

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

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

    var?regApple?=?/apple/gi;

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

    ??? RegExp對象的方法?

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

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

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

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

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

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

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

    ??? String的方法

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

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

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

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

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

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

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

    ??? 使用正則表達(dá)式:

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

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

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

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

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

    使用.NET Link進(jìn)行ArcIMS二次開發(fā),開發(fā)人員不僅需要熟悉ArcXML_reference,還需要熟悉javascript客戶端開發(fā),因?yàn)橛脩粼诳蛻舳诉M(jìn)行的操作和地圖服務(wù)的響應(yīng),均是由javascript腳本來完成的。  閱讀全文

    posted @ 2006-07-30 21:16 Flyingis 閱讀(6369) | 評論 (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ā)工作,這次釋放出了三個(gè)9.1版本的產(chǎn)品的更新包,為9.1產(chǎn)品的用戶解決了一些問題,可惜的是,.Net ADF一直都沒有相應(yīng)的更新,按照這個(gè)進(jìn)度,很可能要等到9.2系列產(chǎn)品上市,.Net ADF作為其中之一才能獲得bug的修復(fù)和功能的更新。

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

    FireFox 2 beta 1 支持 JavaScript 1.7

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

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

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

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

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

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

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

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

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

    JavaScript 中的繼承(下)

    ??? 作者:Flyingis

    ??? Prototype

    ??? 在《JavaScript中的對象(下)》一文中,我們了解到任何prototype的屬性和方法都會被傳遞到該類的所有實(shí)例中,利用這一特性,使用prototype也能實(shí)現(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);
    }

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

    ??? 對代碼進(jìn)行測試:

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

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

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

    ??? 混合方法

    ??? 《JavaScript中的對象(下)》一文中曾經(jīng)論述,創(chuàng)建一個(gè)類的最佳方法,是使用構(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 閱讀(1557) | 評論 (0)編輯 收藏

    JavaScript 中的繼承(上)

    ??? 作者:Flyingis

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

    ??? 在繼承中引入this關(guān)鍵字,使用構(gòu)造器方法定義類來實(shí)現(xiàn)繼承。一個(gè)構(gòu)造器是一個(gè)函數(shù),因此可以將父類的構(gòu)造器作為子類的一個(gè)方法使用并進(jìn)行調(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)。另外,使用這種方法還可以實(shí)現(xiàn)多重繼承,此時(shí)如果兩個(gè)父類具有相同的屬性或方法時(shí),最后的類具有優(yōu)先級。由于這種繼承方法比較流行,ECMAScript第三版引入了兩個(gè)Function對象:call()和apply()。

    ??? call()

    ??? call()方法是最接近上述繼承方式的方法,它的第一個(gè)參數(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()方法來實(shí)現(xiàn)繼承,只需要this.newMethod相關(guān)的三行代碼。

    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()方法需要兩個(gè)參數(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() 實(shí)現(xiàn)繼承可以通過如下方法實(shí)現(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);
    ??}
    ;
    }

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

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

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

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

    ??? 作者:Flyingis

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

    architecture.gif

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

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

    ??? 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—在一系列的點(diǎn)之間計(jì)算路徑距離

    spatialserver.gif

    ??? 兩個(gè)后臺的進(jìn)程支持著ArcIMS空間服務(wù)器的運(yùn)行: ArcIMS Monitor和ArcIMS Tasker ,在Windows中它們作為后臺服務(wù)運(yùn)行,在Unix和Linux中作為daemon進(jìn)程。

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

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

    ArcIMS應(yīng)用服務(wù)器(ArcIMS Application Server)

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

    ArcIMS應(yīng)用服務(wù)連接器(ArcIMS application server connectors)

    ??? ArcIMS應(yīng)用服務(wù)連接器將Web服務(wù)器和ArcIMS應(yīng)用服務(wù)器連接在一起。ArcIMS Servlet Connector是ArcIMS的默認(rèn)連接器。它使用ArcXML在Web服務(wù)器和ArcIMS應(yīng)用服務(wù)器之間傳遞信息。

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

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

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

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

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

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

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

    ??? 相關(guān)viewer的相關(guān)資料,在ArcIMS Help中搜索主題:

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

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

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

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

    JavaScript 中的對象(下)

    ??? 作者:Flyingis

    5? 自定義類和對象

    5.1? 工廠方法

    ??? 在ECMAScript中創(chuàng)建工廠方法,返回一個(gè)特定類型的對象,以此實(shí)現(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)建對象的方法已不再流行,一部分原因是語法上的,一部分原因是功能上的,如每個(gè)對象的實(shí)例都擁有屬于自己的showName方法,給內(nèi)存管理帶來一定的開銷。

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

    ??? 選擇一個(gè)類名,第一個(gè)字母大寫,該類名即是構(gòu)造函數(shù)的名稱。創(chuàng)建一個(gè)構(gòu)造函數(shù)和工廠方法比較類似,不同的是需要使用關(guān)鍵字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è)空的構(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();

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

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

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

    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

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

    5.6? 混合工廠方法

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

    6? 修改對象

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

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

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

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

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

    JavaScript 中的對象(上)

    ??? 作者:Flyingis

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

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

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

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

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

    2? 對象類型

    2.1? 原始對象

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

    ??? Array

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

    ??? Date

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

    2.2? Build-in對象

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

    ??? Global

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

    ??? Math

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

    2.3? Host 對象

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

    3?
    類成員的訪問方式

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

    4? this
    關(guān)鍵字

    ??? this關(guān)鍵字是ECMAScript中一個(gè)非常重要的概念,通常在對象的方法中使用。

    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

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

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

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

    JavaScript 調(diào)試工具

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

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

    ??? 相關(guān)下載:

    ??? 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官方站點(diǎn)上,venkman有了另外的一個(gè)名稱——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)站外,該工具的擴(kuò)展安裝也可以通過鏈接
    ??? http://www.tkk7.com/Files/flyingis/javascript_debugger-0.9.87.rar進(jìn)行本地下載。
    ?
    ??? 另外有一些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 閱讀(13292) | 評論 (3)編輯 收藏

    ECMAScript 基礎(chǔ)

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

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

    JavaScript 基本組成

    ??? JavaScript的學(xué)習(xí),以Nicholas C.Zakas的《Professional JavaScript for Web Developers》為基礎(chǔ)材料。

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

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

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

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

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

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

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

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

    了解 Ajax 框架--充電開始

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

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

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

    ??? 服務(wù)器端框架

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

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

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

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

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

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

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

    ??? 客戶端框架

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

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

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

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

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

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

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

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

    學(xué)術(shù)與工作

    ??? 作者:Flyingis

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    一直都比較關(guān)注 GeoServer GeoTools 的發(fā)展情況, GeoServer 提供了一個(gè)相對簡易的地理信息服務(wù)系統(tǒng), GeoTools 包含地理信息數(shù)據(jù)基本操作的源碼實(shí)現(xiàn),是學(xué)習(xí)地理信息基礎(chǔ)研發(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 閱讀(3070) | 評論 (6)編輯 收藏

    模型與地理建模

    作者: Flyingis

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

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

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

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

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

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

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

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

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

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

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

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

    GIS 緩沖區(qū)應(yīng)用及算法實(shí)現(xiàn)

    作者: Flyingis

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

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

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

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

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

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

    角分線法

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

    缺陷:難以保證在尖角處緩沖區(qū)左右邊線等寬;校正過程復(fù)雜,主要體現(xiàn)在軸線折角很大和很小時(shí)的情況;算法模型復(fù)雜,主要是因?yàn)閹缀紊蛇^程中需要處理較多的異常。

    凸角圓弧法

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

    實(shí)施步驟:

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

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

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

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

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

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

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

    地理網(wǎng)格


    ??? 作者:Flyingis

    地理網(wǎng)格是將平面以某種規(guī)則分級的空間數(shù)據(jù)結(jié)構(gòu),具有較高的標(biāo)準(zhǔn)化程度,它有利于面向空間數(shù)據(jù)庫和幾何操作算法的研究和開發(fā)。使用地理網(wǎng)格可以將地理空間定位和地理特征描述關(guān)聯(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)的點(diǎn)相關(guān)聯(lián),方便網(wǎng)格內(nèi)空間數(shù)據(jù)的獲取與處理。網(wǎng)格系統(tǒng)可以在原有較小分辨率網(wǎng)格的基礎(chǔ)上創(chuàng)建更細(xì)的子網(wǎng)格,增大其分辨率。一個(gè)網(wǎng)格可以被分成 n- 2 個(gè)子網(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ù)庫理論中,二維空間域便許存儲在存儲器的一個(gè)線性地址空間里,因此空間位置信息必須經(jīng)過一定的轉(zhuǎn)換才能存儲在計(jì)算機(jī)中,使用 nd 樹可以拓展線性空間的排序方法,便于計(jì)算機(jī)存儲。

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

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

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

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

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

    GIS空間分析

    ??? 作者:Flyingis

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

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

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

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

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

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

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

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

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

    ??? 作者:Flyingis

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

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

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

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

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

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

    僅列出標(biāo)題
    共6頁: 上一頁 1 2 3 4 5 6 下一頁 
    主站蜘蛛池模板: 无码色偷偷亚洲国内自拍| 日本免费一区二区三区四区五六区| 中文字幕无码精品亚洲资源网久久 | 七色永久性tv网站免费看| 国产h视频在线观看免费| 国产成人麻豆亚洲综合无码精品| 亚洲日本va中文字幕久久| 麻豆狠色伊人亚洲综合网站| 中文字幕一区二区免费| 日本牲交大片免费观看| 亚洲人成电影亚洲人成9999网| 亚洲中文久久精品无码1 | 亚洲色无码国产精品网站可下载| 老牛精品亚洲成av人片| 免费在线视频你懂的| 亚洲精品无码久久久久| 亚洲日韩在线中文字幕综合| 亚洲一区二区三区免费观看 | 亚洲欧洲精品无码AV| 亚洲欧美精品午睡沙发| 99久久久国产精品免费牛牛| 久久亚洲国产精品123区| 亚洲国产精品18久久久久久| 亚欧免费视频一区二区三区| 亚洲日韩欧洲无码av夜夜摸| 香蕉视频在线观看免费| 美女视频黄a视频全免费网站色| a在线视频免费观看| 国产一区二区三区免费视频| 亚洲一区二区三区在线观看蜜桃| 日产久久强奸免费的看| 成人免费毛片视频| 国产亚洲AV夜间福利香蕉149| 亚洲欧洲第一a在线观看| 精品免费久久久久国产一区 | 亚洲无人区午夜福利码高清完整版| 亚洲第一永久在线观看| 182tv免费视频在线观看| 亚洲国产一区二区视频网站| 亚洲av无码专区亚洲av不卡| 国内精品免费麻豆网站91麻豆|