當前位置:首頁 » 操作系統 » openlayers源碼

openlayers源碼

發布時間: 2022-05-09 12:47:13

① 如何學習openlayers源碼

或許是一直以來從事面向對象開發,我總覺得這塊的知識在框架中佔有很重要的地位。JavaScript語言因為其特性,即使做面向對象的開發,無法實現靜態多態這個特性,封裝性也很菜(基本談不上),剩下的就是動態多態和復用性,個人覺得最重要的就是復用了。復用性只要針對的是的是方法,一方面是代碼的復用,另一方面在JS中算是方法作為對象佔有比較大的內存開銷,至於屬性一般用來記錄數據信息,其復用暫且不提。

OpenLayers中的繼承相關都寫在BaseTypes/OpenLayers.Class.js中。

簡單的類定義,繼承使用的方式如下:

MySubClass = Openlayers.Class({
//父類屬性方法
})
MyClass = OpenLayers.Class(MySubClass,{
//這里寫我們的子類屬性方法。
})

這里直接貼出源碼分析

OpenLayers.Class = function() {
var len = arguments.length;
var P = arguments[0];
var F = arguments[len-1];
var C = typeof F.initialize == "function" ? F.initialize : function(){ P.prototype.initialize.apply(this, arguments); };
if (len > 1) {
var newArgs = [C, P].concat( Array.prototype.slice.call(arguments, 1, len));
OpenLayers.inherit.apply(null, newArgs);
} else {
C.prototype = F;
}
return C;
};

OpenLayers.inherit = function(C, P) {
var F = function() {};
F.prototype = P.prototype;
C.prototype = new F;
var i, l, o;
for(i=2, l=arguments.length; i<l; i++) {
o = arguments[i];
if(typeof o === "function") {
o = o.prototype;
}
OpenLayers.Util.extend(C.prototype, o);
}
};

OpenLayers.Util = OpenLayers.Util || {};
OpenLayers.Util.extend = function(destination, source) {
destination = destination || {};
if (source) {
//屬性復制
for (var property in source) {
var value = source[property];
if (value !== undefined) {
destination[property] = value;
}
}
var sourceIsEvt = typeof window.Event == "function"
&& source instanceof window.Event;
if (!sourceIsEvt
&& source.hasOwnProperty && source.hasOwnProperty("toString")) {
destination.toString = source.toString;
}
}
return destination;
};

分析下代碼會發現:OpenLayers.util.extend()方法是個屬性復制的過程,比較簡單。繼承的主要實現來在OpenLayers.Class和OpenLayers.inherit;

假設使用MySubClass調用來調試走一遍代碼:

父類沒有繼承,所以調用OpenLayers.Class只有一個參數(按照規范我們傳入的對象有一個initialize()構造函數,而使用JS函數對象來模擬繼承對象一直是比較流行的方式。)

var C = typeof F.initialize == "function" ?
F.initialize :
function(){ P.prototype.initialize.apply(this, arguments); };
C.prototype = F;
return C;

這里獲取initialize方法作為最終的對象引用,其prototype屬性指向傳入的Object,這樣我們寫在 Object中都所有屬性和方法都可以被F(initialize)通過原型鏈獲取並且使用。利弊:所有的方法都達到了公用的目的,但是屬性本身位於 prototype中,則在設置屬性的時候等於在對象本身C上添加了格外屬性,考慮多個對象屬性基本很難公用的問題,這里基本沒錯,唯一可惜的就是在 prototype中多用了些屬性內存開銷。

結論: C = Object.initilize();

C.prototype = Object;使用MyClass來分析下繼承。

首先還是獲取對象構造方法,但是如果沒有寫則返回父類的構造方法,注意父類的方法不是直接返回,而是調用,相當於獲取了父類構造方法另一個副本

var C = typeof F.initialize == "function" ?
F.initialize :
function(){ P.prototype.initialize.apply(this, arguments); };

接下來調用繼承。(註:這里繼承多個父類很少用到(個人覺得這里不支持繼承多個父類,這里的寫法是為了分開定義子類中的方法和屬性(也可視為未子類添加額外屬性方法),有興趣可以自行研究),所以只分析繼承一個父類的情況)

var newArgs = [C, P].concat(
Array.prototype.slice.call(arguments).slice(1, len-1), F);
OpenLayers.inherit.apply(null, newArgs);

所以最終調用相當於是 OpenLayers.inherit(C , P , F);

var F = function() {};

F.prototype = P.prototype;

C.prototype = new F;

結果:

C = initialize();

C.prototype = function();(F,只是一個引用,無多大意義)

C.prototype._proto_ == P.prototype

考慮P就是我們前面所得到的父類MySubClass,那麼C即可以通過原型鏈 訪問到P所有的屬性和方法,繼承就差不多實現了。

for(i=2, l=arguments.length; i<l; i++) {
o = arguments[i];
if(typeof o === "function") {
o = o.prototype;
}
OpenLayers.Util.extend(C.prototype, o);
}

這段代碼如果只考慮單父類繼承的情況,則o = F,即我們的子類Object對象,而o本身不是方法,最終調用如下:

OpenLayers.Util.extend(C.prototype, Object);

即把我們所有的屬性,方法都賦值到C.prototype上,一方面保證了同對象上屬性的公用,另一方面考慮在原型鏈層,Object定義的屬性和方法相比父類的方法更高一層,C.prototype 相比C.prototype._proto_,所以調用過程中優先使用Object中的定義,相當於繼承中的函數覆寫。

關於調用父類同名(被覆寫了)方法,因為不存在super指針,所以這里在使用的時候需要全名調用MySubClass.XXX.apply(this,args);

至於屬性復制使用將構造函數也順道賦值了一遍,C.prototype.initilize===C 本身,這個鏈接的存在有什麼特殊效果沒看出來

C.prototype.CLASS_NAME 按照規范存在著類型名稱信息,可以提供使用中的類別判斷
轉載

② openlayers3 是基於 html5 開發的嗎

OpenLayers是web端比較好的一個GIS引擎,廣受大家的青睞,最開始我以為這是一個比較小眾的引擎,沒想到後面發現有很多人使用,並且還有很多人正在學習使用。

  1. 需要具備基本的Javascript知識,如果還不具備,請googleJavaScript學習推薦書籍(我推薦JavaScript核心編程)進行學習,同時可以在CodeWars上面在線練習。

  2. 具備基本的GIS理論知識,知道GIS引擎的作用,不知道的請google相關資料腦補。

  3. 需要具備基本的面向對象思想,因為OpenLayers 3引擎是實用面向對象編程的。

③ openlayers如何結合wms服務開發webGIS

getFeatureInfo是wms服務一個參數,你將那個參數改變一下就可以獲取到點擊feature的info了

④ 有哪些值得推薦的數據可視化工具

大講台數據可視化培訓為你解答:
第一部分:入門級工具
1、Excel
Excel的圖形化功能並不強大,但Excel是分析數據的理想工具,上圖是Excel生成的熱力地圖
作為一個入門級工具,Excel是快速分析數據的理想工具,也能創建供內部使用的數據圖,但是Excel在顏色、線條和樣式上可選擇的范圍有限,這也意味著用Excel很難製作出能符合專業出版物和網站需要的數據圖。但是作為一個高效的內部溝通工具,Excel應當是你百寶箱中必備的工具之一。
2、CSV/JSON
CSV(逗號分隔值)和JSON(JavaScript對象注釋)雖然並不是真正的可視化工具,但卻是常見的數據格式。你必須理解他們的結構,並懂得如何從這些文件中導入或者導出數據。以下將要介紹的所有數據可視化工具都支持CSV、JSON中至少一種格式。
第二部分:在線數據可視化工具
3、GoogleChartAPI
GoogleChartAPI工具集中取消了靜態圖片功能,目前只提供動態圖表工具。能夠在所有支持SVG\Canvas和VML的瀏覽器中使用,但是GoogleChart的一個大問題是:圖表在客戶端生成,這意味著那些不支持JavaScript的設備將無法使用,此外也無法離線使用或者將結果另存其他格式,之前的靜態圖片就不存在這個問題。盡管存在上述問題,不可否認的是GoogleChartAPI的功能異常豐富,如果沒有特別的定製化需要,或者對Google視覺風格的抵觸,那麼你大可以從GoogleChart開始。
4、Flot
Flot是一個優秀的線框圖表庫,支持所有支持canvas的瀏覽器(目前主流的瀏覽器如火狐、IE、Chrome等都支持)。
5、Rapha?l
Rapha?l是創建圖表和圖形的JavaScript庫,與其他庫最大的不同是輸出格式僅限SVG和VML。SVG是矢量格式,在任何解析度下的顯示效果都很好。
6、D3
D3(DataDrivenDocuments)是支持SVG渲染的另一種JavaScript庫。但是D3能夠提供大量線性圖和條形圖之外的復雜圖表樣式,例如Voronoi圖、樹形圖、圓形集群和單詞雲等。雖然D3能夠提供非常花哨的互動圖表,但你在選擇數據可視化工具時,需要牢記的一點是:知道在何時保持簡潔。
7、Visual.ly
如果你需要製作信息圖而不僅僅是數據可視化,目前也有大把的工具可用。Visual.ly就是最流行的一個選擇。雖然Visual.ly的主要定位是:「信息圖設計師的在線集市」,但是也提供了大量信息圖模板。雖然功能還有很多限制,但是Visual.ly絕對是個能激發你靈感的地方。
第三部分:互動圖形用戶界面(GUI)控制
如果數據可視化的互動性強大到可以作為GUI界面會怎樣?隨著在線數據可視化的發展,按鈕、下拉列表和滑塊都在進化成更加復雜的界面元素,例如能夠調整數據范圍的互動圖形元素,推拉這些圖形元素時輸入參數和輸出結果數據會同步改變,在這種情況下,圖形控制和內容已經合為一體。以下這些工具能夠幫你實現這些功能:
8、Crossfilter
當我們為方便客戶瀏覽數據開發出更加復雜的工具時,我們已經能夠創建出既是圖表,又是互動圖形用戶界面的小程序。JavaScript庫Crossfilter就是這樣的工具。
Crossfilter應用:當你調整一個圖表中的輸入范圍時,其他關聯圖表的數據也會隨之改變。
9、Tangle
JavaScript庫Tangle進一步模糊了內容與控制之間的界限。在下圖這個應用實例中,Tangle生成了一個負載的互動方程,讀者可以調整輸入值獲得相應數據。
第四部分:地圖工具
地圖生成是web上最困難的任務之一。GoogleMaps的出現完全顛覆了過去人們對在線地圖功能的認識。而Google發布的MapsAPI則讓所有的開發者都能在自己的網站中植入地圖功能。
近年來,在線地圖的市場成熟了很多,如果你需要在數據可視化項目中植入定製化的地圖方案,目前市場上已經有很多選擇,但是知道在何時選擇何種地圖方案則成了一個很關鍵的業務決策。地圖方案看上去功能都很強大,但是切忌:「有了一把錘子,看什麼都像釘子。」
10、ModestMaps
顧名思義,ModestMaps是一個很小的地圖庫,只有10KB大小,是目前最小的可用地圖庫。這似乎意味著ModestMaps只提供一些基本的地圖功能,但是不要被這一點迷惑了。在一些擴展庫的配合下,例如Wax,ModestMaps立刻會變成一個強大的地圖工具。
11、Leaflet
CloudMade團隊為大家帶來了Leaflet,這是另外一個小型化的地圖框架,通過小型化和輕量化來滿足移動網頁的需要。Leaflet和ModestMaps都是開源項目,有強大的社區支持,是在網站中整合地圖應用的理想選擇。
12、PolyMaps
Polymaps是另外一個地圖庫,但主要面向數據可視化用戶。Polymaps在地圖風格化方面有獨到之處,類似CSS樣式表的選擇器,是不可錯過的好東西。
13、OpenLayers
OpenLayers可能是所有地圖庫中可靠性最高的一個。雖然文檔注釋並不完善,且學習曲線非常陡峭,但是對於一些特定的任務來說,OpenLayers無可匹敵。例如能夠提供一些其他地圖庫都沒有的特殊工具。
14、Kartograph
Kartograph的標記線是對地圖繪制的重新思考,我們都已經習慣了莫卡托投影(Mercatorprojection),但是Kartograph為我們帶來了更多的選擇。如果你不需要調用全球數據,而僅僅是生成某一區域的地圖,那麼Kartogaph將使你脫穎而出。
15、CartoDB
CartoDB是一個不可錯過的網站。你可以用CartoDB很輕易就把表格數據和地圖關聯起來,這方面CartoDB是最優秀的選擇。例如,你可以輸入CSV通訊地址文件,CartDB能將地址字元串自動轉化成經度/維度數據並在地圖上標記出來。目前CartoDB支持免費生成五張地圖數據表,更多使用需要支付月費。
ChartingFonts(隨著iPad3等高清移動設備的普及)web開發的一個最新趨勢是將符號字體與字體整合(把符號變成字體),創建出漂亮的矢量化圖標。在這些新型字體中,例如FFChartwell和Chartjunk是專門用來顯示圖表和圖形的。他們與OpenType碰到的問題一樣,就是不能被所有的瀏覽器支持,但是不久的未來這些矢量字體將是數據可視化工作中需要考慮到的因素。
第五部分:進階工具
如果你准備用數據可視化做一些「嚴肅」的工作,那麼你可能不會對在線可視化工具或者web小程序有太大興趣,你需要的是桌面應用和編程環境。
16、Processing
Processing是數據可視化的招牌工具。你只需要編寫一些簡單的代碼,然後編譯成Java。目前還有一個Processing.js項目,可以讓網站在沒有JavaApplets的情況下更容易地使用Processing。由於埠支持Objective-C,你也可以在iOS上使用Processing。雖然Processing是一個桌面應用,但也可以在幾乎所有平台上運行,此外經過數年發展,Processing社區目前已近擁有大量實例和代碼。
17、NodeBox
NodeBox是OSX上創建二維圖形和可視化的應用程序。你需要了解Python程序,NodeBox與Processing類似,但是沒有Processing的互動功能。
第六部分:專家級工具
與Excel相對的是專業數據分析工具。如果你是一個專業的數據分析師,那麼你就必須對下面將要介紹的工具有所了解(如果不是精通的話)。眾所周知,SPSS和SAS是數據分析行業的標准工具,但是這些工具的費用不菲,只有大型組織和學術機構才有機會使用,下面我們介紹幾種免費的替代工具,這些開源工具的共同特徵是都有強大的社區支持。開源分析工具性能不輸老牌專業工具,插件的支持甚至更好。
18、R
作為用來分析大數據集的統計組件包,R是一個非常復雜的工具,需要較長的學習實踐,學習曲線也是本文所介紹工具中最陡峭的。但是R擁有強大的社區和組件庫,而且還在不斷成長。當你能駕馭R的時候,一切付出都是物有所值的。
19、Weka
當你成長成一名數據科學家的時候,你需要將個人能力從數據可視化擴展到數據挖掘領域。Weka是一個能根據屬性分類和集群大量數據的優秀工具,Weka不但是數據分析的強大工具,還能生成一些簡單的圖表。
20、Gephi
Gephi是進行社交圖譜數據可視化分析的工具,不但能處理大規模數據集並生成漂亮的可視化圖形,還能對數據進行清洗和分類。Gephi是一種非常特殊的軟體,也非常復雜,先於他人掌握Gephi將使你一騎絕塵。

⑤ 怎麼在weblogic發布.war包,我要調用wms服務該如何通過OpenLayers框架實現在weblogic發布的服務啊

OpenLayer向地圖添加圖層的例子源碼 http://www.gisjc.com/a/gisyuanma/2010/0416/50.html 追問: 我要將這個wms服務發布在weblogic裡面,本人沒用過GeoServer;現在只是用的tomcat和weblogic伺服器

熱點內容
csgo和永劫無間哪個配置要求高 發布:2024-10-08 18:20:47 瀏覽:48
43資料庫 發布:2024-10-08 18:19:20 瀏覽:816
svn伺服器不能訪問 發布:2024-10-08 18:18:36 瀏覽:984
壓縮面膜多少錢 發布:2024-10-08 18:18:01 瀏覽:539
徐州少兒編程培訓機構 發布:2024-10-08 17:52:29 瀏覽:389
c語言常用函數大全 發布:2024-10-08 17:46:33 瀏覽:410
win10怎麼取消啟動密碼 發布:2024-10-08 17:29:22 瀏覽:211
c圖像演算法 發布:2024-10-08 17:02:13 瀏覽:238
android上傳圖片php 發布:2024-10-08 16:48:44 瀏覽:996
陽湖醫院的wifi密碼是多少 發布:2024-10-08 16:43:31 瀏覽:763