亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于ArcGIS Add-in開(kāi)發(fā)模式的森調(diào)數(shù)據(jù)格式一致性檢查

        2018-12-18 07:01:34何偉平代勁松宋盛
        自然保護(hù)地 2018年4期
        關(guān)鍵詞:程序

        何偉平 代勁松 宋盛

        ?

        基于ArcGIS Add-in開(kāi)發(fā)模式的森調(diào)數(shù)據(jù)格式一致性檢查

        何偉平 代勁松 宋盛

        (浙江省森林資源監(jiān)測(cè)中心 浙江杭州 310020)

        為完成全省各縣(市、區(qū))森林資源規(guī)劃設(shè)計(jì)調(diào)查成果屬性數(shù)據(jù)格式的一致性檢查,在Visual Studio 2015開(kāi)發(fā)環(huán)境下基于ArcObjects的開(kāi)發(fā)接口,采用C#語(yǔ)言編寫開(kāi)發(fā)與浙江省森林資源規(guī)劃調(diào)查技術(shù)規(guī)程要求的標(biāo)準(zhǔn)格式對(duì)比的ArcGIS插件,實(shí)現(xiàn)森林資源規(guī)劃設(shè)計(jì)調(diào)查成果屬性數(shù)據(jù)格式一致性檢查自動(dòng)化,具有準(zhǔn)確、快捷、高效的特點(diǎn)。

        ArcGIS;Add-in開(kāi)發(fā);格式檢查

        1 引言

        浙江省新一輪森林資源規(guī)劃設(shè)計(jì)調(diào)查(以下簡(jiǎn)稱二類調(diào)查)的外業(yè)調(diào)查工作已基本完成,內(nèi)業(yè)處理也接近尾聲,各縣(市、區(qū))的調(diào)查成果已陸續(xù)上報(bào)到浙江省林業(yè)廳,進(jìn)入后期的成果檢查驗(yàn)收?qǐng)?bào)批工作階段。二類調(diào)查數(shù)據(jù)內(nèi)容豐富、各區(qū)縣格式不一,同時(shí)質(zhì)量要求高,格式審查是規(guī)范數(shù)據(jù)的重要環(huán)節(jié),具有工作量大、任務(wù)重、時(shí)間緊等特點(diǎn)。

        ArcGIS的二次開(kāi)發(fā)接口ArcObjects功能強(qiáng)大,Add-in技術(shù)是ArcObjectS開(kāi)發(fā)的一種模式,采用ArcObjectS組件技術(shù)開(kāi)發(fā)實(shí)現(xiàn)對(duì)ArcGIS桌面系統(tǒng)進(jìn)行定制與擴(kuò)展[1]。通過(guò)研發(fā)符合浙江省二類調(diào)查技術(shù)規(guī)程要求的格式審查插件,來(lái)實(shí)現(xiàn)對(duì)屬性數(shù)據(jù)格式校驗(yàn)審核功能,克服傳統(tǒng)人工檢驗(yàn)方法的弊端,能有效提高二類調(diào)查成果檢驗(yàn)的準(zhǔn)確性和工作效率,對(duì)提高二類調(diào)查成果的質(zhì)量有重要意義。

        2 ArcGIS Add-in功能

        2.1 ArcGISAdd-in簡(jiǎn)介

        插件技術(shù)是在軟件的設(shè)計(jì)和開(kāi)發(fā)過(guò)程中,將整個(gè)應(yīng)用程序劃分為宿主程序和插件對(duì)象二部分,宿主程序能夠調(diào)用插件對(duì)象,插件對(duì)象能夠在宿主程序上實(shí)現(xiàn)自己的邏輯,而二者交互基于一種公共的通信契約。宿主程序可以獨(dú)立于插件對(duì)象存在,即使沒(méi)有任何插件對(duì)象,宿主程序的運(yùn)行也不受影響,因此,我們可以在避免改變宿主程序的情況下通過(guò)增加或調(diào)整功能[2]。

        ArcObjects是ESRI公司ArcGIS可采用的通用二次開(kāi)發(fā)組件集,它提供基礎(chǔ)的COM對(duì)象集合,包括1200多個(gè)可訂制、可擴(kuò)展、可開(kāi)發(fā)的GIS應(yīng)用程序的對(duì)象,利用這些組件可以進(jìn)行全面的面向特殊功能的組件開(kāi)發(fā)[3]。

        ArcGIS Add-in 支持的功能類型廣泛、文件結(jié)構(gòu)簡(jiǎn)單、安裝部署方便,在實(shí)際生產(chǎn)過(guò)程中可以快速開(kāi)發(fā)投入應(yīng)用。主要組件有以下幾種:

        Buttons and tools(按鈕和工具);Combo boxes(組合框);Menus and context menus(菜單和快捷菜單);Multi items(多項(xiàng)目);Toolbars (工具欄);Tool palettes(工具欄選項(xiàng));Dockable windows(可??看绑w);Application extensions(應(yīng)用程序擴(kuò)展);Editor extensions(編輯器擴(kuò)展)。

        2.2 ArcGIS Add-in 的文檔結(jié)構(gòu)

        ArcGIS Add-in 是以 Esri Add-in 為后綴的壓縮文件,由配置文件、程序集和資源組成。其中,配置文件XML文件包含了描述Add-in 的信息,包括ID、目標(biāo)、作者、版本等;程序集包含功能代碼和相關(guān)類庫(kù)等;資源包括界面圖標(biāo)等文件。

        2.3 Microsoft Visual Studio(VS)

        Microsoft Visual Studio(VS)作為目前最流行的集成開(kāi)發(fā)環(huán)境之一,被大量開(kāi)發(fā)團(tuán)隊(duì)用于實(shí)現(xiàn)諸多類型和不同規(guī)模的軟件項(xiàng)目,能夠支持C#、C+、javaScript、F#、Visual Basic、Python等多種編程語(yǔ)言,有較強(qiáng)的實(shí)用性。之所以選擇編程語(yǔ)言為C#的項(xiàng)目,是考慮到VS的核心是基于.NET框架開(kāi)發(fā)的,而C#是由微軟所開(kāi)發(fā)的編寫.NET框架的程序設(shè)計(jì)語(yǔ)言。對(duì)于C#項(xiàng)目,VS所能提供的功能將會(huì)更加全面[4]。

        2.4 開(kāi)發(fā)思路

        根據(jù)浙江省二類調(diào)查技術(shù)規(guī)程的要求形成標(biāo)準(zhǔn)的小班(林帶)屬性數(shù)據(jù)結(jié)構(gòu)表和樹(shù)帶屬性數(shù)據(jù)結(jié)構(gòu)表,將小班(林帶)和樹(shù)帶等圖層數(shù)據(jù)加載到ArcGIS Desktop,再通過(guò)利用Visual studio2015開(kāi)發(fā)的ArcGIS Desktop Add-in自動(dòng)檢驗(yàn)相關(guān)屬性數(shù)據(jù)格式與標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)表的一致性。

        本次ArcGIS Add-in的開(kāi)發(fā)環(huán)境VS2015+ ArcGIS Desktop 10.5+ Win7 64bit。

        3 應(yīng)用要點(diǎn)及核心算法

        3.1 啟動(dòng)VS2015,新建項(xiàng)目

        啟動(dòng)VS2015,打開(kāi)“新建項(xiàng)目”界面,確定好項(xiàng)目的名稱和保存的位置,點(diǎn)擊確定,完成新建一個(gè)項(xiàng)目(ArcMap Add-in)。

        3.2 進(jìn)入Welcome頁(yè)面設(shè)置

        在Welcome頁(yè)面中填寫好相應(yīng)的Add-inName(插件的名稱),Company/Publisher(插件的制作公司或發(fā)布者),Author(插件的制作者),Description(插件的描述),最后選擇Image(插件的圖標(biāo))。

        3.3 進(jìn)入Add-inTypes頁(yè)面

        Add-inTypes頁(yè)面用于設(shè)置創(chuàng)建的插件類型。

        選擇Add-inTypes,此處選擇按鈕。填寫ClassName:類的名稱;Caption:按鈕上顯示的文本;Image:按鈕上的圖標(biāo);Category:所屬Command的分類;Tooltip:鼠標(biāo)在上面時(shí)狀態(tài)欄顯示的文字;Description:工具的描述。點(diǎn)擊Finish完成設(shè)置。

        3.4 windows窗體應(yīng)用程序

        在已安裝模板中,選擇Visual C#,右邊會(huì)顯示出各種項(xiàng)目類型。這里第一項(xiàng)就是Windows窗體應(yīng)用程序。

        默認(rèn)狀態(tài)下,會(huì)自動(dòng)生成一個(gè)窗體文件。這個(gè)窗體是主啟動(dòng)窗體,當(dāng)程序運(yùn)行的時(shí)候會(huì)先運(yùn)行這個(gè)窗體。如果需要修改,可以在創(chuàng)建項(xiàng)目時(shí)默認(rèn)生成的Program.cs文件中進(jìn)行更改。

        一個(gè)桌面應(yīng)用程序中往往會(huì)有多個(gè)窗體。我們可以右鍵點(diǎn)擊項(xiàng)目名稱,在“添加”選項(xiàng)中,選擇“新建項(xiàng)”來(lái)添加窗體。注意不要選錯(cuò),否則會(huì)進(jìn)行其它操作。本次程序就只要一個(gè)窗體,無(wú)需添加多個(gè)窗體。

        3.5 添加控件

        有了窗體,我們就可以在窗體上放置各種各樣的控件。左邊的工具箱中有各式各樣的控件,按鈕、文本框、復(fù)選框等。用鼠標(biāo)按住工具箱中的某個(gè)控件,把它拖放到窗體上,便可以往窗體內(nèi)添加控件。也可以直接雙擊工具箱內(nèi)的某個(gè)控件,將控件添加到窗體上。

        可以用鼠標(biāo)對(duì)窗體上的控件進(jìn)行拖動(dòng)操作,來(lái)改變控件在窗體上的位置。當(dāng)鼠標(biāo)移動(dòng)到窗體中的控件上時(shí),鼠標(biāo)的指針會(huì)變成十字形狀,左鍵點(diǎn)住,就可以進(jìn)行拖動(dòng)。

        右鍵點(diǎn)擊窗體中的控件,在上下文菜單中選擇“屬性”,右側(cè)就會(huì)出現(xiàn)這個(gè)控件的屬性設(shè)置欄。在屬性設(shè)置欄中,可以設(shè)置控件的各種屬性。有顯示文本、顏色等。

        本次程序的窗體設(shè)計(jì)的最終結(jié)果如下圖:

        雙擊某個(gè)控件,就會(huì)跳到對(duì)應(yīng)的代碼編輯頁(yè)面,進(jìn)行相對(duì)應(yīng)的操作響應(yīng)事件代碼的編寫。比如,雙擊按鈕,就會(huì)跳到代碼編寫頁(yè)面,進(jìn)行按鈕點(diǎn)擊響應(yīng)事件代碼的編寫。這里可以編寫各種各樣的事件。

        3.6 核心算法

        借助C#開(kāi)發(fā)語(yǔ)言程序?qū)D層屬性數(shù)據(jù)表的格式和標(biāo)準(zhǔn)屬性數(shù)據(jù)結(jié)構(gòu)表通過(guò)Add-in插件加入至ArcGIS數(shù)據(jù)環(huán)境中,通過(guò)插件窗體的控件Click事件程序來(lái)實(shí)現(xiàn)圖層屬性數(shù)據(jù)的格式檢查。其中“檢查”控件的Click事件代碼[5]如下:

        {

        Var fileName=txtBox_CSV.Text;

        If (File.Exists(fileName))

        {

        Var fldStruct = HelperClass.CSV_2_DataTable(fileName);

        try

        {

        Var lyr = (cb_Layers.SelectedItemaslyrInfo).featureLyr;

        對(duì)照組中,男性患者27例,女性患者23例,年齡區(qū)間為41.15~78.52歲,平均年齡為(59.63±1.17)歲。心功能診斷結(jié)果:Ⅰ級(jí)患者21例,Ⅱ級(jí)患者15例,Ⅲ級(jí)患者10例,Ⅳ級(jí)患者4例。觀察組中,男性患者31例,女性患者19例,年齡區(qū)間為42.22~79.63歲,平均年齡為(60.25±1.31)歲。心功能診斷結(jié)果:Ⅰ級(jí)患者22例,Ⅱ級(jí)患者14例,Ⅲ級(jí)患者9例,Ⅳ級(jí)患者5例。兩組受試者基線資料比較,差異無(wú)統(tǒng)計(jì)學(xué)意義(P>0.05),具有可比性。

        If (lyr == null)

        {

        return;

        }

        String Message = "";

        For (int i=0 ; I < fldStruct.Rows.Count ; i++)

        {

        #region讀取CSV文件中的數(shù)據(jù)結(jié)構(gòu)信息

        Var fldName = fldStruct.Rows[i][0].ToString().Trim();

        Var fldName2 = fldStruct.Rows[i][1].ToString().Trim();

        Var fldType = fldStruct.Rows[i][2].ToString().Trim().ToUpper();

        Var fldLength = fldStruct.Rows[i][3].ToString().Trim();

        Var fldAlias = fldStruct.Rows[i][4].ToString().Trim();

        Var fldMustCheck = fldStruct.Rows[i][5].ToString().Trim();

        #endregion

        //根據(jù)字段名查找其在矢量圖中的索引

        Var featureFldIndex = lyr.FeatureClass.FindField(fldName);

        //是否有可選字段名

        If (fldName2!="")

        {

        Var featureFldIndex2 = lyr.FeatureClass.FindField(fldName2);

        featureFldIndex = Math.Max(featureFldIndex, featureFldIndex2);

        }

        //字段名存在

        if(featureFldIndex!=-1)

        {

        //字段類型是否匹配

        Bool typeMatch=true;

        //矢量圖中的數(shù)據(jù)類型

        String RecordDataType = "";

        //讀取矢量圖的字段信息

        Var featureFld = lyr.FeatureClass.Fields.Field[featureFldIndex];

        //判斷字段類型是否匹配

        Switch (featureFld.Type)

        {

        Case esriFieldType.esriFieldTypeSmallInteger:

        Case esriFieldType.esriFieldTypeInteger:

        If (fldType !="INT")

        {

        typeMatch = false;

        RecordDataType = "INT";

        }

        break;

        case esriFieldType.esriFieldTypeSingle:

        if (fldType != "FLOAT")

        {

        typeMatch = false;

        RecordDataType = "FLOAT";

        }

        break;

        case esriFieldType.esriFieldTypeDouble:

        if (fldType != "DOUBLE")

        {

        typeMatch = false;

        RecordDataType = "DOUBLE";

        }

        break;

        case esriFieldType.esriFieldTypeString:

        var len = featureFld.Length;

        if (fldType != "TEXT")

        {

        typeMatch = false;

        RecordDataType = "TEXT";

        }

        else

        {

        //判斷數(shù)據(jù)長(zhǎng)度是否匹配

        Var sdLen = Int32.Parse(fldLength);

        if (len != sdLen)

        {

        Message = Message + fldName + ",” + fldType +", " fldLength + "," + fldAlias + "," + fldMustCheck + ","+ len.ToString() + " , 字段長(zhǎng)度不對(duì) ";

        }

        }

        break;

        default:

        typeMatch = false;

        break;

        }

        If (typeMatch == false)

        {

        Message = Message + fldName + "," + fldType + "," + fldLength + "," + fldAlias + "," + fldMustCheck + "," + RecordDataType + ",數(shù)據(jù)類型不匹配 ";

        }

        }

        //未找到相應(yīng)字段名

        else

        {

        Message = Message + fldName + "," + fldType + "," + fldLength + "," + fldAlias + "," + fldMustCheck + ",, 未找到 ";

        }

        }

        If (Message!="")

        {

        //錯(cuò)誤信息文件名

        Var fn = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() + System.DateTime.Now.Hour.ToString() + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString();

        //錯(cuò)誤信息輸出目錄

        Var path = System.IO.Path.GetDirectoryName(fileName);

        //錯(cuò)誤信息文件全名

        varoutName=path+"\數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤_"+fn+".csv";

        //將錯(cuò)誤信息寫入文件

        StreamWritersw = newStreamWriter(outName,false,Encoding.Default);

        sw.WriteLine("字段名,數(shù)據(jù)類型,字段長(zhǎng)度,中文名,備注,使用的數(shù)據(jù)類型或長(zhǎng)度,錯(cuò)誤類型");

        sw.Write(Message);

        sw.Flush();

        sw.Close();

        //用記事本打開(kāi)保存的IP信息

        System.Diagnostics.Process.Start("EXCEL.exe", outName);

        3.7 調(diào)試運(yùn)行

        基本的控件和代碼完成之后,就需要進(jìn)行調(diào)試運(yùn)行。點(diǎn)擊上方的調(diào)試按鈕,就可以就行窗體應(yīng)用程序的生成、運(yùn)行和調(diào)試。如果沒(méi)有報(bào)錯(cuò),就說(shuō)明編譯成功了,能夠運(yùn)行。

        因?yàn)锳dd-in程序是ArcGIS的插件程序,本身沒(méi)有單獨(dú)的主程序,調(diào)試時(shí),選擇附加到進(jìn)程(選擇ArcMap,第一次要打開(kāi)一個(gè)ArcMap[6]。當(dāng)然,如果程序沒(méi)有問(wèn)題,可直接生成*.esriAddIn文件在ArcMap中加載使用。

        3.8 加載使用

        點(diǎn)擊生成好的Add-in插件,安裝到ArcGIS中去,再打開(kāi)ArcMap,打開(kāi)擴(kuò)展管理,選擇Commands選項(xiàng)卡,找到Add-in Controls,這時(shí)候會(huì)發(fā)現(xiàn)編寫的工具會(huì)出現(xiàn)在這一組中。

        在ArcMap窗口菜單欄的右下角出現(xiàn)相應(yīng)的插件圖標(biāo),如下圖:

        4 應(yīng)用案例

        浙江省二類調(diào)查成果標(biāo)準(zhǔn)小班數(shù)據(jù)表有95個(gè)字段,相應(yīng)的字段名稱、數(shù)據(jù)類型、最小長(zhǎng)度和中文名等都有具體要求[7],利用本插件程序?qū)@些格式進(jìn)行檢查,操作簡(jiǎn)單、快捷、準(zhǔn)確、方便,且不會(huì)出現(xiàn)漏查和誤查的情況?,F(xiàn)對(duì)溫州市蒼南縣的調(diào)查成果數(shù)據(jù)進(jìn)行檢查,耗時(shí)不到十秒鐘,遠(yuǎn)遠(yuǎn)快于人工檢查,且準(zhǔn)確性高。檢查結(jié)果如下表:

        字段名數(shù)據(jù)類型最少長(zhǎng)度中文名規(guī)程是否要求使用數(shù)據(jù)類型或長(zhǎng)度錯(cuò)誤類型 PINGJUN_XJFLOAT 平均胸徑(cm)YINT數(shù)據(jù)類型不匹配 PINGJUN_GFLOAT 平均高(m)YDOUBLE數(shù)據(jù)類型不匹配 YU_BI_DUFLOAT 郁閉度/覆蓋度YDOUBLE數(shù)據(jù)類型不匹配 SMDFLOAT 疏密度YDOUBLE數(shù)據(jù)類型不匹配 HUO_LMXJFLOAT 每畝蓄積(m?)YDOUBLE數(shù)據(jù)類型不匹配 REMARKSTEXT200附記Y50字段長(zhǎng)度不對(duì) ZHAO_NDTEXT6造林年度Y10字段長(zhǎng)度不對(duì) HUOZAI_DJTEXT1森林火災(zāi)等級(jí)Y2字段長(zhǎng)度不對(duì) TRGX_QKTEXT1天然更新生長(zhǎng)情況Y30字段長(zhǎng)度不對(duì) SZ_ZCⅡTEXT23樹(shù)種組成Ⅱ 30字段長(zhǎng)度不對(duì) DXSWTEXT3地下水位 未找到 HFFLTEXT3海風(fēng)風(fēng)力 未找到 TRHYLTEXT3土壤含鹽量 未找到

        5 小結(jié)

        基于 VS2015的ArcGIS Add-in生成的格式檢查插件安裝簡(jiǎn)單快捷,檢查速度快,檢查正確性高,在二類調(diào)查成果格式檢查工作中,節(jié)約了生產(chǎn)成本,提高了生產(chǎn)效率,獲得了比較好的效果?;谶@次成功的開(kāi)發(fā)經(jīng)驗(yàn),接下來(lái)可以進(jìn)一步開(kāi)發(fā)相關(guān)檢查的功能插件,比如:拓?fù)溴e(cuò)誤檢查插件和屬性邏輯檢查插件等,從而更好地實(shí)現(xiàn)成果檢查驗(yàn)收工作的批量化和自動(dòng)化,這樣能有效提高二類調(diào)查成果檢驗(yàn)的準(zhǔn)確性和工作效率,對(duì)提高二類調(diào)查成果質(zhì)量有重要的意義。

        [1] 朱旭紅,許國(guó)安,陳咬根.基于 ArcObjects 組件的地理數(shù)據(jù)檢查軟件的實(shí)現(xiàn)的數(shù)字校園導(dǎo)航系統(tǒng)的研究與實(shí)現(xiàn)[J].測(cè)繪工程,2010,19(2):49-52.

        [2] 蘇旭明.組件式地理信息系統(tǒng)的特點(diǎn)及開(kāi)發(fā)方法[J].北京測(cè)繪,2002,(4):40-41.

        [3] 趙文峰,劉南,劉仁義.基于ArcObjects的系統(tǒng)開(kāi)發(fā)技術(shù)剖析[J].計(jì)算機(jī)應(yīng)用研究,2014,(3): 130-132.

        [4] 劉亞珺,李兵,李增揚(yáng),等.軟件集成開(kāi)發(fā)環(huán)境的技術(shù)債務(wù)管理研究[J].計(jì)算機(jī)科學(xué),2017,44(11): 16-18.

        [5] 崔群法,唐有朋,王俊偉.Visual C#2008從入門到精通[M].北京:電子工業(yè)出版社,2009.

        [6] ESRI Corp, Arcobjects DeveIoper’s Help[R].2015.

        [7] 浙江省林業(yè)廳.浙江省森林資源規(guī)劃設(shè)計(jì)調(diào)查技術(shù)操作細(xì)則[S].2014.

        2018-07-28

        TP319

        B

        1004-7743(2018)04-0075-6

        猜你喜歡
        程序
        給Windows添加程序快速切換欄
        試論我國(guó)未決羈押程序的立法完善
        失能的信仰——走向衰亡的民事訴訟程序
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        基于VMM的程序行為異常檢測(cè)
        偵查實(shí)驗(yàn)批準(zhǔn)程序初探
        我國(guó)刑事速裁程序的構(gòu)建
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        恐怖犯罪刑事訴訟程序的完善
        美国黄色片一区二区三区| 亚洲人成欧美中文字幕| 国产绳艺sm调教室论坛| 福利在线国产| 亚洲伊人免费综合网站| 男性av天堂一区二区| 玩弄放荡人妇系列av在线网站| 亚洲国产成人va在线观看天堂| 亚洲一区二区高清精品| 国产女主播福利一区二区| 国产精品亚洲а∨无码播放| 怡红院免费的全部视频| 欧美日本道免费二区三区| 精品久久免费国产乱色也| 成人欧美一区二区三区黑人| 亚洲欧美激情精品一区二区| 九九99国产精品视频| 国产精品一品二区三区| 女人高潮久久久叫人喷水| 藏春阁福利视频| 天堂av无码大芭蕉伊人av孕妇黑人 | 大肉大捧一进一出好爽视色大师| 9久久精品视香蕉蕉| 麻豆国产精品伦理视频| 婷婷成人丁香五月综合激情| 处破痛哭a√18成年片免费| 国产福利小视频91| 亚洲中文字幕乱码第一页| 国产无遮挡又黄又爽免费网站| 亚洲色成人网站www观看入口| 国产日韩精品视频一区二区三区| 国内自拍情侣露脸高清在线| 国产真实伦在线观看| 99re国产电影精品| 国产乱淫h侵犯在线观看| 国产在线精品一区二区中文| 青青草原综合久久大伊人精品| 亚洲av无码国产精品色午夜洪| 久久国产精品视频影院| 亚洲长腿丝袜中文字幕| 男人边做边吃奶头视频|