欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

VC2010下C++ Shapefile讀寫類庫(kù)設(shè)計(jì)與實(shí)現(xiàn):從零構(gòu)建輕量級(jí)GIS數(shù)據(jù)處理引擎

VC2010下C++ Shapefile讀寫類庫(kù)設(shè)計(jì)與實(shí)現(xiàn):從零構(gòu)建輕量級(jí)GIS數(shù)據(jù)處理引擎 1. 項(xiàng)目概述與核心價(jià)值最近在整理一個(gè)老項(xiàng)目的代碼發(fā)現(xiàn)里面有不少直接操作Shapefile格式數(shù)據(jù)的“硬編碼”這些代碼混雜在業(yè)務(wù)邏輯里不僅難以維護(hù)每次ArcGIS版本或者需求一變就得大動(dòng)干戈。這讓我下定決心要基于VC2010這個(gè)經(jīng)典的開(kāi)發(fā)環(huán)境封裝一個(gè)純粹的C類庫(kù)專門用于Shapefile的讀寫。這個(gè)想法并非一時(shí)興起而是源于在實(shí)際GIS地理信息系統(tǒng)開(kāi)發(fā)中一個(gè)非常普遍的痛點(diǎn)我們常常需要脫離龐大的ArcGIS Engine或ArcObjects運(yùn)行時(shí)環(huán)境進(jìn)行輕量級(jí)、高性能的數(shù)據(jù)處理或者將GIS功能集成到已有的C桌面或服務(wù)端應(yīng)用中。Shapefile作為ESRI公司推出的事實(shí)上的標(biāo)準(zhǔn)矢量數(shù)據(jù)交換格式其結(jié)構(gòu)看似簡(jiǎn)單.shp, .shx, .dbf三個(gè)主要文件但真要自己從零實(shí)現(xiàn)一套健壯、高效的讀寫邏輯里面門道不少。比如如何處理不同幾何類型點(diǎn)、線、面的坐標(biāo)存儲(chǔ)如何正確讀寫DBF文件的屬性表特別是中文等編碼問(wèn)題如何高效地進(jìn)行空間范圍過(guò)濾市面上雖然有一些開(kāi)源庫(kù)如GDAL/OGR、Shapelib但它們要么過(guò)于龐大要么接口不夠“C”要么在特定性能場(chǎng)景或內(nèi)存管理上不符合項(xiàng)目要求。因此這個(gè)類庫(kù)的核心目標(biāo)很明確在VC2010環(huán)境下構(gòu)建一個(gè)不依賴任何第三方GIS平臺(tái)運(yùn)行時(shí)、接口清晰、性能可控、專注于Shapefile格式讀寫的C工具庫(kù)。它能讓開(kāi)發(fā)者像操作普通文件一樣操作Shape數(shù)據(jù)將重心放回業(yè)務(wù)邏輯本身。接下來(lái)我會(huì)詳細(xì)拆解整個(gè)設(shè)計(jì)與實(shí)現(xiàn)過(guò)程把其中關(guān)鍵的技術(shù)抉擇、實(shí)現(xiàn)細(xì)節(jié)和踩過(guò)的坑都分享出來(lái)。2. 類庫(kù)整體設(shè)計(jì)與架構(gòu)思路2.1 設(shè)計(jì)目標(biāo)與原則在動(dòng)手寫第一行代碼之前明確的設(shè)計(jì)原則能避免后期大量重構(gòu)。我為本類庫(kù)設(shè)定了幾個(gè)核心目標(biāo)零外部依賴除標(biāo)準(zhǔn)庫(kù)這是首要原則。類庫(kù)必須僅依賴C標(biāo)準(zhǔn)庫(kù)和Windows API用于文件操作、編碼轉(zhuǎn)換等確保其可以被任何VC2010項(xiàng)目直接引用無(wú)需配置復(fù)雜的鏈接庫(kù)或環(huán)境變量。接口簡(jiǎn)潔直觀面向使用者設(shè)計(jì)。提供類似ShapefileReader、ShapefileWriter這樣的主要類其方法名應(yīng)如Open、ReadNextFeature、WriteFeature一樣自解釋隱藏底層二進(jìn)制解析的復(fù)雜性。高性能與低內(nèi)存占用針對(duì)大數(shù)據(jù)量文件進(jìn)行優(yōu)化。采用流式讀取Iterator模式避免一次性加載全部數(shù)據(jù)支持基于空間范圍Bounding Box的快速過(guò)濾減少不必要的I/O和內(nèi)存拷貝。健壯性與兼容性嚴(yán)格遵循ESRI Shapefile技術(shù)描述文檔正確處理字節(jié)序Big/Little Endian、幾何類型、Z/M值、DBF字段類型等。同時(shí)對(duì)損壞或非標(biāo)文件有一定的容錯(cuò)能力如跳過(guò)無(wú)法解析的記錄并記錄日志。模塊化與可擴(kuò)展性將幾何操作、屬性表DBF讀寫、空間索引.shx解析等分離成獨(dú)立模塊便于未來(lái)單獨(dú)優(yōu)化或替換。為新的幾何類型如多點(diǎn)、多面體預(yù)留擴(kuò)展接口?;谶@些原則我放棄了直接封裝開(kāi)源庫(kù)的想法決定從文件格式標(biāo)準(zhǔn)出發(fā)進(jìn)行自底向上的實(shí)現(xiàn)。2.2 核心模塊劃分類庫(kù)最終被劃分為四個(gè)核心模塊它們之間的協(xié)作關(guān)系構(gòu)成了主要的架構(gòu)幾何Geometry模塊這是核心中的核心。定義了Point、Polyline、Polygon等基礎(chǔ)幾何類以及包含它們的最小外包矩形Envelope。這些類不僅存儲(chǔ)坐標(biāo)序列還實(shí)現(xiàn)了計(jì)算長(zhǎng)度、面積、判斷點(diǎn)是否在多邊形內(nèi)等基礎(chǔ)空間運(yùn)算。它們是完全獨(dú)立的數(shù)據(jù)結(jié)構(gòu)與文件格式無(wú)關(guān)。屬性表DBase模塊專門處理.dbf文件。封裝了DBF文件頭、字段描述符的讀寫以及記錄的增加、刪除、修改和查詢。重點(diǎn)解決了字符編碼問(wèn)題如將讀取的GBK字節(jié)流轉(zhuǎn)換為項(xiàng)目?jī)?nèi)統(tǒng)一的Unicode字符串。Shapefile 核心讀寫Shapefile Core模塊負(fù)責(zé).shp和.shx文件的二進(jìn)制解析與組裝。它依賴幾何模塊將二進(jìn)制的點(diǎn)線面數(shù)據(jù)反序列化為內(nèi)存對(duì)象也依賴屬性表模塊來(lái)關(guān)聯(lián)幾何與屬性。這個(gè)模塊實(shí)現(xiàn)了空間索引的利用以加速基于范圍的查詢。主接口Public Interface模塊對(duì)外暴露的Shapefile類。它整合了上述所有模塊提供完整的文件生命周期管理打開(kāi)、遍歷、查詢、創(chuàng)建、關(guān)閉。內(nèi)部采用PIMPLPointer to IMPLementation idiom來(lái)隱藏實(shí)現(xiàn)細(xì)節(jié)保持接口穩(wěn)定減少頭文件依賴。// 接口示意簡(jiǎn)化版 class Shapefile { public: enum OpenMode { Read, Write, ReadWrite }; bool Open(const std::wstring filePath, OpenMode mode); bool GetNextFeature(Feature feature); // 流式讀取 std::vectorFeature GetFeaturesInRect(const Envelope rect); // 范圍查詢 bool WriteFeature(const Feature feature); void Close(); // ... 其他元數(shù)據(jù)獲取接口 private: class Impl; std::unique_ptrImpl pImpl; };2.3 開(kāi)發(fā)環(huán)境與工具選型選擇VC2010Visual Studio 2010是出于對(duì)歷史項(xiàng)目兼容性和穩(wěn)定性的考慮。許多遺留的工業(yè)軟件或系統(tǒng)仍運(yùn)行在此環(huán)境下。開(kāi)發(fā)中需注意編譯器特性使用C98/03標(biāo)準(zhǔn)避免C11及以后的特性。智能指針使用std::auto_ptr注意其所有權(quán)轉(zhuǎn)移語(yǔ)義或自行實(shí)現(xiàn)引用計(jì)數(shù)。字符串使用std::string和std::wstring通過(guò)MultiByteToWideChar和WideCharToMultiByte進(jìn)行編碼轉(zhuǎn)換。調(diào)試技巧由于涉及大量二進(jìn)制數(shù)據(jù)十六進(jìn)制查看器如Visual Studio內(nèi)置的內(nèi)存查看器是必備工具。我習(xí)慣將讀取的文件頭信息、幾何坐標(biāo)的第一個(gè)點(diǎn)等關(guān)鍵數(shù)據(jù)在調(diào)試時(shí)立即輸出到控制臺(tái)或日志文件便于快速定位解析錯(cuò)誤。性能分析使用QueryPerformanceCounter進(jìn)行高精度計(jì)時(shí)重點(diǎn)優(yōu)化文件I/O如使用內(nèi)存映射文件CreateFileMapping和頻繁調(diào)用的幾何計(jì)算函數(shù)。3. 關(guān)鍵技術(shù)細(xì)節(jié)與實(shí)現(xiàn)解析3.1 Shapefile二進(jìn)制格式解析與讀寫這是類庫(kù)的基石。.shp文件存儲(chǔ)幾何數(shù)據(jù)其結(jié)構(gòu)是固定頭File Header加可變長(zhǎng)度記錄Record的序列。文件頭解析 文件頭長(zhǎng)100字節(jié)包含文件長(zhǎng)度以16位字為單位、版本、幾何類型以及整個(gè)文件數(shù)據(jù)的空間范圍Bounding Box。這里第一個(gè)坑就是字節(jié)序。Shapefile文件頭的前4個(gè)字節(jié)文件碼是Big Endian大端序而文件頭其余部分和所有記錄內(nèi)容都是Little Endian小端序即Intel x86架構(gòu)的本地序。必須專門處理。// 讀取大端序32位整數(shù)的示例函數(shù) int32_t ReadBigInt32(std::ifstream fs) { int32_t value; fs.read(reinterpret_castchar*(value), sizeof(value)); // 從大端序轉(zhuǎn)換到主機(jī)序小端序 return ((value 0xFF) 24) | ((value 0xFF00) 8) | ((value 0xFF0000) 8) | ((value 24) 0xFF); }記錄解析 每個(gè)記錄由記錄頭和記錄內(nèi)容組成。記錄頭包含記錄號(hào)從1開(kāi)始和記錄長(zhǎng)度以16位字為單位。記錄內(nèi)容以幾何類型代碼開(kāi)始后面跟著該幾何類型的坐標(biāo)數(shù)據(jù)。例如一個(gè)多邊形Polygon包含多個(gè)環(huán)Ring每個(gè)環(huán)由一串點(diǎn)構(gòu)成。解析時(shí)需要根據(jù)幾何類型動(dòng)態(tài)分配內(nèi)存來(lái)存儲(chǔ)點(diǎn)數(shù)組。注意Shapefile規(guī)范中多邊形的環(huán)有內(nèi)外之分外環(huán)頂點(diǎn)順序?yàn)轫槙r(shí)針內(nèi)環(huán)洞為逆時(shí)針。在實(shí)現(xiàn)幾何運(yùn)算如點(diǎn)在多邊形內(nèi)判斷時(shí)必須嚴(yán)格遵守此約定否則會(huì)導(dǎo)致計(jì)算結(jié)果完全錯(cuò)誤。我通常在解析時(shí)就將環(huán)的方向標(biāo)準(zhǔn)化并存儲(chǔ)起來(lái)。.shx索引文件利用 .shx文件是固定長(zhǎng)度每條記錄8字節(jié)的偏移索引內(nèi)容為對(duì)應(yīng).shp文件中記錄的偏移量以16位字為單位和記錄長(zhǎng)度。在打開(kāi)文件時(shí)可以一次性將整個(gè).shx文件讀入內(nèi)存構(gòu)建一個(gè)std::vectorIndexRecord。當(dāng)進(jìn)行隨機(jī)訪問(wèn)或范圍查詢時(shí)可以先用.shx索引快速定位到.shp文件中大致的位置再進(jìn)行精細(xì)讀取這比順序遍歷.shp文件快幾個(gè)數(shù)量級(jí)。3.2 DBase (.dbf) 屬性表處理.dbf文件處理的最大挑戰(zhàn)在于字符編碼和字段類型兼容性。文件頭與字段描述 DBF文件頭包含記錄數(shù)、最近更新日期、記錄長(zhǎng)度以及字段描述符數(shù)組。每個(gè)字段描述符定義了字段名、類型C字符型N數(shù)值型D日期型等、長(zhǎng)度和小數(shù)位數(shù)。字段名最多10字節(jié)且早期規(guī)范中不支持中文這導(dǎo)致很多中文系統(tǒng)下生成的Shapefile字段名實(shí)際上是GBK編碼的字節(jié)序列。我的處理策略是在讀取時(shí)嘗試將字段名字節(jié)序列按GBK解碼為std::wstring在寫入時(shí)反向操作。同時(shí)提供一個(gè)配置選項(xiàng)允許用戶指定編碼。記錄讀寫 記錄是定長(zhǎng)的每條記錄以一個(gè)刪除標(biāo)記字節(jié)開(kāi)始。字段值緊密排列。對(duì)于字符型字段需要去除尾部空格。對(duì)于數(shù)值型字段需要將字符串轉(zhuǎn)換為double。這里要特別注意數(shù)值精度丟失和非法字符的處理。我寫了一個(gè)健壯的字符串轉(zhuǎn)浮點(diǎn)數(shù)函數(shù)能處理前導(dǎo)/尾隨空格以及非數(shù)字字符。// 一個(gè)簡(jiǎn)單的不完整的數(shù)值字段解析示例 double ParseNumericField(const char* str, int length) { std::string trimmed(str, length); // 去除前后空格 trimmed.erase(0, trimmed.find_first_not_of( )); trimmed.erase(trimmed.find_last_not_of( ) 1); if (trimmed.empty()) return 0.0; // 或定義一個(gè)“空值” char* endPtr; double val std::strtod(trimmed.c_str(), endPtr); if (endPtr trimmed.c_str()) { // 轉(zhuǎn)換失敗記錄日志或返回特定值 return std::numeric_limitsdouble::quiet_NaN(); } return val; }實(shí)操心得處理用戶提供的Shapefile時(shí)經(jīng)常遇到.dbf文件末尾多出一些“臟數(shù)據(jù)”可能是未清理的刪除記錄或軟件生成錯(cuò)誤。一個(gè)健壯的解析器應(yīng)該在讀取完聲明的記錄數(shù)后檢查文件是否真的結(jié)束并對(duì)后續(xù)的“臟數(shù)據(jù)”有容忍或告警機(jī)制而不是直接崩潰。3.3 幾何對(duì)象模型設(shè)計(jì)與內(nèi)存管理設(shè)計(jì)一個(gè)高效且易用的幾何對(duì)象模型是關(guān)鍵。我采用了繼承體系基類Geometry定義虛接口如GetType(),GetEnvelope(),Clone()派生類Point,Polyline,Polygon實(shí)現(xiàn)具體細(xì)節(jié)。坐標(biāo)存儲(chǔ) 使用std::vectordouble存儲(chǔ)連續(xù)的x, y坐標(biāo)對(duì)。對(duì)于多邊形使用std::vectorstd::vectorPoint來(lái)存儲(chǔ)環(huán)Rings。這種設(shè)計(jì)內(nèi)存連續(xù)訪問(wèn)效率高也便于使用標(biāo)準(zhǔn)算法。內(nèi)存管理 由于幾何對(duì)象可能很大包含數(shù)十萬(wàn)個(gè)點(diǎn)必須謹(jǐn)慎管理其生命周期。在接口設(shè)計(jì)中GetNextFeature返回的Feature對(duì)象包含幾何和屬性的智能指針或值語(yǔ)義的深拷貝對(duì)象取決于性能需求。我最終選擇了使用std::shared_ptrGeometry因?yàn)橥粋€(gè)幾何對(duì)象可能在多個(gè)地方被引用例如在空間索引和渲染列表中。在VC2010中std::tr1::shared_ptr是可用的。空間運(yùn)算實(shí)現(xiàn) 實(shí)現(xiàn)了幾個(gè)核心的空間謂詞和運(yùn)算函數(shù)作為幾何類的靜態(tài)方法或友元函數(shù)Envelope Intersect(const Envelope a, const Envelope b);// 矩形求交bool PointInPolygon(const Point pt, const Polygon poly);// 射線法判斷點(diǎn)是否在多邊形內(nèi)double CalculatePolygonArea(const Polygon poly);// 鞋帶公式計(jì)算多邊形面積這些函數(shù)的實(shí)現(xiàn)需要特別注意浮點(diǎn)數(shù)精度問(wèn)題比較時(shí)使用一個(gè)很小的epsilon值如1e-10。4. 類庫(kù)的完整使用流程與示例4.1 讀取Shapefile并遍歷要素下面展示一個(gè)典型的使用流程包括錯(cuò)誤處理。#include Shapefile.h #include iostream int main() { Shapefile shp; if (!shp.Open(LC:\\data\\rivers.shp, Shapefile::Read)) { std::wcerr LFailed to open shapefile. std::endl; return -1; } // 獲取文件元信息 Envelope fullExtent shp.GetExtent(); std::wcout LData extent: ( fullExtent.XMin L, fullExtent.YMin L) - ( fullExtent.XMax L, fullExtent.YMax L) std::endl; // 流式遍歷所有要素 Feature feat; int count 0; while (shp.GetNextFeature(feat)) { // 處理幾何 std::shared_ptrGeometry geom feat.GetGeometry(); if (geom-GetType() Geometry::Polyline) { Polyline* pl dynamic_castPolyline*(geom.get()); // 計(jì)算河流長(zhǎng)度等... } // 處理屬性 AttributeTable attrs feat.GetAttributes(); std::wstring riverName attrs.GetFieldAsString(LNAME); double length attrs.GetFieldAsDouble(LLENGTH); count; if (count % 1000 0) { std::wcout LProcessed count L features. std::endl; } } std::wcout LTotal features read: count std::endl; shp.Close(); return 0; }4.2 創(chuàng)建新的Shapefile并寫入要素創(chuàng)建新文件需要先定義幾何類型和屬性字段結(jié)構(gòu)。int main() { ShapefileWriter writer; // 1. 定義字段 std::vectorFieldDefn fields; fields.push_back(FieldDefn(LID, FieldType::Integer, 10, 0)); fields.push_back(FieldDefn(LNAME, FieldType::String, 50, 0)); fields.push_back(FieldDefn(LAREA, FieldType::Double, 12, 2)); // 2. 創(chuàng)建文件指定為多邊形類型 if (!writer.Create(LC:\\output\\parcels.shp, Geometry::Polygon, fields)) { // 錯(cuò)誤處理 return -1; } // 3. 構(gòu)造并寫入要素 Feature feature; Polygon poly; // ... 為poly添加環(huán)和頂點(diǎn) feature.SetGeometry(std::make_sharedPolygon(poly)); AttributeData attrData; attrData.SetInteger(LID, 1001); attrData.SetString(LNAME, LSample Parcel); attrData.SetDouble(LAREA, 1250.75); feature.SetAttributes(attrData); if (!writer.WriteFeature(feature)) { // 錯(cuò)誤處理 } // ... 寫入更多要素 writer.Close(); std::wcout LShapefile created successfully. std::endl; return 0; }4.3 執(zhí)行空間查詢利用空間索引進(jìn)行范圍查詢是提升性能的關(guān)鍵。int main() { Shapefile shp; shp.Open(LC:\\data\\buildings.shp, Shapefile::Read); // 定義一個(gè)查詢范圍例如地圖當(dāng)前視圖范圍 Envelope queryRect; queryRect.XMin 100.0; queryRect.YMin 200.0; queryRect.XMax 110.0; queryRect.YMax 210.0; // 快速查詢內(nèi)部使用.shx索引預(yù)篩選 std::vectorFeature results shp.GetFeaturesInRect(queryRect); std::wcout LFound results.size() L features in the query rectangle. std::endl; for (const auto feat : results) { // 對(duì)查詢結(jié)果進(jìn)行精細(xì)處理 // 此時(shí)可以進(jìn)一步用幾何運(yùn)算精確判斷是否在范圍內(nèi)如復(fù)雜多邊形 } shp.Close(); return 0; }5. 開(kāi)發(fā)中遇到的典型問(wèn)題與解決方案在實(shí)現(xiàn)和測(cè)試過(guò)程中我遇到了不少“坑”這里總結(jié)幾個(gè)最具代表性的。5.1 中文亂碼問(wèn)題問(wèn)題描述讀取某些Shapefile時(shí).dbf文件中的中文字段名或?qū)傩灾碉@示為亂碼。根因分析Shapefile規(guī)范未定義字符編碼。在中文Windows環(huán)境下許多GIS軟件包括老版本ArcGIS使用系統(tǒng)默認(rèn)的ANSI代碼頁(yè)如GBK來(lái)寫入.dbf文件。而我們的C程序如果默認(rèn)使用UTF-8或?qū)捵址幚砭蜁?huì)產(chǎn)生亂碼。解決方案探測(cè)與轉(zhuǎn)換在類庫(kù)中提供一個(gè)編碼設(shè)置接口如SetEncoding(GBK)。在讀取時(shí)使用MultiByteToWideChar函數(shù)將指定編碼的字節(jié)流轉(zhuǎn)換為程序內(nèi)部統(tǒng)一的std::wstringUTF-16。寫入時(shí)進(jìn)行反向操作。自動(dòng)探測(cè)啟發(fā)式可以嘗試用常見(jiàn)編碼GBK, UTF-8, BIG5去解碼字段名選擇解碼后不包含非法字符且看起來(lái)像合理文本的編碼。但這并不完全可靠。最佳實(shí)踐在項(xiàng)目文檔中明確要求或提供一個(gè)工具函數(shù)來(lái)檢測(cè)文件的可能編碼。對(duì)于新創(chuàng)建的文件統(tǒng)一強(qiáng)制使用UTF-8編碼寫入并在文件頭或某個(gè)保留字段中做標(biāo)記。5.2 大文件讀取性能瓶頸問(wèn)題描述讀取一個(gè)包含幾十萬(wàn)個(gè)多邊形的Shapefile時(shí)速度非常慢內(nèi)存占用飆升。根因分析最初的簡(jiǎn)單實(shí)現(xiàn)是Open時(shí)一次性將所有要素的幾何和屬性都加載到std::vectorFeature中。對(duì)于大文件這會(huì)導(dǎo)致巨大的內(nèi)存分配和初始化時(shí)間。解決方案流式讀取Iterator模式如之前示例所示提供GetNextFeature接口。內(nèi)部維護(hù)一個(gè)文件讀取指針和當(dāng)前記錄索引每次只讀取并解析一個(gè)要素的數(shù)據(jù)。這幾乎將內(nèi)存占用降為常數(shù)。利用空間索引對(duì)于“范圍查詢”這種常見(jiàn)操作如果順序遍歷所有要素會(huì)非常慢。在Open階段將.shx文件全部讀入內(nèi)存它很小構(gòu)建一個(gè)內(nèi)存索引。查詢時(shí)先用外包矩形在索引中進(jìn)行快速篩選只加載那些外包矩形與查詢范圍相交的要素記錄大大減少I/O。內(nèi)存映射文件Memory-Mapped File對(duì)于超大型.shp文件可以使用Windows的CreateFileMapping和MapViewOfFile將文件映射到進(jìn)程的虛擬地址空間。這樣操作系統(tǒng)會(huì)負(fù)責(zé)按需將文件內(nèi)容分頁(yè)調(diào)入物理內(nèi)存訪問(wèn)起來(lái)就像操作內(nèi)存數(shù)組一樣快特別適合隨機(jī)訪問(wèn)。5.3 多邊形環(huán)方向與自相交處理問(wèn)題描述計(jì)算某些多邊形的面積時(shí)得到負(fù)值或者進(jìn)行空間關(guān)系判斷時(shí)結(jié)果異常。根因分析用戶數(shù)據(jù)質(zhì)量參差不齊。多邊形環(huán)可能不遵守“外環(huán)順時(shí)針、內(nèi)環(huán)逆時(shí)針”的規(guī)范或者多邊形本身存在自相交蝴蝶結(jié)形狀。這違反了大多數(shù)幾何算法如鞋帶公式的前提假設(shè)。解決方案環(huán)方向規(guī)范化在Polygon類的構(gòu)造函數(shù)或SetRings方法中自動(dòng)檢測(cè)并修正環(huán)的方向。計(jì)算每個(gè)環(huán)的“有符號(hào)面積”如果外環(huán)面積為負(fù)順時(shí)針則反轉(zhuǎn)其頂點(diǎn)順序如果內(nèi)環(huán)面積為正逆時(shí)針也將其反轉(zhuǎn)。復(fù)雜多邊形處理對(duì)于自相交多邊形簡(jiǎn)單的計(jì)算會(huì)出錯(cuò)。一個(gè)實(shí)用的方法是在類庫(kù)中提供一個(gè)Simplify或Validate方法調(diào)用第三方庫(kù)如GEOS的緩沖區(qū)為0Buffer(0)操作可以自動(dòng)修復(fù)許多拓?fù)溴e(cuò)誤。但為了保持零依賴我在本類庫(kù)中僅提供了檢測(cè)功能通過(guò)計(jì)算線段相交并在遇到自相交時(shí)拋出異?;蚍祷匾粋€(gè)錯(cuò)誤標(biāo)志由調(diào)用者決定如何處理如記錄日志并跳過(guò)該要素。5.4 VC2010兼容性細(xì)節(jié)問(wèn)題描述代碼在更高版本的Visual Studio如VS2015, VS2019上編譯正常但在VC2010上編譯失敗或行為不一致。根因分析VC2010對(duì)C11支持非常有限且標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)和一些編譯器行為與新版有差異。解決方案清單智能指針使用std::tr1::shared_ptr和std::tr1::unique_ptr模擬替代std::shared_ptr和std::unique_ptr。auto關(guān)鍵字避免使用auto進(jìn)行類型推導(dǎo)VC2010不支持。老老實(shí)實(shí)寫出完整類型?;诜秶膄or循環(huán)不支持。改用傳統(tǒng)的迭代器循環(huán)。std::to_string不支持。使用std::stringstream或sprintf進(jìn)行轉(zhuǎn)換。文件系統(tǒng)操作沒(méi)有filesystem。使用Windows APIFindFirstFile,FindNextFile或Boost庫(kù)如果允許引入依賴來(lái)處理路徑。預(yù)編譯頭stdafx.h確保所有.cpp文件的第一行是#include stdafx.h否則可能產(chǎn)生奇怪的編譯錯(cuò)誤。6. 進(jìn)階優(yōu)化與擴(kuò)展方向一個(gè)基礎(chǔ)可用的類庫(kù)完成后還可以從多個(gè)方向進(jìn)行深化以滿足更專業(yè)的需求。6.1 空間索引的深度集成雖然利用了.shx文件進(jìn)行粗略篩選但.shx索引只是記錄偏移索引并非真正的空間索引如R-Tree。對(duì)于海量數(shù)據(jù)的復(fù)雜空間查詢?nèi)纭安檎揖嚯x某點(diǎn)10公里內(nèi)的所有設(shè)施”性能依然不足。擴(kuò)展方案可以在類庫(kù)內(nèi)部集成一個(gè)輕量級(jí)的R-Tree實(shí)現(xiàn)。在打開(kāi)文件或首次讀取時(shí)除了加載.shx還可以為每個(gè)要素的外包矩形構(gòu)建一個(gè)內(nèi)存中的R-Tree。這樣任何基于空間關(guān)系的查詢相交、包含、Within Distance都可以先通過(guò)R-Tree快速過(guò)濾出候選集再進(jìn)行精確的幾何計(jì)算。這會(huì)將查詢性能從O(n)提升到O(log n)。6.2 多線程讀寫支持現(xiàn)代CPU都是多核的利用多線程可以顯著加速批量數(shù)據(jù)處理。實(shí)現(xiàn)思路讀取對(duì)于已知記錄數(shù)的大文件可以將文件邏輯分塊每個(gè)線程負(fù)責(zé)讀取和解析一個(gè)連續(xù)塊內(nèi)的記錄最后合并結(jié)果。需要注意文件指針的線程安全可以使用內(nèi)存映射文件讓每個(gè)線程訪問(wèn)不同的內(nèi)存區(qū)域。寫入寫入操作通常有順序要求多線程難度較大。但可以將要素的幾何構(gòu)造和屬性準(zhǔn)備過(guò)程并行化最后由一個(gè)專門的I/O線程按順序?qū)懭胛募W⒁馐马?xiàng)必須確保幾何對(duì)象和屬性表對(duì)象的內(nèi)部狀態(tài)是線程安全的或者采用“線程局部”策略避免共享可變狀態(tài)。6.3 坐標(biāo)系統(tǒng)Projection信息的支持Shapefile本身不存儲(chǔ)坐標(biāo)系統(tǒng)信息通常由一個(gè)額外的.prj文件存儲(chǔ)WKT格式的坐標(biāo)系統(tǒng)描述來(lái)定義。擴(kuò)展方案在Shapefile類中增加一個(gè)LoadProjection(const std::wstring prjFilePath)方法用于讀取.prj文件內(nèi)容??梢约梢粋€(gè)精簡(jiǎn)的坐標(biāo)轉(zhuǎn)換庫(kù)如proj.4的輕量級(jí)封裝或者至少將WKT字符串存儲(chǔ)下來(lái)提供給上層應(yīng)用使用。這樣類庫(kù)就具備了感知數(shù)據(jù)空間參考的能力為后續(xù)可能的坐標(biāo)轉(zhuǎn)換功能打下基礎(chǔ)。6.4 生成更高效的二進(jìn)制格式有時(shí)我們需要將處理后的中間數(shù)據(jù)臨時(shí)存儲(chǔ)或快速交換??梢曰诖祟悗?kù)設(shè)計(jì)一種比原生Shapefile更高效的私有二進(jìn)制格式。設(shè)計(jì)要點(diǎn)合并文件將.shp, .shx, .dbf的內(nèi)容合并到一個(gè)文件中簡(jiǎn)化管理。列式存儲(chǔ)屬性對(duì)于數(shù)值型屬性可以按列連續(xù)存儲(chǔ)便于統(tǒng)計(jì)分析。壓縮對(duì)坐標(biāo)序列和字符串屬性進(jìn)行壓縮如使用zlib。內(nèi)嵌空間索引將R-Tree等索引結(jié)構(gòu)直接序列化到文件頭部。 這樣的格式專為讀寫速度優(yōu)化非常適合作為復(fù)雜GIS分析流程中的中間數(shù)據(jù)載體。實(shí)現(xiàn)這個(gè)基于VC2010的Shapefile讀寫類庫(kù)是一個(gè)從理解規(guī)范、設(shè)計(jì)架構(gòu)、克服兼容性問(wèn)題到不斷優(yōu)化性能的完整過(guò)程。它讓我對(duì)底層數(shù)據(jù)格式、C內(nèi)存與文件管理、以及空間數(shù)據(jù)處理有了更深刻的認(rèn)識(shí)。最終得到的不僅僅是一個(gè)工具更是一個(gè)可以靈活定制、適應(yīng)各種苛刻場(chǎng)景的解決方案。如果你也在處理類似的本地化GIS數(shù)據(jù)集成問(wèn)題希望這份詳細(xì)的拆解能為你提供一條清晰的路徑。最關(guān)鍵的是自己動(dòng)手實(shí)現(xiàn)一遍你對(duì)數(shù)據(jù)本身的理解會(huì)完全不同再遇到任何詭異的數(shù)據(jù)問(wèn)題你都能從容地深入到二進(jìn)制層面去找到答案。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色五月影视| 五月天婷爱综合| 欧美久久婷婷| 婷婷激情综合网| 99热在线极品极品| 99色视频| 91成人品| 亚洲精品婷婷| 99精品久久久久久久婷婷久久 | 婷婷五月丁香五月| 色婷婷五月天在线观看| 玖玖爱伊人| 婷色五月天| 99综合一区| 色色狼人综合| 99色.com| 99ri视频在线观看| 日本韩国视频在线观看社区免费的9| 丁六月激情| 五月婷婷丁香六月| 欧美色偷偷大香| 亚洲成人综合在线| 殴美日比视频| 色屌丝中文字幕| 久这里只有精品| 99热丁香五月| 五月婷婷精品| 超碰99热在线观看| 色色综合五月| 久草婷妨| 亚洲综合激情五月久久| 99爱最新免费视频在线观看| 99热色婷婷| 天天色粽合合合合合合合| 夜夜操加勒比| 天天插天天插| 538在线精品| 久久99综合网| 欧州色色| 九九無妻| 五月天丁香| 天天肏天天爽夜夜爽| 九月丁香八月婷婷加勒比| 综合欧美五月婷婷| 精品色情一区二区三区四区| 婷婷五月丁香综合亚洲| 夜夜爽天天干| 久久久97| 免费无码毛片一区二区A片 | 欧美va亚洲va在线播放| 九九aV| 久久久九九视频精品18| 色色热| 91要啪| 色玖玖导航| 亚洲第一精品网站| 99热这里有精品| 99性爱视频网站| 深爱开心激情网| 99热乎| 日本熟妇精品99| 五月丁香六月婷婷激情四射| 99激情| 色婷婷香蕉| 天天爽天天摸天天爱| AV中文在线| 久人操| 9久久久| 综合www色| 大香蕉五月天| 日韩青青| 日韩精品超碰在线观看| 久久激情婷婷| 婷婷天堂综合| 亚洲久久婷婷丁香五月天| 丁香婷婷色情| 五月丁香亚洲校园欧美| 99自拍视频在线| 99热99网| wwccc久久久| 婷婷六月综合在线| 五月丁香六月激情在线| 九九热在线视频观看| 九九视频这里是精品五月| 激情伊人网| 婷婷五月天网址| 69色婷婷| 5月婷婷6月丁香aV| 六月激情久久| 天天综合精品| 婷婷五月色| 五月丁香啪啪啪| 99国产在线精品视频| 91男同| 99在线免费观看| 日韩中文欧美| 99乱视频| 丁香婷婷十月| 色五月激情综合网| 超碰免费电影| 小视频在线亚洲| xxx日本东京热| 婷婷五月综合激情免费视频| 天天操夜夜爱| 亚洲中文乱字字幕在线永久| 天天日天天色| 东京热免费视频网站| 激情五月婷婷丁香综合网| 男女啪啪做爰高潮无遮挡| 五月激情综合网| 国产人妻777人伦精品HD| 久色网| 婷婷大香焦| 色九九七七| 丁香五月激情天AV无码| 色婷婷六月精品| 色激情五月| 国产露脸150部国语对白| 久久女婷| 亚洲午夜Av| 丁香五月丐人妻| 噜噜噜噜噜色| 九九综合影音先锋| 丁香九月激情| 五月天综合网| 色碰97| 天天操天天日天天爱| 国产成人网| 99热这里只有精品搜| 婷婷激情五月色综合| 99re8这里只有精品99re8热视频| 天天干天天干天天干天天干天天干| 激情99热| 五月天激情婷婷| 五月丁香啪。| 五月天色不卡| 五月婷婷丁香网| 婷婷丁香人妻| 九九在线精点品| 九九九九九九综合| 天天爱天天做天天操| 五月婷婷五月色| 丁香五月天堂网| 97影院一级片| 婷久久| 丁香六月天婷婷| 六月米奇色综合| 九九AV| 久草嫩草在线观看| 丁香婷婷十月| 9九九久久精品无码专区| 99视频啪啪| 91dy.av| 久操操| 日本久久婷婷| 99九九精品| 久久综合丁香| 久热这里只有精品6| 五月亭亭开心网| av在线观看网址| 五月婷婷狠狠干| 99色综合| 五月丁香直播| 久9草在线观看视频| 婷婷色在线观看| 五月天婷婷免费视频| 丁香五月综合| 九九碰九九爱97超碰| 婷婷五月丁香五月天| 久9无码视频| 亚洲不卡欧洲| 日韩九区| 99只有这里是精品| 欧美乱码国产一级A片| 欧洲亚洲免费视频区| www.夜夜| 丁香五月天欧洲在线| 99热这里只有精品最新| 五月丁香六月激情| 亚洲AV在线免费看| 婷婷激情肏屄网| 999婷婷综合| 色婷婷色综合激情91| 开心婷婷五| 五月丁香大香蕉| 热99久久这里只有精品| 日欧一片内射VA在线影院| 99久re热视频精品98| 国产无套精品一区二区| 九热视频在线伦| 婷婷五月天激情综合深爱激情| 天天综合色| 老妇操B| 色综合久久天天综合网| 啪啪黄页网| 五月丁香六月激情综合网| 天天狠狠干| 亚洲国产成人AV在线| 五月天婷婷丁香花| 第四色五月婷婷| 综合视频久久| 思思热再线视频| 久热精彩视频98| 色久影院| 丁香五月天激情网| 九九九这里只有精品| 91婷婷在线| 狠狠五月丁香色婷| 久久总和99| 任你艹| 婷婷丁香六月激情综合| 五月天婷a在线| 五月丁香激情综合网| 91色五月在线观看| 色综合久久88色综合天天人守婷| 五月天综合网| www.五月天婷婷| 五月天色婷伊人| 五六月婷婷久久| 丁香六月婷婷开心| 99精品在这里| 五月婷色丁香| 2017狠狠干| 国产亚洲精品久久久久久郑州| 亚洲日韩国产黑丝黑丝AVAV一区二区三区| 加勒比久热| 五月天婷婷色| 亚洲人人操| 高清激情av在线观看| 99无码精品| 可以看的av网站| 婷婷五月天最新综合你懂的 | 久久99网站| 玖玖福利视频资源| 二人电影免费版在线观看| 伊人久久五月天| 都市激情五月婷婷亚洲| 99re青青草| 天天弄天天操| 成人AV在线网站| 深爱激情av| 婷婷天堂综合| 99在线播放视频| 99视频啪啪| 亚洲乱码日产精品BD| 东北婷婷五月天| 久久er免费视频| 成人av在线网址| 婷婷色网址| 久久久97| www.夜夜| 91操碰| 激情五月婷| 激情五月狠狠| 婷婷五月天精品| 五月天婷婷丁香蜜桃91| 激情婷婷九月| 久久草中文日韩欧美| 久热只有精品| 丁香六月婷| av网址在线| 这里只有精品视频99| 亚洲无码11| 五月婷婷综合影院| 人妻久热| 在线婷婷| 99高级会所久久| 狠狠操狠狠爱| 久久小视频免费| 五月丁香六月婷婷精品| 七七色色综合| 欧美色图天堂网| 色综合久久天天综合网| 日本97在线观看| 婷婷五月激情黄色| 综合九九日本| 香蕉国产2013| 婷婷五月丁香综合激情小说| 色婷婷A| 六月丁香停| 91久久色| AV大香蕉| 情涩婷婷五月天| 久久这里只有国产视频| 69五月天视频| 色婷婷久综合久久一本国产AV| 婷婷内射视频在线| 97人人操人人干| 亚洲精品色色| 美女妹子后射视频网站在线观看| 色狠狠综合网| 人妻精品一区二区三区| 久久人妻伦理| 97av在线视频| 九月激情婷婷丁香| 99亚洲视频| 色播婷婷五月天| 99re在线视频精品,这里只有精品18,| 亚洲色情免费网| 成人婷婷五月天| 六月五月婷婷| 婷婷性爱网| 性爱久久| 9色免费网| 久久婷婷五月综合精品蜜芽| 欧美在线视频免费播放| 久七香蕉| 五月丁香少妇网| 精品无码av丁香五月激情| 婷婷丁香五月色偷偷| www九月婷婷| 另类精品视频在线观看| 91婷婷搞| 99久久玖玖| 色欲丁香| 91超级碰人人操| 九九九九无码| 六月丁香婷婷网| 夜夜骑天天玩天天日| 人人综合五月人人婷婷| 香蕉婷婷色五月| 色五月婷婷啪啪五月| 玖玖99福利| 成人必爱视| 五月六月丁香激情| 99在线精品免费视频| 色一情一乱一乱一区91Av| 99热精品在线| 91色五月| 五月丁香啪综合| 一点色成人网| 中文字幕AV在线| 情婷婷五月天| 成人无码髙潮喷水A片| 婷婷精品| 九九re精品视频在线观看| 久99综合婷婷| 丁香五月婷婷五月天| 噜噜视频| 色婷婷无吗| 国产熟妇的荡欲午夜视频| 91 欧美| 九色视频91| 天天综合亚洲| 67194中文在线| 国产免费一区二区在线A片视频| 婷婷丁香成人| 色99在线| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 中文字幕综合网| 综合图区激情| 不卡在线视频| 五月丁香激情综合六月涩涩爱| 四色 爱 婷婷 精品 亚洲 五月天| 色开心五月婷婷丁香HD| 久久99综合| 激情五月婷| 久草x色在线观看99| 超碰猛烈的性猛交| 五月天色综合| 亚洲操B视频| 五月丁香六月香综合激情| AVDV久久| 久久久久久久久久久44| 深情六月婷婷综合久久| 五月综合无码| 九九激情视频| 日韩啊啊啊| 国产黄色大片| 婷婷爱五月天| 超碰99资源站| 亚洲视频五区| 婷婷综合欧美| 综合色播| 色五月激情五月丁香五月婷婷啪啪综合 | 狠狠草狠狠草| 色色色在线免费视频| 狠狠狠夜夜夜| 九月激情综合婷婷| 黄网在线播放| 天天插天天插天天日| 亚洲成人人人操| 激情五月婷婷丁香综合网| 涩五月婷婷| 婷婷五月综合亚洲| 欧美影院婷婷| 五月丁香六月激情综合| 综合另类视频| www.婷婷| 亚洲天堂色色| 色五月天激情| 婷婷的激情五月| 九九综合| 五月婷婷,六月丁香| 婷婷五月天激情四射| 手机在线日韩视频中文字幕| 久机视频这只有精品| 亚洲精品又粗又大又爽A片| 97干综合网| 碰超99| 女性自慰系列第五页| 26uuu国产| 欧美 日韩 成人| 人妻久热| 欧美一级色| 99热这里是精品| 婷婷五月天熟妇| 天堂二区| 99热综合| 99热精品一| 1999天天操夜夜操| 精品一二三区久久AAA片| 亚洲午夜视频| 人妻熟人中文字幕一区二区 | 色婷婷五月天不卡| 9久精品| 欧美成人精品A片免费一区99| 色婷婷久久综合| 五月婷婷六月色| 激情综合网 激情五月天| 国产古装妇女野外A片| 九九热这里只有精品23| 婷婷色色婷婷| 色国产五月| 日韩伊人大香蕉| 夜夜操夜夜操| 五月婷婷在线视频观看| 亚洲旡码| 激情五月天情色| www.操.com| 亚洲色婷婷五月| 超碰超碰在线| 亚洲第一影院高清无码网站| 欧州色色| 亚洲丁香五月深爱五月| 久久久中文| 99热这里只有精品在线观看| 婷婷五月电影| 欧在线一区| 久久国产色| 婷婷色五月色| 99久久99热这里只有精品| 日本激情综合| 无码免费人妻A片AAA毛片西瓜| 丁香五月亚洲综合| 色色激情五月| 五月亭久久无码视频| www,超碰| nvrentiantang av| 这里只有精品网| 天天色综合色色色色色。| 99热在线观看| 久久曰曰| 久久激情网| 啪啪99| www天天爽| 午夜丁香六月婷| 亚洲操逼网| 青青日韩| 丁香婷婷性久久| 亚洲av另类在线观看| 亚洲AV网址| 五月成人天| 五月丁香婷婷综合在线| 亚洲成人无码免费| 久热在线观看视频9| 色综合com| 五月丁香六月婷婷激情网| 99精品视频在线观看免费| 国产亚洲在线观看| 噼里啪啦在线观看免费完整版视频| 99思思热只有在这里看| 丁香五月在线人妻| 国产乱码久久| 五月丁香久久网| 精品五月视频婷婷在线观看| 人妻在线网站| 99色.com| 综合久久影院| 九九五月天| 久久色天堂| 天天综合影院| 久久精彩免费视频| 久99综合婷婷| 天天爱天天操| 免费三级黄色| 精品九九久久| 亚洲精品一二三| 97日韩无套内| 久久综合9| 丁香社92视频| 五月天丁香久久| 日韩AV一区二区三区| 一级黄色影片| 日本久久色| 中文字幕高清av| 婷婷丁香综合| 四虎成人精品永久免费AV九九| 亚洲中文字幕翔田千里| 国产AV一区二区三区最新精品| 久久婷婷婷| 国产成人网址| 五月开心播播网| 成人无码精品1区2区3区免费看| 五月丁香精品| 五月婷婷中文| 丁香五月婷婷国产在线| 成人αV视频免费观看| 涩五月婷婷| 免费三级黄色| 丁香五月AV| 九九五月天| 成人色色综合| 欧美va在线观看| 色99在线视频| 日本韩国视频在线观看社区免费的9| 日本99热| 日逼影音先锋男人资源站| 成人在线观看精品| 中文字幕AV在线播放| 亚洲六月综合激情久久下卡| 五月天久久婷| 丁香五月网址| www开心激情网| 丁香伊人网| 国产欧美精品AAAAAA片| 天天揷综合网| 久久婷婷色色| 五月婷婷在线观看| 99色亚洲| 久久在线视频免费观看| 内射在线CHINESE| www:99热视频| 久久久久久久丁香五月天婷婷| 五月婷婷偷拍| 天天天天天久久久久久| 婷婷丁香六月影视| 超级碰碰91| 国产超碰在线| 9久操| 天天色情站| 婷婷另类小说| 九月激情婷婷丁香| 久久9久| 久热这里精品免费| 婷婷狠狠操| 欧美韩国日本| 欧美激情综合| 色五月丁香伊人五月| 日日.c| 超碰成人电影| 六月丁香啪啪| 91久久久久久久久久久| AV在线观看网站| 99热精品在线| 97久久草草超级碰碰碰| 综合色图区| 玖玖爱导航| 亚洲 无码 中文字幕 中出| www.91.com处女在线直播| 久久久久er热| 九九热青青草| 丁香五月婷中字幕| 中国女人做爰A片| 色噜噜夜夜夜综合网| 丁香五月天激情网址| 美女亚洲五月丁香| 99视频自拍| 中文字幕丰满人妻无码专区| 激情综合色五月六月婷婷| 天天高潮夜夜爽| 丁香8月手机综合| 五月久久噜噜| 亚洲成av人影院| 玖玖综合色| 99热99这里免费的精品| 色婷网| 国产精品日日躁夜夜躁| 五月激情婷婷播播网| 五月天另类小说| 五月丁香六月| 激情丁香婷婷五月天| 色色亚洲五月天| 黄色视频网站在线播放| 婷婷六月丁香开心深深爱| 色色色色色色色色色色色色色色,网站| 97caop| 五月色婷婷激情| 午夜不卡久久精品无码免费| 五月婷婷啪啪| 激情五月婷婷她| 丁香五月天激情综合网| 天天精品视频免费观看| 狼人婷婷综合| 激情综合五月| 天天日天天摸天天| 亚洲av电影网站| 丁香五月aV| 国产婷婷婷| 欧美激情综合色综合| 久久激情五月婷婷| 婷婷丁香社区网| 婷婷丁香六月天| 婷婷丁香人妻| www.91AV.com| 爆乳熟妇一区二区三区爆乳| 色婷婷综合在线| 亚洲人人操| 丁香九月婷| 久久99综合| 色九区| 中文成人在线| 五月性色| VA日本视频| 国产精品美女久久久久AV超清| 大香蕉婷婷五月天| 欧美性丁香色色五月天| 丁香五月综合| 五月婷婷综合在线视频小说| 中文字幕无码人妻少妇免费视频| 久久在这里有精品| 色婷婷在线影院| 婷婷五月天视频亚洲| 伊人久久婷婷| 日日夜夜婷婷| 婷婷久久午夜网| 五月做爱| www九九热| 五月丁香网站在线播放| 激情五月婷婷| 五月丁香六月激情在线| 日本免费91| 精品一二三区久久AAA片| 亚洲欧洲自拍图片专区五月天| 天天艹夜夜艹| 婷婷五月丁香狠狠| 综合色色综合| 超碰在线9| 五月婷婷九| www.黄色片-久久成人国产精品在线播放-999AV | 五月丁香六月婷婷啪啪| 日本啪啪天堂| 五月天综合视频| 99热在线里有精品| 51XX午夜影福利| 日逼影音先锋AV男人资源站| 五月婷婷AV| 色五月天激情| www久久五月com| 久久99网址| 五月丁香婷婷潮喷中文字幕| 久久婷综合| 狠婷婷五月| 亚洲VA口| www.婷婷五月天,com| 金桔一区二区ab地址| 丁香五月网在线观看| 无码少妇高潮喷水A片免费| 婷婷五月丁香啪啪| 无码色综合| 淫五月停停| 天天干,夜夜爽| 婷婷伊人综合中文字幕| 久久er九九| 亚洲区,视频区,视频区免费| 三人荫蒂添的好舒服A片| 婷婷干五月综合在线播放| 色情久久久| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 婷婷五月天六点丁香五月| 99热这里只有精品首页| 丁香六月亭亭久久综合| 五月天激情黄色小说在线观看| 色偷偷AV亚洲男人的天堂| 久久婷婷五月| 99热这里只有精品3| AA丁香综合激情| 黄网网站在线播放| 99re视频在线播放| 色一情一乱一乱一区91Av| 婷婷婷婷午夜| 9 7总站超级碰免费视频| 五月丁香成人网| 五月天开心色情网| 国产成人av在线| 色色色国产| 色天使色婷婷| 五月天婷婷色色| 激情综合色| 久久久99久久| 日木狠狠干| 久久草人妻| 一本道综合网| 五月天欧美激情| 激情深爱五月| 91视频五月丁香| 久操激情| 五月丁香激情综合网| 97干在线观看视频| 日日撸夜夜操| 午夜成人片400| 亚洲狠狠色丁香婷婷综合久久| 五月婷激情| 婷婷激情综合| 婷婷五月色播天| 婷婷久久色| 亚洲成人在线综合| 五月色亭丁香| 五月丁香另类网| 99色在线| 五月婷激情| 极品人妻VIDEOSSS人妻 | 9热久久在线| 九色91视频| 538在线| 狠狠五月激情婷婷直播片| 色情五月丁香婷婷网| 91人人妻人人操人人爽| 国产AV影片| 天天拍天天操| 99人妻碰碰碰久久久久视| 欧在线一区| 九九色欲网| 婷婷五月丁香婷婷| 六月丁香激情| 99色爱| 第五婷婷伊人丁香| www..com色爱| 天天日天天干天天操| 五月天婷婷视频| 婷婷五月天小说| 九九热内射| 欧美丁香婷婷天天操| 九九熱最新視頻| 五月天伊人手机在线播放AV| www.99久久久久99| 天天舔夜夜操www com| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 国产精品久久久久久妇女6080| 丁香六月婷婷色XXXXX| 五月天婷婷五月| 超碰在线视屏| 久久婷婷网址| 亚洲综合干| 91九色|疯狂|高潮|对白|| 久久ab| 黄色aa观看aaguochan| 天堂久久婷婷| 国语精品探花| 99色在线| www.色五月| 色婷婷亚洲精品天天综| 99久久久久| 人人97操| 天天操天天操天天操天天操天天操天天操| 五月色综合| 91在线日本| 性天天中文网| 日本久久99| 97人人干人人操| 婷婷丁香人妻天天爽| 色五月丁香婷婷久草| 大香蕉久久| 亚洲爱婷婷| 欧美丁香婷婷五月天| 亚洲性爱电影| 黄网在线观看免费| 天天婷婷色六月| 狠狠插狠狠操| 天天色月| 97在线精品| 亚洲网视屏| 97丁香五月| 人人操 色| 婷婷色五月丁香六月欧美啪| 色情综合| www久| 婷婷五月影院| www:99热视频| 五月激情婷婷在线| 97碰碰视频| 激情五月天婷婷丁香| 九九久久精品| 久久国产性爱A V| 色色色热| 六月色丁香婷婷| 五月丁香啪啪啪| 久99| 亚洲操逼网| 五月激情婷婷丁香| 天天色天天搡| 亚洲超碰在线| 婷婷日日天天| 9热成人在线视频| 久久成人人妻| 亚洲婷婷综合视频| AV在线免费播放| 色综合网址| 99热国产| 少妇久久诱惑视频| 玖玖九九9999在线观看视频精品| 激情五月深爱五月观看| 天天干一干| 99热老网站| 狠狠狠狠狠狠狠狠| 五月婷婷 六月丁香| 欧美婷婷丁香五月社区| 日91高清无玛| 99日本黄站| 成人五月天色天堂| 免费在线观看AV网站| site:hcxsz888.com| 99久久99久久| 久热精品视频在线观| 五月天激情久久| 五月色在线| 久爱综合| 五月婷婷激情五月| 任你草| 国产肥白大熟妇BBBB视频| 亚洲熟女色| 婷婷六月天| 五月天四色房丁香| 六月撸婷婷| 欧美成人精品A片免费一区99| 超碰在线人妻| 婷婷五月天激情网| 五月天婷婷丁香| 婷婷五月天综合网| 91制片厂久久久国产电影| 天天综合干| 香蕉网久久| 玖玖色综合| 五月婷婷色男女| 久久天堂婷婷五月| 成人羞羞啪啪 全 视频| 丁香五月成人| 79色色| 综合五月草| 色欲AVV| 六月激情婷婷| 亚洲狠狠操| 色噜噜狠狠色综| 日韩三级高清无码| 天天日夜夜| 六月色播| 婷婷五月天激情视频| 激情涩播| 欧洲亚洲精品| 激情五月天无人视频在线| 成人va在线| 色五月综合| 激情五月六月婷婷| 婷婷五月天av网| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 久久婷五月综合| 天堂爱爱| 啊v视频在线观看| httpwww色com日本| 婷婷综合网站| 色婷婷色人人射| 夜夜爽天天| 久久视频婷婷| 夜色.cnm| 国产精品扒开腿做爽爽爽A片唱戏| 九九热这里只有精品9| 操b视频在线观看一区二区| 久久婷婷五月天激情| 九九五月天| 香蕉久久国产AV一区二区| 婷婷开心激情| 色综合网综合| 五月丁香拍拍激情综合| 久久全意婷婷| 色五月综合激情| 天天操婷婷| 五月丁香六月花| 天天综合色丁香| 五月天色站| 色色色香蕉五月婷| 亚洲乱码日产精品BD| 日日狠狠久久偷偷四色综合免费| 丁香婷婷性爱| 久久综合首页| 日本久久超碰| 激情婷婷丁香色五月| 国产激情综合五月久久| 久久婷婷五月天激情唯美| 色色色色综合网| 啪啪操超碰| 日韩另类在线观看| 成人短视频免费| 亚洲AV永久无码影院黑人| 9l视频自拍9l九色成人| 日本女va| 激情网 五月天| 狠狠狠婷婷五月综合| 久9热插入| co超碰在线观看| 丁香激情综合| 玖玖婷婷免费| 丁香五月综合网| 日韩黄色影院| 99热99日天天干| 天堂二区| 国产超碰av| 五月天激情日色在线| 婷婷天堂站| 欧美成人精品A片免费一区99| 丁香六月婷婷综合在线| 色色色综合网| 三区激情四射av| 五月激情精品视频| 久色中文| 九九激情视频| 人人妻人人澡| 亚洲黄色影视| 大战熟女丰满人妻AV| 久久婷婷五月天激情四射| 99热九九热| 激情五月天婷婷在线网址发给我| 狠狠狠狠狠操| a久久免费视频| 中文字幕丰满人妻无码专区| 五月丁香狠狠地噜噜噜噜| 久热2025无码| 精品成人无码A片观看香草视频| 3pAV| 婷婷五月开心中文字幕在线| 欧美日韩大黄| 91久久婷婷人人澡草 | 久久总和99| 五月天伊人综合| 成人五月天色天堂| 99在线国| 五月丁香六月婷婷激情网| 开心五月婷| 偷偷操99| 日本三级韩三级99久久| 丁香九月激情| 精品无码久久久久久久久| 无码人妻少妇色欲AV一区二区 | 六月丁香停| 午夜丁香婷婷| 亚洲成人乱码av网站| 色综合综合色| 色欲一区二区三区精品A片| 天天天日天天天干| 九九这里都是精品| 97在线视频观看| 就爱日五月天| 日韩有码久久| 五月婷婷丁香五月亚洲色| 五月激情丁香六月狠狠干| 婷五月丁香俺| 这里只有精品9| 日本婷久久| 高潮毛片又色又爽免费| 五月丁香婷婷欧美色图视频五月丁香777电影 | 国产偷人爽久久久久久老妇APP| 五月婷婷激情| 欧美人与性动交CCOO| 99视频| Www99热| 99九九视屏| 色婷婷狠狠| 五月天婷婷綜合院| 中文字幕在线免费看线人| 丁香五月天91| 大香蕉手机视频| 丁香五月区| 婷婷五月影院| 任你日视频| 久久丁香五月婷婷| 伊人玖玖网| 激情色色色| 激情综合在线观看| 丁香五月Av| 99精品偷自拍| 婷婷激情性爱| 综合久久六月| 色婷婷中文| 色欲婷婷夜夜| 五月天激情社区| 97在线精品| 成人 在线 日韩| 国模淫穴色图| 午夜丁香| 91久久99久久91熟女精品| 人人舔人人色人人高潮| 五月丁香六月婷婷无码| 激情AV在线| 双性美人被调教到喷水A片| 99热10在线高清播放| 色五月婷婷91| 手机免费福利视频| 亚洲精品第一国产综合亚AV | 色色丁香激情五月| 久久er99热精品一区二区| 国产亚洲AV人片在线| 99九九热在线观看| 色婷婷久久综合久色综| 大香蕉AV在线| 九伊人网| 色色色色五月| wwww.9免费视频| 天天碰天天插天天操| www.黄色片-久久成人国产精品在线播放-999AV | 99riAV国产精品视频| 婷婷五月六月| 伊人久久婷| 色婷婷综合久久久久| 久久小说网| 婷婷国产日本欧美| 亚洲成人高清在线| 天天综合 99久久婷婷| 好好日激情五月天| 色婷婷电影网| 久久综合这里只有精品1| 婷婷 激情 五月| 26uuu欧美日本| 九九精品网站| 开心五月天激情网| 亚洲激情 久久| 五月色网| 777色婷婷爱五月| 天天爽天天操| 操你av| 综合色七七| 婷婷丁香五月,狠狠综合| 97精品综合| 青青草性爱视频| 五月天色婷婷综合| 六月婷欧美| 日韩久热| 99热这里只有99| 亚洲乱码日产精品BD| 婷婷五月综合网| 婷婷久久五月天丁香| 婷婷六月成人| 97色啪| 亚洲av免费在线| 午夜少妇在线观看视频| www.久久爱.com| 九九热超碰| 色五月婷婷丁香婷婷| 久久a热| 日本超碰在线| 五月天开心网| 丁香五月天AV| a在线观看| 中字幕视频在线永久在线观看免费 | 侠女刀之记忆电影在线看免费| 天天爽天天| 丁香六月开心| 欧美性爱专区| 丁香五月情| 天天在线久久综合| 播播网色播播| 激情五月天www| 七七色色综合| 无码99| 五月婷婷丁香在线| 综合网网欲色| 久9热| 六月丁香好婷婷| 一区二区乱码视频| 亚洲av| 九九色色| 激情美女五月天| 丁香婷婷浪潮AV久久综合| 五月天婷婷青青草| 丁香五月婷婷激情尤物| 少妇搡BBBB搡BBB搡毛茸茸 | 色综合色婷色基地| www.婷婷五月| 99无码黄色视频| 射久久丁香五月| 99热99色| 天天干天天爽天天爽| 狠狠干.com| 五月婷婷欧美| 综合五月激情网| 久久婷婷五月综合97色一本| 激情九月婷婷| 噜噜色五月| 玖玖色资源| 一本大道嫩草AV无码专区| 五月丁香婷婷伊人| 东京热伊人| 免费操超碰| 爱超碰性| 婷婷综合网站| 色婷婷六月| 亚洲AAAA网| 欧美人人操| 色五月,婷婷大香蕉| AV成人在线播放| 26uuu国产激情视频| 婷婷五月丁香花综合| 激情性爱五月天| 99热综合在线观看| 丁香色五月 97干| 五月丁香偷拍| 色综合激情| 99视频只有精品| 色婷婷丁香香香蕉视频| 偷拍九九五月丁香婷婷| 人妻人人操| 丁香六月激情综合| 天天日,夜夜爽| 99精品视频在线6| w婷婷五月婷婷w| 亚州综合色| 久久青青日本视频| 午夜天天精品视频| 99热这里只有精品5| 五月激情婷婷播播网| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 色婷久久| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 99爱爱网| www.夜夜操.com| 亚洲色婷婷激情| 丁香五月天激情五月天激情五月天激情网| 五月伊人91| 乱精品一区字幕二区| 婷婷五月天成人网| 日日想日日夜日日操| 99九九视频精彩在线| 伊人综合网站| 激情五月六月婷婷| 99re思思热久久| 色五月人妻| 五月色网| 久久六月综合| 亲子乱AV一区二区三区下载| 先锋资源 996| 午夜无码精品色综合久久| 婷婷五月丁香啪啪| 久热人妻| 操操操操操操婷婷五月天| 91Chinese在线| 狠狠干,狠狠操| 美女五月天| 深爱五月天| 夜夜嗨一区二区三区直播内容| 夜夜撸夜夜骑| 欧美日韩成人高清在线| av九九| 丁香五月 综合| 亚洲丁香五月深爱五月| 97人人操在线| 五月六月播婷婷| henhencao国产在线| 玖玖午夜视频| 丁香五月色情| 深爱婷婷色| 操一操插一插| 狠狠高潮精品亚洲1| 九九激情网| 偷拍91九色| 色婷| 综合狠狠伊人| 久久五月网| 五月婷婷丁香在线| 久色激情| 99这里有精品| 免费观看全黄做爰的视频 | 一本九九色| 另类综合激情| 五月丁香爱婷婷深深| 青青热视频| 91色在线/日韩| 婷婷五月天亚洲色| 婷婷六月久久综合导航| 日韩av大全| 人妻精品一区二区三区| 久久九九热视频| 丁香五月激情网| 五月天色图| 日本nghangse中文字幕| 国产精品久久久久9999小说| 色狠狠色噜噜AV天堂五区| 婷婷爱五月| 天天综合网~91| 色五月91| 开心五月深爱五月婷| 最新激情五月天| 色色色色av色色色色| 激情五月婷婷中文字幕| 色综合天天| 亚洲精品视频在线播放| 天天搡日日搡aaaaⅩ| 天天干,夜夜爽| 婷婷色色网| 狠狠色丁香婷婷五月| 色五月婷婷天堂| 99热永久在线观看| 五月天婷婷色综合| 六月综合婷婷开心伊人| 性爱视频久久| 五月婷婷 自拍| 激情丁香久久久久久| 五月丁香婷婷成人版| 999婷婷综合| 99久久综合| 色五月综合在线| 久热91| 色婷婷性爱网| 激情av| 色色A| 五月丁香综合| 成人AV网站在线| 狠狠色激情综合| 色婷婷在线播放| 久艹久| 精品久久久久久久久久久久人妻| 69婷婷丁香午夜| 狠狠色丁香| 午夜激情久久| 九九精品片一| 五月婷婷色色色| 91丁香婷婷综合资源| 日本操碰碰| 五月丁香在线观看| 亚洲性图一区二区三区| 婷婷播播五月天| 六月婷婷色综合| 久久九九网| 99re8这里只有精品99re8热视频| 99久久婷| 丁香五月天婷婷91| 成 久久| 五月天开心网| 激情AV| 99热日韩| 天天日天天久久青青| 性天堂久久| 五月激情影院| 九九伦子片| 色五月丁香婷婷综合| 婷婷色五月丁香六月欧美啪| 五月天伊人网| 色爱综合网| 色噜噜狠狠色综无码久久合欧美| 99re在线播放| 久久五月天激情婷婷| 99热国产在线| 色域五月丁香| 色综合综合网| www.久久| 69热在线| 一起草av| 亚洲午夜精品久久久久久人妖 | 伊人六月丁香婷婷| 日本婷婷| 五月伊人婷婷999| 九九视频这里有精品| 超碰人人草| www久久五月com| 九色无码| 色婷婷五月色| 97色色色| 亚洲视频丁香网va| 99免费视频|