精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C#開發GIS應用簡明教程

開發 后端
這篇是C#開發GIS應用簡明教程,從工具開始將其,包括設計窗體、創建永久圖層等等。希望本文能對大家有所幫助。
C#開發GIS,這里將介紹MapX為開發人員提供一系列的工具,包括C#對MAPX圖元的編程技術。這些工具的使用,可以通過MapX的幫助文檔中查到。

1.工具(ToolConstants)

MapX為開發人員提供一系列的工具,這些工具的作用各有不同,我們通過開發一個應用程序來了解這些工具的作用,至于這些工具的具體說明,可以在MapX的幫助文檔中,通過查找"Available Standard Tools" 看到相應的解釋.一些MapX的相關資料也有介紹.

在.NET編程環境中新建一個C#的WindeosApplication(Windows應用程序)項目,然后在菜單中選擇”項目/添加引用”,打開如下圖的窗口,在窗口中選擇COM標簽,在組件名稱列表中雙擊MapInfo MapX V5.單擊"確認"按鈕,將Map5控件加入到.Net的工具箱中.

接著,將MapInfo MapX V5 控件畫到窗體上,再在窗體上畫一個ComboBox控件comboBox1.如下圖:

雙擊設計窗體,編寫Form1_Load代碼如下:

  1. private void Form1_Load(object sender, System.EventArgs e)
  2. {
  3. ArrayList ToolsList=new ArrayList();
  4. ToolsList.Add(MapXLib.ToolConstants.miArrowTool);
  5. ToolsList.Add(MapXLib.ToolConstants.miCenterTool);
  6. ToolsList.Add(MapXLib.ToolConstants.miLabelTool);
  7. ToolsList.Add(MapXLib.ToolConstants.miPanTool);
  8. ToolsList.Add(MapXLib.ToolConstants.miPolygonSelectTool);
  9. ToolsList.Add(MapXLib.ToolConstants.miRadiusSelectTool);
  10. ToolsList.Add(MapXLib.ToolConstants.miSymbolTool);
  11. ToolsList.Add(MapXLib.ToolConstants.miTextTool);
  12. ToolsList.Add(MapXLib.ToolConstants.miZoomInTool);
  13. ToolsList.Add(MapXLib.ToolConstants.miZoomOutTool);
  14. comboBox1.DataSource=ToolsList;
  15. }

以上代碼通過一個數組ToolsList,將MapXLib的工具加入到comboBox1中.MapX還有一些其它的工具,它們的作用是往地圖上加上點,線,多邊型和圓.因為這些工具要求有操作圖層,一并在介紹圖層的時候介紹.關于ArrayList的用法,請參考C#的有關資料.

接著,雙擊comboBox1,并編寫代碼如下

  1. private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
  2. {
  3. axMap1.CurrentTool=(MapXLib.ToolConstants)comboBox1.SelectedItem;
  4. }

應注意,在C#中必須要顯式地把comboBox1的選擇項目SelectedItem(數據類型為object)轉換為MapXLib.ToolConstants.因為ToolConstants是MapX自己定義的一個枚舉數據類型,C#不能自動完成這種枚舉成員變量到object的數據轉換.

編譯執行程序,從comboBox1中選擇不同的工具,在地圖上進行操作,你可以了解到MapX工具集的強大功能.

實際上,MapX提供的工具集就好像Photoshop,AutoCAD的工具欄一樣,為你提供了一些控制地圖的工具.但是,在開發GIS的時候,這些工具是不能完全滿足要求的.所以,還應該學會自定義工具.

下面,通過一個在地圖上測距的例子,來介紹一下如何在C#下自定義MapX工具

如前所述建立一個C#的Windows應用程序并將Mapinfo MapX V5 控件加到窗體上.并加入一個Button控件button1.將button1的Text屬性改為"測距",再在窗口中放上兩個Label控件label1,label2,將它們的Text屬性設置為""空字符串,如下圖:

雙擊設計窗體,編寫Form1_Load代碼如下:

  1. private void Form1_Load(object sender, System.EventArgs e)
  2. {
  3. axMap1.CreateCustomTool(100,MapXLib.ToolTypeConstants.miToolTypePoly,
  4. MapXLib.CursorConstants.miCrossCursor,null,null,null);
  5. }

在加載窗口的時候,我們定義了一個工具.它的編號是100(不要和MapX本身的工具編號重復),它的類型是一個多義線,采用十字光標.

關于此函數的用法,建議查看MapX的開發手冊和相關資料.

現在我們定義了一個編號為100的工具,可以在程序中使用它了.雙擊設計窗體中的button1,編寫它的Click事件處理代碼如下:

  1. private void button1_Click(object sender, System.EventArgs e)
  2. {
  3. axMap1.CurrentTool=(MapXLib.ToolConstants)100;
  4. }

現在編譯運行,單擊button1,就可以在地圖上使用這個工具了.但是還有一部分重要的代碼沒有完成:測距!

完成測距功能的代碼在C#使用MapX開發GIS中非常具有代表性,也比較有難度.我在首次使用C#+MapX開發GIS的時候,被這個問題困擾了很久.項目經理也來研究,過兩天說有結果了,但他給出的例子根本就行不通.當然,會了就不難了.其實,也很簡單.

首先,在窗口類中聲明兩個私有全局變量以保存測出的距離和總距,注意聲明代碼的位置:

  1. public class Form1 : System.Windows.Forms.Form
  2. {
  3. private AxMapXLib.AxMap axMap1;
  4. private System.Windows.Forms.Button button1;
  5. private System.Windows.Forms.Label label1;
  6. private System.Windows.Forms.Label label2;
  7. ///
  8. /// 必需的設計器變量。
  9. ///
  10. private System.ComponentModel.Container components = null;
  11. private double Dis=0,DisSum=0;
  12. ...
  13. ...

現在來編寫工具的事件.注意,在MapX畫多義線的時候,它觸發消息的方式和一般的工具是不同的,首先,它并不是用鼠標一點擊就完成了的,還可以繼續畫下去,所以,不應該在MapX控件的ToolUsed事件中編寫,而應該在PolyToolUsed事件中實現測距.代碼如下:

  1. private void axMap1_PolyToolUsed(object sender, AxMapXLib.CMapXEvents_PolyToolUsedEvent e)
  2. {
  3. MapXLib.PointsClass pts=new MapXLib.PointsClass();
  4. switch(e.flags)
  5. {
  6. case (int)MapXLib.ToolFlagConstants.miToolInProgress:
  7. pts=(MapXLib.PointsClass)e.points;
  8. Dis=axMap1.Distance(pts._Item(pts.Count-1).X,
  9. pts._Item(pts.Count-1).Y,
  10. pts._Item(pts.Count).X,
  11. pts._Item(pts.Count).Y);
  12. DisSum+=Dis;
  13. break;
  14. default:
  15. Dis=0;
  16. DisSum=0;
  17. break;
  18. }
  19. label1.Text="距離:"+Dis.ToString("#.00");
  20. label2.Text="總距"+DisSum.ToString("#.00");
  21. }

這段代碼雖短.但要注意的地方很多.

首先,定義一個MapXLib.PointsClass類型的變量pts,注意,是PointsClass,不是PointClass.前者是點集,后者是點.為什么要增加那么一個變量呢?因為MapX的PolyToolUsed事件的返回參數e的成員points不是MapXLib.PointsClass類型,而是object.類型.所以需要這么一個變量來轉換它,當然,你也可以在程序使用pts的地方直接使用(MapXLib.PointsClass)e.points,但那樣一來程序就比較難懂了;

其次,要判斷事件的標識e.flags的值,它指出工具當前的狀態,是剛開始畫多義線呢,還是正在畫多義線,或者已經結束了,或者結束退出.我們只要在畫的時候測距就可以了.其它時候將距離和總距都設置為0;

接著,還要注意的是e.points的點數據保存方式,e.points首先是一個object,當在畫多義線的時候,它被初試化為一個MapXLib.PointsClass的變量,并以二維數組的方式保存點集.這個數組是從1開始的,而不是從0開始的.它保存了多義線上每個轉折點的坐標,鼠標每點一下,就增加一個新的數據到點集,我們計算最后一條直線長度,應該從這個數組的末尾往前取.計算好距離以后再加入到總距中.許多測距的程序例子都要做一個循環,其實是不必要的.

最后,請注意數字轉換到字符串的格式問題.在這個例子中我們保留兩位小數.

補充一點,因為沒有設置地圖的地理坐標系統,所以測出來的距離單位是英里,如果要改為公里,把MapX控件的MapUnit屬性改為miUnitKilometer就可以了.要提高測量精度,除了可以通過轉換格式的時候增加小數位,還應該注意到地圖的測繪精度.否則,再多的小數位也是沒有意義的.

練習

1.建立一個應用程序,加入MapX控件和一個ComboBox控件,兩個:Label控件,在ComboBox中加入第一個例子中的所有工具和測距工具,在ComboBox中選擇測距工具時實現測距功能.

2.將測距工具的光標改成箭頭光標.并以米為單位顯示測距數據.

2.圖層和圖元(Layers and Features)

有關圖層和圖元的概念,請參照相關資料.

圖層的應用分為幾個方面,我們分別加以介紹.

1)圖層的創建:

創建永久圖層:

在C#中,使用以下方法創建永久圖層:

  1. MapXLib.Layer lyr;
  2. lyr=axMap1.Layers.CreateLayer("MyLayer","D:\\MapTest\\MyLayer.Tab",0,32,axMap1.DisplayCoordSys);

當執行這兩句程序時,在指定的路徑生成了一系列文件.它們是:

MyLayer.Dat:圖層的數據文件,它保存的是圖層的數據庫數據;

MyLayer.ID:圖層數據的唯一的,自動生成的編碼,用以區分不同的圖元;

MyLayer.IND:圖層數據的索引文件,以實現圖層上圖元的快速查找;

MyLaer.MAP:圖層上圖元的圖形數據;

MyLaer.TAB:這是一個文本文件,它的作用是將圖層的有關信息保存起來,供GST地圖文件或其它程序調用圖層.

用記事本打開MyLayer.TAB文件,看到如下內容:

  1. !table
  2. !version 450
  3. !charset WindowsSimpChinese
  4. Definition Table
  5. Description "MyLayer"
  6. Type Native charset "WindowsSimpChinese"
  7. Fields 1
  8. GEONAME char (32) Index 1 ;

第一行總是"!table",說明這是一個圖層表的文件;

第二行指出圖層文件的版本號,MapInfo MapX 5.0生成的圖層版本號是450;

第三行指出生成圖層的操作系統;

接著是對圖層的定義段:

首先指出圖層的描述,就是我們上面程序代碼中的"Mylayer".

接著說明了字符集類型是簡體中文;

然后指出表格中只有一個字段,這個字段的名稱是"GEONAME",是長度為32的字符類型字段,在表中的列索引為1.

2)添加現有的圖層:

添加現有圖層的方法和一般的程序語言沒有很大的區別,我們在當前圖層上添加剛才創建的永久圖層,程序代碼如下:

  1. MapXLib.LayerInfo li;
  2. li=new MapXLib.LayerInfoClass();
  3. li.Type=MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTab;
  4. li.AddParameter("FileSpec","D:\\MapTest\\MyLayer.tab");
  5. li.AddParameter("Visible",false);
  6. li.AddParameter("AutoCreateDataset",true);
  7. li.AddParameter("DatasetName","MyLayer");
  8. axMap1.Layers.Add(li,0);
  9. axMap1.Layers.LayersDlg("","");
  10. axMap1.SaveMapAsGeoset("測試","D:\\MapTest\\MyMap.GST");

在程序的最后,我們顯示了圖層信息對話框,以觀察圖層是否已經添加到當前的地圖中.可以看到,地圖中添加了我們創建的圖層"MyLayer".放在第0層.

然后,將地圖保存在一個MyMap.GST的地圖文件中,這個地圖的標題是"測試".

3)移除圖層:

好,接著我們上面做的工作,將工程的axMap1的GeoSet屬性設置為剛剛生成的地圖文件: "D:\MapTest\MyMap.GST".現在我們將MyLayer從地圖中移除.

添加一個按鈕,在按鈕的Click事件中編寫如下代碼:

  1. axMap1.Layers.LayersDlg("","");
  2. axMap1.Layers.Remove(1);
  3. axMap1.Layers.LayersDlg("","");

我們使用兩次顯示圖層對話框的方式查看程序的效果,應該注意的是在Remove第0層的時候使用的是Remove(1),如果不清楚圖層的位置,就要作一個循環,將圖層的位置取出來再移除,如下:

  1. int lyrind=0;
  2. axMap1.Layers.LayersDlg("","");
  3. for( int i=1;i
  4. {
  5. if (axMap1.Layers[i]._Name.Trim()=="MyLayer")
  6. {
  7. lyrind=i;
  8. break;
  9. }
  10. }
  11. axMap1.Layers.Remove(lyrind);
  12. axMap1.Layers.LayersDlg("","");

移除操作只在內存中進行,也就是說,程序并不刪除任何文件,也沒有將圖層真正地從地圖集合中去掉,當程序重新啟動的時候,MyLayer圖層仍然在地圖中.

3)移除所有圖層:

使用axMap1.Layers.RemoveAll();就可以移除所有圖層,用法和Remove相似.

4)圖層定位:

和其它編程語言一樣,使用axMap1.Move(1,2)函數就可以將圖層的位置改變.

5)創建臨時圖層

臨時圖層和永久圖層不同,它只存放在內存中,當關閉程序以后該圖層將不存在.

在這里我們將使用LayerInfo對象來創建臨時圖層,這和傳統的MAPX程序相近,但是引入了C#編程的一些特色:

  1. MapXLib.LayerInfoClass li=new MapXLib.LayerInfoClass();
  2. MapXLib.Features ftrs=null;
  3. MapXLib.FieldsClass flds=new MapXLib.FieldsClass();
  4. MapXLib.Fields Myflds=null;
  5. MapXLib.Dataset dts=null;
  6. flds.Add("State","State_Name",
  7. MapXLib.AggregationFunctionConstants.miAggregationSum,
  8. MapXLib.FieldTypeConstants.miTypeString);
  9. dts=axMap1.DataSets.Add(MapXLib.DatasetTypeConstants.miDataSetLayer,
  10. axMap1.Layers._Item(1),"MyLayer",0,0,0,flds,false);
  11. Myflds=dts.Fields;
  12. ftrs=axMap1.Layers._Item("USA").Selection.Clone();
  13. li.Type=MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTemp;
  14. li.AddParameter("Name","USA Temp Layer");
  15. li.AddParameter("Fields",Myflds);
  16. li.AddParameter("Features",ftrs);
  17. axMap1.Layers.Add(li,1);
  18. axMap1.Layers.LayersDlg("","");

這段程序有兩個關鍵的地方:

一個是在C#中DataSets.Add的用法,在許多編程語言中,都可以使用空的參數或者干脆不用參數來調用這個函數,但是在C#中是不行的,必須8個參數全部指定.而且,還應該事先初始化Fields參數.這個函數的使用涉及到許多方面的知識,包括對MAPX相關概念的理解和C#編程的認識,是一個很重要,也比較難掌握的技術.后面的章節中我們還會作進一步的探討.

另一個是li.AddParameter和li.Type的配合使用問題,這在許多的MAPX書籍中都有論述,此處不再重復.

以上程序最好能自己多琢磨琢磨.才能更好地掌握C#開發GIS的要領.

6)縮放圖層:

所謂的縮放圖層,并不是指將單個圖層縮放.而是指定圖層的可見范圍比例,例如,設置一個圖層在縮小顯示大于5英里的時候隱藏.小于5英里的時候顯示.和其它編程語言一樣,只要設置Layer的ZoomMin和ZoomMax就可以了.

7)顯示整個圖層:

這里要提及的一個技巧是在C#下面怎樣顯示整個圖層.眾所周知,在VB下面只要:

Map1.Bounds = Map1.Layers("USA").Bounds

一句程序就可以輕松實現.但是要是在C#中這樣寫的話,百分百會出錯.其實,這里有一個小小的技巧,聰明的你一定能看出來:

axMap1.CtlBounds=axMap1.Layers._Item("USA").Bounds;

8)在圖層上繪制永久圖形:

我們在介紹工具的時候,有一些工具沒有介紹,這些工具其實是用來在圖層上創建永久圖形對象的(圖元).當在圖層上繪制了圖形以后,這些圖形將以數據記錄的形式保存在圖層表中,也就是創建了一個圖元.如果不想保存圖元,可以在臨時圖層里繪制.

  1. axMap1.Layers._Item("USA Temp Layer").Editable=true;
  2. axMap1.Layers.InsertionLayer=axMap1.Layers._Item("USA Temp Layer");
  3. axMap1.CurrentTool=MapXLib.ToolConstants.miAddLineTool;

上面的程序使用了畫線的工具,在地圖上拖動鼠標就可以在臨時圖層上畫線了.這些工具使用的前提是必須指定axMap1的插入圖層(InsertionLayer).才能在圖層表中插入數據.

關于圖層的關鍵技術就介紹到這里,掌握了這些技術以后,在作進一步的研究時,例如動畫圖層和繪制圖層的開發,遇到的困難應該不大.

下面我們介紹C#對MAPX圖元的編程技術.

9)在圖層上創建圖元:

根據MAP Info提供的MapX 5.0開發手冊,創建圖元有兩種方法,用兩段代碼說明這兩種代碼在C#的實現方法:

第一種實現方法:直接使用Feature類創建圖元

  1. MapXLib.Style sty=new MapXLib.StyleClass();
  2. MapXLib.Feature ftr=new MapXLib.FeatureClass();
  3. ftr.Attach(axMap1.GetOcx());
  4. ftr.Type=MapXLib.FeatureTypeConstants.miFeatureTypeText;
  5. sty.TextFontColor=255;
  6. sty.TextFont.Size=12;
  7. ftr.Style=sty;
  8. ftr.Caption="New Feature";
  9. ftr.Point.Set(axMap1.CenterX,axMap1.CenterY);
  10. axMap1.Layers._Item("US Top 20 Cities").Style=sty;
  11. ftr=axMap1.Layers._Item("US Top 20 Cities").AddFeature(ftr,new MapXLib.RowValuesClass());
  12. ftr.Update(ftr,new MapXLib.RowValuesClass());

有幾個要注意的地方:

ftr.Attach(axMap1.GetOcx());

如果在VB6下,這句程序應該是這樣的:

ftr.Attach Map1

從這里可以看到在C#中因為嚴格的類型管理所帶來的一些變化.如果不進行GetOcx()的轉換,即使在VB.Net下也是錯誤的.

ftr=axMap1.Layers._Item("US Top 20 Cities").AddFeature(ftr,new MapXLib.RowValuesClass());

我們在這個程序中加入了一行空的數據,這也就代表著我們加入的圖元不包含任何數據信息.這是為了在介紹圖元的時候方便大家掌握,并不意味著這樣增加圖元就不能將數據保存進去,實際上,通過設置一個新的RowValues變量,是可以將數據信息保存到圖元中的.我們將在后面的章節中介紹如何將數據保存在圖元中.

ftr.Update(ftr,new MapXLib.RowValuesClass());

這句程序的作用是將創建的圖元保存到圖層表中,這種保存是永久保存的.除非是在臨時圖層上增加的圖元,否則下次打開地圖文件的時候,將看到創建的圖元仍然保留在地圖上.因此,在對圖元操作之前請備份好地圖文件,避免不必要的損失.

另外,關于圖元的類型(Type)和風格(Style),應該和其所在的圖層相對應,比如上面程序中關于Type和Style的設置,都是和"US Top 20 Cities" 圖層的類型對應的.有關類型和風格的設置,請查閱相關手冊.

第二種實現方法:使用FeatureFactory創建圖元

  1. MapXLib.Feature ftr=new MapXLib.FeatureClass();
  2. MapXLib.Point p=new MapXLib.PointClass();
  3. p.Set(axMap1.CenterX,axMap1.CenterY);
  4. ftr=axMap1.Layers._Item("US Top 20 Cities")
  5. .AddFeature(axMap1.FeatureFactory.CreateText
  6. (p,"New Feature",MapXLib.PositionConstants.miPositionCC,
  7. new MapXLib.StyleClass()),
  8. new MapXLib.RowValuesClass());

這段代碼和上面和第一種實現方法類似,我們在這里不再設置圖元的Type和Style.

FeatureFactory類似于設計模式中的Factory模式,從它可以產生各種類型的圖元,這個過程相當于設置了圖元的Type.

10)查找圖元:

查找圖元是很簡單的,可以用下邊的代碼實現:

  1. MapXLib.FindFeature fRes=null;
  2. fRes=axMap1.Layers._Item("US Top 20 Cities").Find.Search("New York","");
  3. axMap1.CenterX=fRes.CenterX;
  4. axMap1.CenterY=fRes.CenterY;

上面這段代碼將找到的圖元放置在地圖中央.這里要注意的是不能使用

  1. MapXLib.FindFeature fRes=new MapXLib.FindFeatureClass(); 

來創建FindFeature對象,否則將會出錯:

"帶有 CLSID {436052C3-43E3-11D0-83EB-00AA00BD34FC}的COM對象無效或未注冊。"這是MapX 5.0的一個Bug.要避開它,只要在創建對象的時候賦null值就可以了.

下面我們對程序作一些改進,來避免找不到圖元的時候出錯,并在找到圖元以后選擇該圖元:

  1. MapXLib.FindFeature fRes=null;  
  2. fRes=axMap1.Layers._Item("US Top 20 Cities").Find.Search("New York","");  
  3. if (fRes.FindRC % 10 ==1)  
  4. {  
  5. axMap1.CenterX=fRes.CenterX;  
  6. axMap1.CenterY=fRes.CenterY;  
  7. axMap1.Layers._Item("US Top 20 Cities").Selection.Add(fRes);  

11)圖元的修改:

圖元的增加,修改和刪除都是非事務性的,也就是說,所作的修改都永久性地對圖層表數據產生影響.這可以使用戶對多個圖元進行操作后一次更新地圖,但是在更新之前并不能看到更新后的效果.我們在使用第一種方法創建圖元的時候,在最后更新:

  1. ftr.Update(ftr,new MapXLib.RowValuesClass()); 

但是在FeatureFacory創建圖元的時候是不用Update的,因為FeatureFactory的相關方法中已經包含了Update.根據MapX 5.0的開發手冊介紹,修改了某個圖元并更新時應使用Feature.Update方法,當使用其它圖元取代某個圖元,應使用Layers.UpdateFeature方法.

12)圖元的刪除:

和其它編程語言一樣,刪除圖元使用DeleteFeature方法,有關介紹請參看MapX的聯機幫助和開發手冊.

【編輯推薦】

  1. C#判斷字符串應用詳細解析
  2. C#格式化字符串學習總結
  3. C#動態創建數組實現實例解析
  4. C#動態創建數組詳細實現過程解析
  5. C#聲明數組的詳細解析
責任編輯:彭凡 來源: CSDN
相關推薦

2009-08-06 17:45:08

C# Webservi

2013-12-03 13:05:30

Lua腳本語言

2014-06-20 10:51:35

Linux LVM邏輯卷

2011-08-17 09:55:45

Objective-CCategory

2011-08-17 10:00:12

Objective-CProperty

2011-06-03 08:49:54

Java

2023-10-20 14:08:35

digDNS

2009-07-03 13:45:48

JSP簡明教程組件為中心

2023-11-02 14:30:25

機器學習

2023-11-02 14:26:30

PyTorch機器學習

2010-05-26 10:42:20

SVN1.5配置

2021-01-05 09:55:46

TmateLinux命令

2010-12-15 12:48:26

VirtualBox

2021-05-08 09:02:48

KubeBuilderOperatork8s

2010-05-25 16:11:25

Git-SVN

2021-05-11 09:31:31

kustomizeoperator kubernetes

2010-01-26 08:25:06

F#語法F#教程

2025-06-05 01:40:00

2021-03-03 12:55:30

Python列表推導式代碼

2014-03-21 12:48:08

Java8Java8教程
點贊
收藏

51CTO技術棧公眾號

国产精品二三区| 影音先锋成人资源网站| 国产精品美女在线播放| www.毛片com| 含羞草久久爱69一区| 亚洲ai欧洲av| 91精品国产高清一区二区三蜜臀| 欧美激情护士| 国产一区二区三区日韩| 亚洲视频在线看| 久久成人福利视频| 一级特黄aaaaaa大片| 牛牛影视久久网| 亚洲精品久久嫩草网站秘色| 日本国产一区二区三区| 久久黄色一级视频| 国产精品99999| 成人激情久久| 久久免费视频色| 欧美成人午夜剧场免费观看| 五月婷婷之综合激情| 欧美男男激情freegay| 国模吧视频一区| 91精品国产综合久久久久久久久久 | 国产精品久久久久毛片软件| 午夜精品一区二区三区av| 亚洲五月激情网| 在线激情免费视频| 日韩专区欧美专区| 亚洲视频在线观看视频| 少妇献身老头系列| 日本在线观看大片免费视频| 精品一区二区三区在线播放视频 | 男人天堂综合| 国产激情视频一区二区三区欧美| 欲色天天网综合久久| 国产福利视频在线播放| 日韩中文字幕观看| 99热精品在线| 亚洲男人天堂网| 国产精品欧美激情在线观看| 在线看一级片| 成人永久看片免费视频天堂| 久久全国免费视频| 欧美激情 亚洲| 波多野结依一区| 成人精品电影在线观看| 51ⅴ精品国产91久久久久久| 久久久久久国产精品无码| 五月天国产在线| 99久久99精品久久久久久| 欧美亚州一区二区三区| 欧美日韩一级在线观看| 999久久久精品国产| 在线不卡中文字幕播放| 欧洲精品视频在线| 免费在线看黄| www.亚洲色图.com| 欧美一区二三区| 国产一级视频在线播放| 亚洲动漫精品| 91精品综合久久久久久| 国产精品一区二区小说| 色婷婷在线播放| 亚洲人成在线播放网站岛国| 国产精品久久亚洲7777| 99超碰在线观看| 亚洲蜜桃视频| 日韩av在线免播放器| 情侣黄网站免费看| 亚洲精品中文字幕| 色哦色哦哦色天天综合| 综合国产精品久久久| 人妻91麻豆一区二区三区| 国产成人午夜片在线观看高清观看| 成人黄色av网站| 国产一国产二国产三| 欧美日韩岛国| 一本色道久久88亚洲综合88| 精品无码国产污污污免费网站| 国产95亚洲| 欧美一级欧美一级在线播放| 波多野结衣家庭教师视频| 绿色成人影院| 在线亚洲一区二区| 国产精品久久国产| 番号在线播放| 亚洲欧美自拍偷拍色图| 久久久久久九九九九| 97人妻人人澡人人爽人人精品| 在线欧美亚洲| 久热精品视频在线观看| 少妇大叫太粗太大爽一区二区| 九色精品蝌蚪| 欧美日韩一本到| 日韩a在线播放| 国产精品videossex撒尿| 午夜精品久久久久久久久| 91免费网站视频| 国产蜜臀在线| 色94色欧美sute亚洲线路二| 亚洲欧美日本一区二区| 成人看片网站| 色悠久久久久综合欧美99| 欧美国产日韩激情| 天天免费亚洲黑人免费| 偷拍与自拍一区| 成人午夜免费在线视频| 中国色在线日|韩| 欧美精品视频www在线观看| 国产精品嫩草69影院| 国产探花在线精品一区二区| 日韩h在线观看| 国产亚洲精品精品精品| 自拍偷拍欧美一区| 乱亲女秽乱长久久久| 国产精品免费精品一区| 国产福利一区在线观看| 日本一区二区在线| 欧美视频免费一区二区三区| 国产精品免费久久| 久久久久久久中文| 极品av在线| 精品久久久久久久久国产字幕| 国产高清视频网站| 卡一精品卡二卡三网站乱码| 亚洲第一网站免费视频| 人妻 丝袜美腿 中文字幕| aiai久久| 日韩成人中文字幕| 国产精品久久久久久久精| 日韩—二三区免费观看av| 韩国成人av| 欧美videossex另类| 亚洲一区在线电影| av女优在线播放| 玖玖在线播放| 亚洲成人av在线| 性色av无码久久一区二区三区| 日日欢夜夜爽一区| 欧美lavv| 最近高清中文在线字幕在线观看| 欧美日韩亚洲一区二| 成人在线免费播放视频| 国外成人福利视频| 日韩欧美一区二区三区在线| 免费日本黄色网址| 国产精品一国产精品| 91精品国产91久久久久久吃药| 在线永久看片免费的视频| 卡一卡二国产精品 | 黄色在线免费观看| 麻豆九一精品爱看视频在线观看免费| 国产成人欧美在线观看| 国产视频aaa| 91啪亚洲精品| 一区二区三区av在线| 日本理论片午伦夜理片在线观看| 91 com成人网| 亚洲xxxx3d动漫| 国产日本精品| 91精品国产综合久久久久久蜜臀| 欧美一级视频免费| 亚洲一区二区三区国产| 国产伦精品一区二区三区精品 | 国产 日韩 亚洲 欧美| 韩国美女久久| 日韩精品在线网站| 国产亚洲欧美精品久久久久久| 每日更新成人在线视频| 热re99久久精品国99热蜜月 | 亚洲一区二区三区久久| 亚洲精品福利网站| 国产欧美日韩综合精品一区二区| 四虎4hu永久免费入口| 97青娱国产盛宴精品视频| 88国产精品欧美一区二区三区| 九色在线观看视频| 亚洲午夜电影网| 日本少妇毛茸茸| 久久免费大视频| 成人午夜小视频| 91国内在线| 日韩精品极品视频| 亚洲天堂五月天| 久久亚洲春色中文字幕久久久| 日韩国产欧美亚洲| 免费av一区| 国产日韩欧美夫妻视频在线观看| 少妇视频在线| 亚洲精品v天堂中文字幕| 成人黄色短视频| 一区二区动漫| 亚洲精品在线视频观看| av漫画网站在线观看| 欧美午夜不卡在线观看免费| 精品人妻二区中文字幕| 亚洲在线观看| 91在线观看免费观看| 毛片在线能看| 欧美日免费三级在线| 久久久久久久黄色| 久久中文娱乐网| 第一区免费在线观看| 男人的天堂久久| 国产欧美日韩专区发布| bl在线肉h视频大尺度| 国产视频精品va久久久久久| 久久黄色免费网站| 久久精品道一区二区三区| 中文字幕一区二区三区四区五区六区| 亚洲精品视频一二三区| 中文字幕日韩欧美在线| 国产精品a成v人在线播放| 国产欧美一区二区三区在线看蜜臀 | 亚洲国产欧美一区二区三区丁香婷| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 亚洲国产aⅴ精品一区二区三区| 亚洲精品一区二区三区影院| 国产成人自拍视频在线| 福利一区二区在线| 福利在线小视频| 亚洲aaa级| 2014亚洲精品| 日日夜夜天天综合入口| 亚洲欧洲日韩国产| www精品国产| 亚洲品质自拍视频网站| 美女爆乳18禁www久久久久久| 国产一区二区三区观看| av视屏在线播放| 亚洲久久一区| 国产成人一区二区三区免费看| 黄色av电影在线播放| 日韩精品一二三四区| 色欲av伊人久久大香线蕉影院| 亚洲毛片av在线| 国产伦精品一区二区三区妓女下载| 鲁大师成人一区二区三区| 18禁免费观看网站| 欧美另类视频| 在线不卡日本| 久久97精品| 国产丝袜不卡| 爱啪视频在线观看视频免费| xvideos亚洲| 欧美视频xxxx| 亚洲欧美日韩在线| 亚洲色图100p| 国产精品视频一二| 第一区免费在线观看| 丝瓜av网站精品一区二区| 亚洲精品国产精品国自产| 夜夜春成人影院| 欧美激情论坛| 国产精品天堂蜜av在线播放| 国产成人精品av在线| 国偷自产一区二区免费视频| 国产福利视频一区二区| 久久毛片亚洲| 91精品国产成人www| 麻豆网站免费在线观看| 97超级碰在线看视频免费在线看 | 久久影院资源网| 曰本三级在线| 久久91精品国产91久久跳| www.精品久久| 日韩欧美三级在线| 国产福利小视频| 精品久久久久久久久国产字幕| 日韩欧美三级在线观看| 欧美久久99| 国产精品久久久久久久久久免费 | 国产精品无码永久免费888| 成人无码av片在线观看| 日韩激情av在线| 北条麻妃av高潮尖叫在线观看| 久久久精品日韩| 国产一区二区视频免费在线观看| 久久综合九色| 日本三级黄色网址| 国产成人免费视频一区| 亚洲麻豆一区二区三区| www.亚洲激情.com| 熟女少妇一区二区三区| 中文字幕免费不卡| 亚洲欧美精品aaaaaa片| 亚洲一区二区黄色| 免费视频久久久| 欧美日韩国产一级二级| 99re在线视频观看| 在线观看麻豆| 美日韩精品免费视频| 日本乱理伦在线| 91av在线影院| 外国成人毛片| 国产日韩二区| 国产成人高清| 成年在线观看视频| 亚洲尤物av| 日韩高清国产一区在线观看| 加勒比久久高清| 色婷婷精品国产一区二区三区| 久久不卡国产精品一区二区| 亚洲精品tv久久久久久久久| 欧美精品综合| 九色91popny| 日本欧美久久久久免费播放网| 国产中文字幕乱人伦在线观看| 久久aⅴ国产紧身牛仔裤| 99热国产免费| 精品无人乱码| 最近2019年好看中文字幕视频| 啪啪免费视频一区| 国产精品精品国产| 欧美成a人片免费观看久久五月天| 成人午夜在线观看| 在线观看欧美理论a影院| 亚洲小视频在线播放| 久久精品在线| 精品人妻一区二区免费| 国产精品对白交换视频| 啦啦啦免费高清视频在线观看| 日韩欧美国产不卡| av在线播放网站| 国产一区二区三区在线免费观看| 好看的中文字幕在线播放| 国产美女91呻吟求| 亚洲av无码乱码国产麻豆| 亚洲日本中文字幕区| 中文字幕一区二区人妻痴汉电车| 精品久久久久久综合日本欧美 | 亚洲欧洲激情在线| 日本乱理伦在线| 国产伦精品一区二区三区精品视频| 国产aⅴ精品一区二区三区久久| 日韩一级特黄毛片| 黑人巨大精品欧美一区| 午夜天堂在线视频| 久久亚洲影视婷婷| 国产精品第108页| 精品成人一区二区| 怡红院av在线| 成人性生交xxxxx网站| 99久久亚洲精品蜜臀| 亚洲精品一二三四五区| 久久精品免视看国产成人| 久久99国产精品自在自在app | 在线一区电影| 成人亚洲免费视频| 国产精品免费aⅴ片在线观看| 亚洲无码精品在线播放| 国产亚洲综合久久| 国产三级视频在线播放线观看| 69视频在线播放| 国产女人18毛片水真多18精品| 三级在线免费观看| 国产91综合网| 久久久精品99| 精品国产一区久久| 91美女主播在线视频| 国产视频一区二区不卡| 伊人影院久久| 精品人妻一区二区三区香蕉 | 99久久伊人精品影院| 欧美精品自拍| 一起草最新网址| 26uuu亚洲| 国产无套粉嫩白浆内谢| 日韩hd视频在线观看| 依依综合在线| 美国av一区二区三区| 欧美a级理论片| 最新中文字幕日本| 亚洲一区二区3| 男人久久精品| 国产精品偷伦免费视频观看的| 国产一区二区欧美| www.国产福利| 亚洲综合视频网| 久久久久久久久久久影院 | 国产尤物视频在线| 国产精品久久久久免费a∨| 99re8这里有精品热视频8在线| 天堂а√在线中文在线| 成人av在线播放网址| 日本三级午夜理伦三级三| 欧美一区二区三区免费在线看| 在线观看男女av免费网址| 国产主播一区二区三区四区| 日本伊人精品一区二区三区观看方式| 成人免费视频入口| 精品国产精品自拍| 成人好色电影| 2019国产精品视频| 国产午夜久久| 国产一区二区三区在线视频观看| 日韩精品在线网站| 激情小说亚洲| 欧美极品少妇无套实战|