為主攻電動車 捷豹路虎將擴建英國研發中心以推新款

據英國汽車雜誌autocar3月25日消息,捷豹路虎計畫加大超低排放技術的研發,將其位於英國考文垂Whitley的研發中心由現有面積55英畝投資擴建一倍至110英畝,為其純電動汽車的問世鋪路。Whitley研發中心是捷豹、路虎兩個品牌先進動力工程低級、捷豹設計部門及公司的全球總部所在地。   其首批車型預計將會是捷豹XE豪華轎車純電動版,以及F=Pace跨界車的電動版,後者續航里程約300英里。此外,路虎推出電動SUV的可能性也很大,預計將採用與捷豹汽車相同的技術。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

比亞迪去年淨利降兩成 新能源車收入增6倍

比亞迪3月29日晚間發佈年報,2014年實現營業收入581.96億元人民幣(下同),同比上年增長10.09%;淨利潤4.34億元,同比下降21.61%,每股收益0.18元。其中,新能源汽車業務收入約73.28億元,同比增長約6倍,占集團汽車業務收入的27.05%銷量同比增長9倍。   比亞迪去年新能源汽車市場份額達27.9%,在插電式混合動力市場份額更高達49.6%,穩居領先地位。比亞迪並預計2015年一季度淨利潤有望達到1億元~1.5億元,同比增長735.70%-1153.55%。   此外,比亞迪汽車及相關產品業務的收入為約278.34億元,同比上升3.03%;手機部件及組裝業務的收入為約244.80億元,同比增長23.21%;二次充電電池及太陽能業務的收入為約53.39億元,同比增長0.29%。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

特斯拉有望 3 年後內在中國設廠

特斯拉(Tesla)執行長馬斯克(Elon Musk)在博鰲論壇期間表示,特斯拉希望 3 年內在中國大陸建立生產和設計基地,且馬斯克再度承諾,儘管目前所有在中國市場上銷售的特斯拉汽車都是從美國加州進口的,但特斯拉對發展中國市場有強烈的長期意向,盼能建立本土的生產和設計基地。   馬斯克表示,特斯拉將長期開拓中國市場,於 3 年內在中國設立工廠和研發中心,但得等到特斯拉在加州的工廠實現全能運轉,達到全部產能後,特斯拉才會考慮在海外市場建廠。因此,特斯拉還會持續進口到中國市場一段時間。   針對 2014 年特斯拉在中國的銷售不如預期,據馬斯克解釋,目前特斯拉處於「投機後遺症」的恢復期當中,「中國是特斯拉在全世界範圍內唯一有多餘庫存的市場。我們現在還在消化庫存中」。2014 年特斯拉剛剛進入中國市場時,投機者造成市場需求「極高」的假象。後來投機者取消訂單,導致庫存增加。   馬斯克並表示,在新戰略的引導下,特斯拉 3 月在中國市場的銷量較 2 月大幅成長,增幅達 130% 至 150%。  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

複製代工經驗、不做品牌 鴻海打造電動車模組平台

鴻海集團客戶遍布全球,而且都是指標企業,為了不和客戶競爭,鴻海董事長郭台銘曾公開表示:「我絕不做品牌,要用通路打造一條龍服務。」法人認為,鴻海集團以代工稱霸一方,如今投入電動車研發,仍堅持不打品牌,可望複製代工經驗,協助客戶把產品做得更好、生產周期更短。   鴻海集團汽車事業群總經理林棟樑表示,鴻海集團可以提供全球電動車需要的關鍵零組件,而且成本更有競爭力。鴻海是從 3C 製造起家,做電腦、通訊、消費電子產品,世界上大部分品牌都是鴻海製造。   林棟樑強調,鴻海不做整車,打造電動車是別人的事,「我把平台建好,你要的我提供給你。」

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

不尾號限行!純電動車在北京受禮遇

4月2日,北京市政府發佈消息稱,自2015年4月11日至2016年4月10日,北京將繼續實施工作日機動車尾號限行措施,限行時間為7時至20時,範圍為五環路以內道路(不含五環路)。   而今年的限行措施特別提到,純電動小客車將不受尾號限行影響,具體執行時間由交管局公佈。其中,純電動小客車不受工作日高峰時段區域限行交通管理措施限制,具體執行時間由市公安交通管理部門另行公佈。   今年3月,國家交通運輸部發佈的《關於加快推進新能源汽車在交通運輸行業推廣應用的實施意見》便對推行電動車在內的新能源車有政策傾斜,提出要對新能源汽車不限行、不限購,對新能源計程車的運營權指標適當放寬。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

簽訂「首爾宣言」 新北市力推電動車

新北市副市長陳伸賢昨出席「國際地方政府環境行動理事會(ICLEI)2015 世界大會」,並與各國代表簽訂 ICLEI「首爾宣言」,宣誓將持續減碳,新北也將推動環保電動車各項措施。   陳伸賢昨與首爾市長朴元淳交流時,對首爾市推動省下一座核電廠政策非常感佩,他表示,面對全球環境汙染、能源消耗及氣候變遷等問題,新北市也努力降低汙染,包括推動黃金里資收站、路燈與交通號誌燈全面 LED 化、綠能屋頂等各項措施。目前新北市綠色能源發電比例已達 5%。   針對車輛產生的汙染,未來新北市將推廣與建設大眾運輸、鼓勵使用綠色交通工具如電動機車、電動車、公共自行車等方式,並將「電動車」列為重點發展產業,持續推動電動車普及化。   (照片:韓國首爾市長朴元淳、新北市副市長陳伸賢。照片來源:新北市政府)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

台歐盟電動車研討會登場!助台廠入全球供應鏈

為推動台歐盟雙方未來在電動車領域的合作,經濟部標準檢驗局、國際貿易局及歐洲經貿辦事處於 4 月 10 日共同舉辦「臺歐盟電動車研討會」。   台灣具有良好資通訊產業基礎及發展智慧車輛模組系統能量,發展電動車產業有競爭潛力,如能獲得歐盟相關經驗,必可切入全球電動車之零件與系統模組供應鏈,促成國內電動車產業迅速發展。   標準檢驗局劉明忠局長表示,為加速推動台灣電動車發展,自 2011 年便積極推動電動車運行環境的標準,至 2014 年底已完成包括整車、鋰電池系統,電動機/驅動器及共通詞彙/符號等總計 34 種電動車國家標準,已完成包括最高速率、電能消耗、行駛距離、加速能力及爬坡速率等超過 50 個以上測試項目之實車驗證。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

3dTiles 數據規範詳解[2] Tileset與Tile

轉載請聲明出處:全網@秋意正寒 https://www.cnblogs.com/onsummer/p/13128682.html

一、一個簡單的3dTiles數據示例

上圖是一份 3dTiles數據集在文件夾內的樣子,層層打開可得以下特點:

  • 入口文件是 tileset.json
  • 各級瓦片用文件夾(目錄)來組織

3dTiles 數據目前的具體文件實現,是一些零散的文件。

數據集的名稱與所在文件夾的名稱並無關係,數據集的名稱寫在入口文件中。

3dTiles至少有一個 tileset.json 文件,作為整個數據集的入口。它是一個 json 文件,描述了整個三維瓦片數據集,它記錄的是上一節提及的“邏輯信息”,還包括一些其他的元數據。而“屬性信息”、“嵌入的gltf模型” 則位於各個二進制瓦片文件中,這些二進制文件則由 tileset.json 中的瓦片中的 uri 來引用。

瓦片是什麼?

瓦片,屋頂上的瓦片。古時候,蓋房子,屋頂不能一次澆築完工,也沒有特定的“屋頂”零件,所以只好一片片瓦片蓋上去(我瞎掰的)。

瓦片切割了三維數據,允許三維數據進行細分。我們都知道網速是有限的,在加載超大規模的三維模型數據時,不可能把一個模型全部下載下來再渲染,那樣等待的時間太慢了,但是一點一點出現,視野範圍外的“瓦片”則乾脆就不下載、渲染,性能、視覺都有提高。這就是瓦片的設計優點。

傳統的二維地圖瓦片,叫做 WMTS 或 TMS,這個 “T” 就是 Tile 的意思。

現在,你只要知道,3dTiles就是把空間進行切塊,每個塊叫做 “tile”,也即瓦片。至於怎麼切的——待會介紹 tileset.json 時,會隆重介紹樹結構。

瓦片只有兩種情況:恭弘=叶 恭弘子瓦片,非恭弘=叶 恭弘子瓦片。根瓦片也是非恭弘=叶 恭弘子瓦片。非恭弘=叶 恭弘子瓦片和恭弘=叶 恭弘子瓦片有什麼區別呢?主要就是恭弘=叶 恭弘子瓦片不會再有孩子了(樹結構的知識哈,不懂的建議去學習數據結構中的樹)。

瓦片包含什麼內容呢?本篇稍微靠後再仔細了解瓦片。

現在,我們先認識一下,描述整個 3dTiles 數據集的入口文件,也叫做三維瓦片數據集 —— tileset.json:

二、Tileset——(三維)瓦片數據集

通常,一個三維瓦片數據集(之後簡稱:一個3dtiles數據)的入口就是那個”tileset.json“,至於這個文件的名稱可不可以改,暫時未作測試。

現在,我們先來研究研究 這個入口文件記錄了哪些信息,拿一份最簡單的 3dtiles數據來舉例,該數據只有一個根瓦片(root),根瓦片再無子瓦片。

root對象中有一個content,內有uri屬性,其就記錄了根瓦片的二進制數據文件的URL,這個URL是個相對路徑,相對於 tileset.json 文件。

① 頂級屬性概覽

通過上面介紹,3dTiles數據的入口文件是一個名叫 tileset.json 的文件,而通常來說,這個json必須存在以下幾個頂級對象:

  • asset
  • root
  • geometricError

由於本人學識有限,目前不太清楚 geometricError 的精確含義,只知道這個數值的大小能控制 LOD 的显示隱藏,且這個數值父級瓦片一定比子級瓦片大。

asset 對象,記錄了整個數據集的聲明和歸屬數據,類似於數據聲明,能在此寫入 versiontilesetVersion 等屬性,當然也可以像上方的例子一樣,寫入生成工具、gltf朝向等信息。

root 對象,即這個數據集的根瓦片,每個3dTiles數據集必須有一個 root 對象。

至於 tileset.json 中其他的頂級對象,請查閱官方文檔:點我

② root瓦片及其children

樹結構對於三維空間數據的組織有很大的優勢。3dTiles在空間上允許數據集使用如下幾種樹結構:

  • 四叉樹
  • 八叉樹
  • KD樹
  • 格網結構

四叉樹允許使用傳統的均勻四叉樹,也允許使用鬆散四叉樹等變種(例如,允許子節點,即子瓦片允許存在空間範圍重疊)。

上圖為兩個子瓦片在空間上存在部分重疊,照顧到了建築物不可能嚴格切分的特點。

四叉樹對在高度上不太好切分的數據比較適合,而如果追求極致的空間分割和分級(例如點雲數據),那麼八叉樹更合適。

八叉樹也允許使用各種變種。

kd樹比較難理解,在此不作展開,這也是一種有趣的空間結構分割的數據結構。

格網結構的樹允許瓦片存在多個子瓦片:

通常出現在傾斜攝影數據上,但是這會導致網絡請求過多的問題。

③ 坐標系統

我們可以用簡單的兩位數、三位數:經緯度,還有一個高度來標識地球表面附近的任何一個點。經緯度的範圍不超過三位數,而用米作單位的空間直角坐標系來描繪地球,数字太大,不好記憶。

在GIS中,WGS84就是一個用經緯度來標識空間坐標的“地理坐標系,Geographic Coordinate System”。

由於歷史上對地球測量的技術不同,科學家製造了多個長半軸短半軸不太一樣的“橢球”,來模擬地球的形狀。目前,最具代表性的就是兩個以地球質心為中心的橢球體:

  • WGS84橢球體
  • 中國國家2000橢球體(即CGCS2000)

基於橢球體,我們允許有多種不同的坐標系定義,WGS84坐標系其實並不太嚴謹。基於WGS84橢球(長短半軸等信息自行查詢哈),可以使用球面坐標度量,即經緯度,還有一個從質心射向橢球面上的點的“橢球高度”射線,來記錄第三維高度數據。

介紹了那麼多,3dTiles其實採用的是WGS84橢球,但是並未採用經緯度記錄數據:因為相對於精細三維模型來說,經緯度不足以提供足夠精確的空間分割(要照顧圖形显示問題)。所以,同樣是那個形狀,3dTiles使用了同一個WGS84橢球,但是更方便計算的坐標:空間直角坐標。

用經緯度記錄數據的WGS84坐標系,WKID是4326,用地心為坐標原點的空間直角坐標來記錄數據的坐標系,WKID是4979.

3dTiles 用的就是4979坐標系。

三、Tile——構成3dtiles的成員:瓦片

通常,瓦片對象會引用一個二進制的瓦片數據文件(也有例外,往下拉一點會說):

在1.0 版本的規範中,瓦片所引用的二進制的瓦片數據文件,有四種類型:

類型 英文名稱 文件後綴名
批量三維模型 Batch 3D Model b3dm
實例三維模型 Instance 3D Model i3dm
點雲 PointCloud pnts
複合模型 Component cmpt

這些不同的瓦片對應了些什麼數據呢?本篇只貼一張各種數據類型的截圖和信息對比表:

瓦片類型 對應實際數據
b3dm 傳統三維建模數據、BIM數據、傾斜攝影數據
i3dm 一個模型多次渲染的數據,燈塔、樹木、椅子等
pnts 點雲數據
cmpt 前三種數據的複合(允許一個cmpt文件內嵌多個其他類型的瓦片)

關於這些二進制瓦片數據文件的數據結構如何,下一篇開始會詳細展開。

現在,我們關注一下,瓦片對象的職能,也就是,它記錄了啥信息:

這是一個children下的第一個瓦片,觀察不難得知,與root瓦片其實在屬性上長得一模一樣。

瓦片對象都有如下屬性:

  • boundingVolume:空間範圍框,允許有box、sphere、region三種範圍框,但是只能定義一種
  • geometricError:幾何誤差
  • content:瓦片內容,uri屬性引用二進制瓦片數據文件。
  • 其他屬性:viewerRequestVolume、transform

沒錯,瓦片對象記錄的就是瓦片的元數據,真正瓦片的本體數據在content所引用的二進制文件中。

瓦片還可以再引用 3dTiles 數據集!

我一再強調3dTiles十分靈活。

Tile不僅僅可以在其uri屬性中引用 諸如 .b3dm.i3dm.pnts等二進制瓦片數據文件,還可以再引用一個 3dTiles!

這是一份從osgb傾斜攝影數據轉換而來的3dtiles數據,清晰可見在root瓦片的第一個child瓦片中,引用了另外一個json文件。這證明了兩件事:

  • 3dTiles的文件名可以不是tileset.json
  • 3dTiles允許套娃

原則上,只要被引用的子一級3dtiles 不循環引用父級3dtiles,那麼就OK(規範如是說)。

它真的很靈活!

下一節將展示二進制瓦片文件中的至關重要的一部分:兩大數據表。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

FreeSql 使用 ToTreeList/AsTreeCte 查詢無限級分類表

關於無限級分類

第一種方案:
使用遞歸算法,也是使用頻率最多的,大部分開源程序也是這麼處理,不過一般都只用到四級分類。 這種算法的數據庫結構設計最為簡單。category表中一個字段id,一個字段fid(父id)。這樣可以根據WHERE id = fid來判斷上一級內容,運用遞歸至最頂層。
分析:通過這種數據庫設計出的無限級,可以說讀取的時候相當費勁,所以大部分的程序最多3-4級分類,這就足以滿足需求,從而一次性讀出所有的數據,再對得到數組或者對象進行遞歸。本身負荷還是沒太大問題。但是如果分類到更多級,那是不可取的辦法。
這樣看來這種分類有個好處,就是增刪改的時候輕鬆了…然而就二級分類而言,採用這種算法就應該算最優先了。

第二種方案:
設置fid字段類型為varchar,將父類id都集中在這個字段里,用符號隔開,比如:1,3,6
這樣可以比較容易得到各上級分類的ID,而且在查詢分類下的信息的時候,
可以使用:SELECT * FROM category WHERE pid LIKE “1,3%”。

分 析:相比於遞歸算法,在讀取數據方面優勢非常大,但是若查找該分類的所有 父分類 或者 子分類 查詢的效率也不是很高,至少也要二次query,從某種意義看上,個人覺得不太符合數據庫範式的設計。倘若遞增到無限級,還需考慮字段是否達到要求,而且 在修改分類和轉移分類的時候操作將非常麻煩。
暫時,在自己項目中用的就是類似第二種方案的解決辦法。就該方案在我的項目中存在這樣的問題, 如果當所有數據記錄達到上萬甚至10W以上后,一次性將所以分類,有序分級的現實出來,效率很低。極有可能是項目處理數據代碼效率低帶來的。現在正在改良。

第三種方案:
  無限級分類—-改進前序遍歷樹
那 么理想中的樹型結構應具備哪些特點呢?數據存儲冗餘小、直觀性強;方便返回整個樹型結構數據;可以很輕鬆的返回某一子樹(方便分層加載);快整獲以某節點 的祖譜路徑;插入、刪除、移動節點效率高等等。帶着這些需求我查找了很多資料,發現了一種理想的樹型結構數據存儲及操作算法,改進的前序遍歷樹模型 (The Nested Set Model)。
原理:
我們先把樹按照水平方式擺開。從根節點開始(“Food”),然後他的左邊寫 上1。然後按照樹的順序(從上到下)給“Fruit”的左邊寫上2。這樣,你沿着樹的邊界走啊走(這就是“遍歷”),然後同時在每個節點的左邊和右邊寫上 数字。最後,我們回到了根節點“Food”在右邊寫上18。下面是標上了数字的樹,同時把遍歷的順序用箭頭標出來了。

我 們稱這些数字為左值和右值(如,“Food”的左值是1,右值是18)。正如你所見,這些数字按時了每個節點之間的關係。因為“Red”有3和6兩個值, 所以,它是有擁有1-18值的“Food”節點的後續。同樣的,我們可以推斷所有左值大於2並且右值小於11的節點,都是有2-11的“Fruit” 節點的後續。這樣,樹的結構就通過左值和右值儲存下來了。這種數遍整棵樹算節點的方法叫做“改進前序遍歷樹”算法。

表結構設計:

那 么我們怎樣才能通過一個SQL語句把所有的分類都查詢出來呢,而且要求如果是子類的話前面要打幾個空格以表現是子分類。要想查詢出所有分類很好 辦:SELECT * FROM category WHERE lft>1 AND lft<18 ORDER BY lft這樣的話所有的分類都出來了,但是誰是誰的子類卻分不清,那麼怎麼辦呢?我們仔細看圖不難發現如果相鄰的兩條記錄的右值第一條的右值比第二條的大那 么就是他的父類,比如food的右值是18而fruit的右值是11 那麼food是fruit的父類,但是又要考慮到多級目錄。於是有了這樣的設計,我們用一個數組來存儲上一條記錄的右值,再把它和本條記錄的右值比較,如 果前者比後者小,說明不是父子關係,就用array_pop彈出數組,否則就保留,之後根據數組的大小來打印空格。

以上內容引用出處:https://www.cnblogs.com/badboys/p/9945296.html

關於第三種設計的更多資料請點擊查看原文,因為過於複雜(過重)被使用的頻率不高。

引出痛點

無限級分類(父子)是一種比較常用的表設計,每種設計方式突出優勢的同時也帶來缺陷,如:

  • 第一種方案:表設計中只有 parent_id 字段,寫入數據方便,困擾:查詢麻煩,許多使用了 ORM 的項目被迫使用 SQL 解決該場景;
  • 第二種方案:表設計中冗餘子級id便於查詢,困擾:添加/更新/刪除的時候需要重新計算;
  • 第三種方案:表設計中存儲左右值編碼,困擾:同上;

第一種方案的設計最簡單,本文後面的內容是在該基礎上,使用 FreeSql 實現 ToTreeList(內存加工樹型)、AsTreeCte(實現遞歸向下/向上查詢),滿足大眾日常使用。

關於 FreeSql

FreeSql 是功能強大的對象關係映射技術(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.0+ 或 Xamarin,以 MIT 開源協議託管於 github,單元測試數量 4528個,nuget 下載量 151K,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/達夢/人大金倉/神州通用/Access;

源碼地址:https://github.com/dotnetcore/FreeSql

作者說過:每一個功能代表他的一撮頭髮!

第一步:定義導航屬性

FreeSql 導航屬性之中,有針對父子關係的設置方式,ToTreeList/AsTreeCte 依賴該設置,如下:

public class Area
{
  [Column(IsPrimary = true)]
  public string Code { get; set; }

  public string Name { get; set; }
  public string ParentCode { get; set; }

  [Navigate(nameof(ParentCode)), JsonIgnore] //JsonIgnore 是 json.net 的特性
  public Area Parent { get; set; }
  [Navigate(nameof(ParentCode))]
  public List<Area> Childs { get; set; }
}

關於導航屬性

定義 Parent 屬性,在表達式中可以這樣:

fsql.Select<Area>()
  .Where(a => a.Parent.Parent.Parent.Name == "中國")
  .First();

定義 Childs 屬性,在表達式中可以這樣(子查詢):

fsql.Select<Area>()
  .Where(a => a.Childs.AsSelect().Any(c => c.Name == "北京"))
  .First();

定義 Childs 屬性,還可以使用【級聯保存】、【貪婪加載】 等等操作。

添加測試數據

fsql.Delete<Area>().Where("1=1").ExecuteAffrows();
var repo = fsql.GetRepository<Area>();
repo.DbContextOptions.EnableAddOrUpdateNavigateList = true;
repo.DbContextOptions.NoneParameter = true;
repo.Insert(new Area
{
  Code = "100000",
  Name = "中國",
  Childs = new List<Area>(new[] {
    new Area
    {
      Code = "110000",
      Name = "北京",
      Childs = new List<Area>(new[] {
        new Area{ Code="110100", Name = "北京市" },
        new Area{ Code="110101", Name = "東城區" },
      })
    }
  })
});

第二步:使用 ToTreeList 返回樹型數據

配置好父子屬性之後,就可以這樣用了:

var t1 = fsql.Select<Area>().ToTreeList();
Assert.Single(t1);
Assert.Equal("100000", t1[0].Code);
Assert.Single(t1[0].Childs);
Assert.Equal("110000", t1[0].Childs[0].Code);
Assert.Equal(2, t1[0].Childs[0].Childs.Count);
Assert.Equal("110100", t1[0].Childs[0].Childs[0].Code);
Assert.Equal("110101", t1[0].Childs[0].Childs[1].Code);

查詢數據本來是平面的,ToTreeList 方法將返回的平面數據在內存中加工為樹型 List 返回。

[
  {
    "ParentCode": null,
    "Childs": [
      {
        "ParentCode": "100000",
        "Childs": [
          {
            "ParentCode": "110000",
            "Childs": [],
            "Code": "110100",
            "Name": "北京市"
          },
          {
            "ParentCode": "110000",
            "Childs": [],
            "Code": "110101",
            "Name": "東城區"
          }
        ],
        "Code": "110000",
        "Name": "北京"
      }
    ],
    "Code": "100000",
    "Name": "中國"
  }
]

第三步:使用 AsTreeCte 遞歸查詢

若不做數據冗餘的無限級分類表設計,遞歸查詢少不了,AsTreeCte 正是解決遞歸查詢的封裝,方法參數說明:

參數 描述
(可選) pathSelector 路徑內容選擇,可以設置查詢返回:中國 -> 北京 -> 東城區
(可選) up false(默認):由父級向子級的遞歸查詢,true:由子級向父級的遞歸查詢
(可選) pathSeparator 設置 pathSelector 的連接符,默認:->
(可選) level 設置遞歸層級

通過測試的數據庫:MySql8.0、SqlServer、PostgreSQL、Oracle、Sqlite、達夢、人大金倉

姿勢一:AsTreeCte() + ToTreeList

var t2 = fsql.Select<Area>()
  .Where(a => a.Name == "中國")
  .AsTreeCte() //查詢 中國 下的所有記錄
  .OrderBy(a => a.Code)
  .ToTreeList(); //非必須,也可以使用 ToList(見姿勢二)
Assert.Single(t2);
Assert.Equal("100000", t2[0].Code);
Assert.Single(t2[0].Childs);
Assert.Equal("110000", t2[0].Childs[0].Code);
Assert.Equal(2, t2[0].Childs[0].Childs.Count);
Assert.Equal("110100", t2[0].Childs[0].Childs[0].Code);
Assert.Equal("110101", t2[0].Childs[0].Childs[1].Code);
// WITH "as_tree_cte"
// as
// (
// SELECT 0 as cte_level, a."Code", a."Name", a."ParentCode" 
// FROM "Area" a 
// WHERE (a."Name" = '中國')

// union all

// SELECT wct1.cte_level + 1 as cte_level, wct2."Code", wct2."Name", wct2."ParentCode" 
// FROM "as_tree_cte" wct1 
// INNER JOIN "Area" wct2 ON wct2."ParentCode" = wct1."Code"
// )
// SELECT a."Code", a."Name", a."ParentCode" 
// FROM "as_tree_cte" a 
// ORDER BY a."Code"

姿勢二:AsTreeCte() + ToList

var t3 = fsql.Select<Area>()
  .Where(a => a.Name == "中國")
  .AsTreeCte()
  .OrderBy(a => a.Code)
  .ToList();
Assert.Equal(4, t3.Count);
Assert.Equal("100000", t3[0].Code);
Assert.Equal("110000", t3[1].Code);
Assert.Equal("110100", t3[2].Code);
Assert.Equal("110101", t3[3].Code);
//執行的 SQL 與姿勢一相同

姿勢三:AsTreeCte(pathSelector) + ToList

設置 pathSelector 參數后,如何返回隱藏字段?

var t4 = fsql.Select<Area>()
  .Where(a => a.Name == "中國")
  .AsTreeCte(a => a.Name + "[" + a.Code + "]")
  .OrderBy(a => a.Code)
  .ToList(a => new { 
    item = a, 
    level = Convert.ToInt32("a.cte_level"), 
    path = "a.cte_path" 
  });
Assert.Equal(4, t4.Count);
Assert.Equal("100000", t4[0].item.Code);
Assert.Equal("110000", t4[1].item.Code);
Assert.Equal("110100", t4[2].item.Code);
Assert.Equal("110101", t4[3].item.Code);
Assert.Equal("中國[100000]", t4[0].path);
Assert.Equal("中國[100000] -> 北京[110000]", t4[1].path);
Assert.Equal("中國[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
Assert.Equal("中國[100000] -> 北京[110000] -> 東城區[110101]", t4[3].path);
// WITH "as_tree_cte"
// as
// (
// SELECT 0 as cte_level, a."Name" || '[' || a."Code" || ']' as cte_path, a."Code", a."Name", a."ParentCode" 
// FROM "Area" a 
// WHERE (a."Name" = '中國')

// union all

// SELECT wct1.cte_level + 1 as cte_level, wct1.cte_path || ' -> ' || wct2."Name" || '[' || wct2."Code" || ']' as cte_path, wct2."Code", wct2."Name", wct2."ParentCode" 
// FROM "as_tree_cte" wct1 
// INNER JOIN "Area" wct2 ON wct2."ParentCode" = wct1."Code"
// )
// SELECT a."Code" as1, a."Name" as2, a."ParentCode" as5, a.cte_level as6, a.cte_path as7 
// FROM "as_tree_cte" a 
// ORDER BY a."Code"

更多姿勢…請根據代碼註釋進行嘗試

源碼地址:https://github.com/dotnetcore/FreeSql

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

前端開發神器Charles從入門到卸載

前言

本文將帶大家學習使用前端開發神器-charles,從基本的下載安裝到常見配置使用,為大家一一講解。

一、花式誇獎Charles

  • 截取 Http 和 Https 網絡封包。
  • 支持重髮網絡請求,方便後端調試。
  • 支持修改網絡請求參數。
  • 支持網絡請求的截獲並動態修改。
  • 支持模擬慢速網絡。

好,騎上我心愛的小摩托,準備上路…

二、下載與安裝

官網下載傳送門

本文所使用的的版本為 mac V4.5.6版本,不同版本間的具體化差異,大家可留言交流。

Charles破解工具可通過關注公眾號「胡哥有話說」,回復關鍵字charles獲得。

三、簡單入門-抓包所有請求

  1. 打開Charles,勾選Proxy下的macOS Proxy(如果是windows,此處為Windows Proxy)
  2. 點擊Proxy->Start Recording,打開瀏覽器訪問任意頁面,可以在Charles中看到請求了。

很好,現在已經上路了,學習的路上永不堵車…

四、設置過濾請求

通過上面的操作,我們已經抓包了所有的請求,實際開發中可能是專門針對某些接口(如百度域名下的接口),我們可以專門配置過濾接口。

  1. 臨時性過濾配置

    在展示界面的Filter中可進行條件過濾

    同時可在右側的settings中配置使用正則來進行過濾

  2. 永久性過濾配置

    通過Proxy->Recording Settings->include中配置過濾條件

Ok,我們又前進了一大步

五、代理轉發請求

通過CharlesMap RemoteMap Local我們也可以配置代理轉發請求。

Map Remote

Map Remote 遠程映射,是將指定的網絡請求重定向到另一個網址

業務場景:
某些服務端的文件請求時限制某些特定域名(*.baidu.com),我們使用localhost啟動項目時,會導致沒有權限訪問。通過配置Map Remote遠程映射解決問題。

配置路徑:
設置Tools->Map Remote

如圖上的配置,本地啟動的項目地址為:http://localhost:8080(或 http://127.0.0.1:8080),現在再訪問,可以使用路徑 http://test.baidu.com訪問即可。

注意Enable Map Remote一定要勾選,以及相應規則也要勾選,否則不會生效

Map Local

Map Local 本地映射,是指將指定的網絡請求重定向到本地的文件

業務場景:
在本地化的開發中,接口數據Mock;或者是線上環境問題排查時,將請求重定向到本地文件以方便排查。

配置路徑:
設置Tools->Map Local

通過如上圖的配置,請求 aa.baidu.com:443/index時,會被映射到本地 /xx/index.json

注意Enable Map Local一定要勾選,以及相關規則也要勾選,否則不會生效。

六、手機抓包

手機抓包請求也是我們日常開發中需要用到的,那如何利用Charles抓包手機請求呢。

  1. 設置Charles的代理端口號
    通過設置Proxy->Proxy Settings->Proxies->HTTP Proxy下的Port端口號

  2. 查看本地IP地址
    通過CharlesHelp->Local IP Address查看,本機IP為xx.xx.xx.xx

  3. 手機和電腦需要處於同於wifi網絡內

  4. 手機wifi網絡配置

    以華為mate 30為例,選擇對應的wifi,選擇显示高級選項,設置代理為手動
    設置服務器主機名為:xx.xx.xx.xx(剛才查看的電腦IP)
    設置服務器端口為:8888(剛才設置的port)
    點擊保存后,手機的請求就可以在Charles中查看啦…

    注意鏈接時,Charles會彈出授權窗口,要選擇Allow

七、限速設置

通過設置Proxy->Throttle Settings來進行速度限制

注意:一定要勾選 Enable Throttling選項

小結

以上是給大家分享的Charles的常見使用配置,如有相關問題可留言交流。

後記

以上就是胡哥今天給大家分享的內容,喜歡的小夥伴記得點贊收藏呦,關注胡哥有話說,學習前端不迷路,歡迎多多留言交流…

胡哥有話說,專註於大前端技術領域,分享前端系統架構,框架實現原理,最新最高效的技術實踐!

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準