青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

山寨:不是最好的,是最適合我們的!歡迎體驗(yàn)山寨 中文版MSDN

Blog @ Blog

當(dāng)華美的葉片落盡,生命的脈絡(luò)才歷歷可見。 -- 聶魯達(dá)

常用鏈接

統(tǒng)計

積分與排名

BBS

Blog

Web

最新評論

MapObjects開發(fā)技術(shù) (VC++)

MapObjects是一組基于COMTRANBBS技術(shù)的地圖應(yīng)用組件,它由一個稱為Map的ActiveX控件(OCX)和約45個自動化對象組成,在標(biāo)準(zhǔn)的Windows編程環(huán)境下,能夠與其他圖形、多媒體、數(shù)據(jù)庫開發(fā)技術(shù)組成完全獨(dú)立的綜合性應(yīng)用軟件,是基于前端應(yīng)用業(yè)務(wù)的良好的地圖開發(fā)環(huán)境。

MapObjects是全球最大的GIS軟件供應(yīng)商ESRI公司在業(yè)界最早推出的GIS軟件組件,它起點(diǎn)高、功能強(qiáng)、結(jié)構(gòu)優(yōu)雅。ESRI在推出其每一個版本時,都采取了非常嚴(yán)謹(jǐn)慎重的態(tài)度。從1.0版本算起,MapObjects正式問世已經(jīng)5年,才發(fā)展到2.1版本,可見每個版本質(zhì)量控制之嚴(yán)格。事實(shí)上,MapObjects是全球范圍內(nèi)使用最廣的GIS組件,也是潛在錯誤被最充分暴露并得以糾正的軟件組件,其穩(wěn)定可靠性無以置疑。有經(jīng)驗(yàn)的程序員都知道,在軟件開發(fā)過程中,穩(wěn)定性壓倒一切,而這正是MapObjects能被成功應(yīng)用的重要前提和保證。

作為ESRI公司GIS軟件族的重要成員,憑借ESRI公司在GIS領(lǐng)域的領(lǐng)先技術(shù)和市場地位,MapObjects操作的數(shù)據(jù)資源與ESRI的旗艦產(chǎn)品ArcGIS完全兼容,從結(jié)構(gòu)簡練的桌面數(shù)據(jù)格式(Shape文件)到以拓?fù)潢P(guān)系為基礎(chǔ)的經(jīng)典ArcInfo Coverage,以至基于數(shù)據(jù)庫(DBMS)和ArcSDE基礎(chǔ)之上的Geodatabase,都能夠被MapObjects讀取。除了矢量數(shù)據(jù)以外,MapObjects還能夠讀取多種格式的柵格數(shù)據(jù),如BMP、TIF、JPEG、ArcInfo Grid、Erdas Image等。MapObjects本身也能夠生成Shape文件格式的GIS數(shù)據(jù),該格式已經(jīng)成為GIS業(yè)界事實(shí)上的基于桌面應(yīng)用的標(biāo)準(zhǔn)。采用MapObjects,能夠最大限度地與主流GIS技術(shù)融合,保護(hù)用戶在數(shù)據(jù)生產(chǎn)、功能開發(fā)、以及人員培訓(xùn)上所作的一切投資。

1、 MapObjects的體系結(jié)構(gòu)
MapObjects可以說得上是最優(yōu)雅簡潔的GIS軟件組件。我們這么說,是因?yàn)樗宰钌俚慕涌谔峁┝顺S玫腉IS功能,甚至GPS的動態(tài)特性,同時做到了結(jié)構(gòu)合理,簡單明了,容易理解和擴(kuò)展。與之相比,其他的GIS組件,要不是由于提供的功能過多而破壞了其內(nèi)在的結(jié)構(gòu)美并影響了用戶擴(kuò)展的靈活性,就是結(jié)構(gòu)過于簡單而使功能大大弱化。可以說,MapObjects在功能和結(jié)構(gòu)兩者之間,取得了完美平衡,體現(xiàn)出了軟件的藝術(shù)性,給人帶來愉悅的感受。

1.1 數(shù)據(jù)結(jié)構(gòu)
從MapObjects對地圖數(shù)據(jù)的組織方式來看,概念清晰,易于理解。它認(rèn)為一個綜合性的地圖由多個圖層構(gòu)成,圖層數(shù)據(jù)來源廣泛,既可以是GIS矢量圖層,也可以是CAD圖層,甚至影像數(shù)據(jù)。對于GIS和CAD的矢量圖層,其內(nèi)部統(tǒng)一用記錄集(Recordset)來表達(dá),這樣就抹平了各種不同格式數(shù)據(jù)之間在內(nèi)存中的表達(dá)鴻溝,簡化了程序員的數(shù)據(jù)觀點(diǎn)。記錄集正象關(guān)系數(shù)據(jù)庫中的二維表,行表示每個要素、列表示每個屬性。如果含有名稱為 “Shape”的列,則該記錄集表示的是地圖要素,否則表示的是普通的數(shù)據(jù)庫表格。這樣,在數(shù)據(jù)結(jié)構(gòu)內(nèi)部就消除了GIS和MIS數(shù)據(jù)之間的差異,使程序員開發(fā)GMIS綜合應(yīng)用系統(tǒng)易如反掌。



Shape字段以面向?qū)ο蟮募夹g(shù)封裝了要素的圖形部分。它把圖形劃分為三種類型,即點(diǎn)、線、面。這些幾何類型既簡單又復(fù)雜,說它簡單,是因?yàn)楹苋菀桌斫?,所有的圖形歸根到底都是由點(diǎn)、線、面構(gòu)成的;說它復(fù)雜,是因?yàn)檫@些點(diǎn)、線、面并不是簡單的點(diǎn)、線、面,實(shí)際上它引入了一個部件(Part)的概念,由點(diǎn)構(gòu)成部件,部件由復(fù)合點(diǎn)構(gòu)成、線和面則由部件構(gòu)成。

 

如果只有一個部件,則它是簡單的線或面,如果有兩個以上的部件,則構(gòu)成復(fù)合線或面。例如夏威夷群島,由很多小島嶼構(gòu)成,但它是一個整體,其中的每個小島都可以用Part來表示,多個Part構(gòu)成的多邊形放到一個Shape字段中。

 

至于注記,則被描述為屬性字段的自動標(biāo)注。標(biāo)注的位置由Shape字段中的圖形要素決定,它可以是點(diǎn)、線或面,通常是線。標(biāo)注的內(nèi)容由普通屬性表示,既可以是字符型,也可以是整型或浮點(diǎn)型,通常是字符型。這樣,一切要素既可以按圖形表示,也可以按其屬性內(nèi)容標(biāo)注顯示,甚至可以兩者同時顯示,地圖顯示和制圖的方式是極為靈活的。

1.2 功能接口
再從MapObjects所提供的功能接口來看,常用的地圖應(yīng)用基本上都能實(shí)現(xiàn),例如:

* 創(chuàng)建新的Shape文件
* 更新屬性或圖形數(shù)據(jù)
* 繪制點(diǎn)、線、橢圓、矩形和多邊形等圖形要素
* 繪制描述性的文本注記
* 地圖簡單點(diǎn)取查詢、空間查詢、相對位置查詢、SQL邏輯條件查詢等
* 空間統(tǒng)計
* 地圖縮放和漫游
* 豐富的繪圖方式,如按值潤色、分類顯示、繪制密度圖、產(chǎn)生含各類圖表的專題圖等。
* 屬性自動標(biāo)注
* 顯示航空和衛(wèi)星遙感影像
* 動態(tài)顯示實(shí)時或順時數(shù)據(jù),如GPS動態(tài)監(jiān)測
* 地址匹配
* 投影變換
* Buffer、Union、Intersect等空間分析算子

通過調(diào)用這些接口,能夠開發(fā)從簡單的電子地圖應(yīng)用,至復(fù)雜的基于GIS/GPS/RS的3S應(yīng)用。利用空間分析算子,甚至可以構(gòu)造出具有一定復(fù)雜度的空間分析模型。由于提供了數(shù)據(jù)更新接口,用戶能夠擴(kuò)展出自己的編輯工具,富融公司便基于MapObjects 2.0/2.0a/2.1擴(kuò)展了近50種的編輯工具,使之能夠滿足更為廣泛的應(yīng)用要求。

2、 MapObjects的開發(fā)過程
MapObjects的使用和開發(fā)過程與其他的ActiveX控件沒有兩樣,在Visual Basic、Delphi、Visual C++等能夠支持控件開發(fā)的編程環(huán)境下,一旦把控件插入到編程項(xiàng)目中,就可以通過接口使用控件所提供的各種方法。

由于MapObjects聯(lián)機(jī)幫助和隨機(jī)手冊中的大部分編程說明都采用Visual Basic作為代碼示例,而Visual C++的說明相對較少,為了方便Visual C++程序員的工作,以下的開發(fā)過程和代碼示例使用Visual C++,在其他環(huán)境下的編程過程大致類似。

以下說明均假設(shè)在Windows下已成功地安裝了MapObjects控件。我們將構(gòu)造一個簡單的電子地圖應(yīng)用程序,它可以增加一個新圖層,實(shí)現(xiàn)地圖的放大、縮小,并且可以實(shí)現(xiàn)要素的定位功能。

2.1 生成Visual C++編程項(xiàng)目
使用Visual C++“File | New”打開新建工程對話框,使用MFC AppWizard(exe)產(chǎn)生一個新的MFC應(yīng)用程序,我們把工程名稱取為“mmap”,該向?qū)б还灿?步,前5步都按缺省選項(xiàng),第6步把Basic Class由CView改為CFormView,這樣完成后產(chǎn)生的應(yīng)用程序?qū)⒂幸粋€表單模板,其標(biāo)識號為IDD_MMAP_FROM,初始狀態(tài)是一行靜態(tài)文本,內(nèi)容為“TODO:在這個對話框里設(shè)置表格控制”(如果是英文版或選擇的語言為英文,則提示換成英文)。把這行字刪掉,以便在此表單中加入地圖控件。

2.2 加入MapObjects地圖控件
使用“Project | Add To Project | Components and Controls...”菜單功能打開“Components and Controls Gallery”對話框,從其“Registered ActiveX Controls”文件夾下的已登記控件列表中找到“MapObjects 2.1 Map Control”并按“Insert”按鈕,系統(tǒng)將生成該控件及其自動化對象的一系列包裹類(Wrapper Class),把第一個類名稱由CMap1改為CMoMap,實(shí)現(xiàn)文件保持不變,即map.h和map.cpp。結(jié)束該對話框后,在控制條中會增加一個地圖控件圖標(biāo),把該圖標(biāo)插入到IDD_MMAP_FORM表單中。然后選中剛插入的控件圖標(biāo),在用左手按住鍵盤的“Ctrl”鍵的情況下,右手雙擊鼠標(biāo)左鍵,將彈出一個“Add Member Variable”對話框,在成員變量名稱欄輸入“m_map”,下面兩欄保持不變,即Category為Control,Variable Type為CMoMap。做完這些工作后,回到ClassView中觀察CMmapView類,將發(fā)現(xiàn)增加了一個類型為CMoMap的m_map對象,利用它就可以操作地圖了。

2.3 使用Map對象增加圖層
這時編譯程序,應(yīng)該不會出錯,但在運(yùn)行時,發(fā)現(xiàn)除了在表單視圖中增加了一個空白的代表地圖控件的小圖標(biāo)外,應(yīng)用程序與剛生成時的情況并沒有什么太大的區(qū)別。為了增加圖層數(shù)據(jù),首先要把地圖控件的尺寸放大到與表單視圖一樣大,然后把圖層數(shù)據(jù)加入到地圖對象中。

第一步、找到CMmapView的OnInitialUpdate()方法,作如下操作:
(1)如果原來有“ResizeParentToFit();”語句,注釋掉或刪除它;
(2)在返回語句之前增加如下語句:

// 將顯示尺寸調(diào)整到整個客戶區(qū)
CRect client;
GetClientRect(&client);
int cx=client.Width();
int cy=client.Height();
m_map.SetWindowPos(0, 0, 0, cx, cy, SWP_NOZORDER);

第二步、找到CChildFrame,重載其OnClientCreate()方法,該方法將在創(chuàng)建表單客戶區(qū)時被調(diào)用,在其返回語句之前增加語句:“MDIMaximine();”。

完成上面兩步后,再次編譯程序并運(yùn)行,在原來表單客戶區(qū)應(yīng)該出現(xiàn)一個空白的地圖,接下來往這個空白圖上增加圖層。為了簡單起見,我們假設(shè)圖層數(shù)據(jù)放在C:\data目錄下,圖層格式為Shape文件,其文件名為test.shp。

第三步、在CMmapView中創(chuàng)建一個增加shape文件的方法AddShpLayer(),其實(shí)現(xiàn)為:
增加SHP圖層,返回圖層內(nèi)部名稱,為空表示不成功。
CString CMmapView::AddShpLayer(const CString & path, COLORREF color, short symbolSize, short symbolStyle)
{

CMoDataConnection conn;
if (!conn.CreateDispatch(TEXT("MapObjects2.DataConnection"))) return "";
conn.SetDatabase(GetFileDirectory(path));
if (!conn.Connect()) return "";

// Add layer specified by path
CMoLayers layers=m_map.GetLayers();
CMoMapLayer layer;
if (!layer.CreateDispatch(TEXT("MapObjects2.MapLayer"))) return "";

CString LayerName = GetFileTitle(path);
CMoGeoDataset geoDataset=conn.FindGeoDataset(LayerName);
if(!geoDataset) return "";

layer.SetGeoDataset(geoDataset);
CMoSymbol layerSymbol(layer.GetSymbol());

if (color != -1) layerSymbol.SetColor(color); // Set color if specified

layerSymbol.SetSize(symbolSize);
layerSymbol.SetStyle(symbolStyle);
layers.Add(layer);
return(layer.GetName());

}

為了使這段代碼能夠被順利編譯,還要在mmapview.cpp的文件開始處增加如下include語句:
#include "modataconnection.h"
#include "molayers.h"
#include "momaplayer.h"
#include "mogeodataset.h"
#include "mosymbol.h"

另外,在CMmapView中增加幾個輔助函數(shù),用于分析圖層文件路徑中的文件名、目錄名:
CString CMmapView::GetFileDirectory(const CString& path)
{

int pos = path.ReverseFind('\\');
if (pos >= 0) return path.Left(pos);
return "";

}

CString CMmapView::GetFileTitle(const CString& path)
{

CString strResult = GetFileName(path);
int pos = strResult.ReverseFind('.');
if (pos >= 0) return strResult.Left(pos);
return strResult;

}

CString CMmapView::GetFileName(const CString& path)
{

int pos = path.ReverseFind('\\');
if (pos >= 0) return path.Right(path.GetLength() - pos - 1);
return path;

}

第四步,回到CMmapView的OnInitialUpdate(),在其返回之前加上如下語句:
AddShpLayer("c:\\data\\test.shp", RGB(125,125,125), 0, 0);

再次編譯后運(yùn)行(運(yùn)行前確保C:\data\test.shp圖層文件存在,即至少包括c:\data\test.dbf、c:\data\test.shp、c:\data\test.shx三個文件),應(yīng)該能夠觀察到test圖層被加入到了地圖中。

2.4 使用map對象操作地圖
接下來我們完成對地圖的放大縮小操作,當(dāng)點(diǎn)擊鼠標(biāo)左鍵時,地圖放大1倍,當(dāng)點(diǎn)擊鼠標(biāo)左鍵時,地圖回到全圖顯示。

第一步,使用類向?qū)В–lass Wizzard)在CMmapView中增加一個地圖消息響應(yīng)函數(shù)。即選中CMmapView中的IDC_MAP1,在Message列表框中雙擊MouseDown,將生成一個
OnMouseDownMap1()消息函數(shù)。

第二步,在OnMouseDownMap1()中加入如下語句:
if(Button==1)
{

CMoRectangle rect=m_map.GetExtent();
rect.ScaleRectangle(0.5);
m_map.SetExtent(rect);

}
else if(Button==2)
{

CMoRectangle rect=m_map.GetFullExtent();
m_map.SetExtent(rect);

}

為了使用CMoRectangle,還需要在mmapview.cpp的開始部分加一個include語句,即:
#include "morectangle.h"

按下鼠標(biāo)左鍵時,在消息響應(yīng)函數(shù)中的Button參數(shù)記錄按下的是哪個鍵,1表示左鍵,2表示右鍵。編譯后運(yùn)行,分別點(diǎn)擊鼠標(biāo)左右鍵,應(yīng)該觀察到地圖放大和縮回到全圖的效果。

2.5 使用Recordset對象檢索數(shù)據(jù)
接下來我們想找到圖層中的第一個要素,即其FeatureId為1(在MapObjects要素圖層中,F(xiàn)eatureId是其固有的字段,用于記錄每個要素在圖層中的序號),找到這個要素后,把它放在視圖窗口的中央顯示,這就類似于一個條件定位的功能。

第一步,在IDR_MMAPTYPE菜單中增加一個“定位”菜單項(xiàng)至“查看”菜單下,設(shè)其ID號為ID_FEATURE_LOCATE。

第二步,使用類向?qū)В–lass Wizzard)產(chǎn)生該菜單項(xiàng)在CMmapView中的消息響應(yīng)函數(shù),即與COMMAND和UPDATA_COMMAND_UI兩個消息對應(yīng)的OnFeatureLocate()和OnUpdateFeatureLocate(),在OnUpdateFeatureLocate()的實(shí)現(xiàn)中增加下行語句,使該菜單總是處于激活狀態(tài):
pCmdUI->Enable();

第三步,在OnFeatureLocate()中增加如下語句:

 

void CMmapView::OnFeatureLocate()
{
CMoLayers layers=m_map.GetLayers();
CMoMapLayer layer=layers.Item(COleVariant(TEXT("test")));
if(layer)
{
CMoRecordset recs=layer.SearchExpression(_T("FeatureId = 1"));
recs.MoveFirst();
if(!recs.GetEof())
{

CMoFields fields=recs.GetFields();
CMoField shapeField=fields.Item(COleVariant(TEXT("Shape")));

if(shapeField)
{
switch(shapeField.GetType())
{
case 21:
{
CMoPoint point=shapeField.GetValue().pdispVal;
if(point) m_map.CenterAt(point.GetX(), point.GetY());
}
break;
case 22:
{
CMoLine line=shapeField.GetValue().pdispVal;
if(line)
{
CMoRectangle rect=line.GetExtent();
rect.ScaleRectangle(1.5);
m_map.SetExtent(rect);
}
}
break;
case 23:
{
CMoPolygon polygon=shapeField.GetValue().pdispVal;
if(polygon)
{
CMoRectangle rect=polygon.GetExtent();
rect.ScaleRectangle(1.5);
m_map.SetExtent(rect);
}

}
break;
}
}
}
}
}

在這里使用到了記錄集、字段、點(diǎn)、線、面等對象,因此在文件頭部還要增加如下include文件:
#include "morecordset.h"
#include "mofields.h"
#include "mofield.h"
#include "mopoint.h"
#include "moline.h"
#include "mopolygon.h"

在switch/case語句中的21表示要素的幾何類型為點(diǎn),22表示線,23表示面。編譯后運(yùn)行,并選擇“定位”菜單,程序?qū)⒄业絫est圖層中的第一個要素,并把它放在窗口的中央顯示出來。如果加入的圖層數(shù)據(jù)是點(diǎn)層,我們建議把其symbolSize設(shè)為10,以便觀察到點(diǎn)位。即把OnInitialUpdate()中的AddShpLayer方法調(diào)用換作:
AddShpLayer("c:\\data\test.shp", RGB(255,0,0), 10, 0);

從這個例子中我們看到了如何通過圖層(Layer)執(zhí)行一個SQL查詢語句,獲得記錄集后如何對其進(jìn)行檢索,并提取出具體字段內(nèi)容。對于圖形圖層,“Shape”字段也是固定存在的,其中存放了該要素的圖形幾何部分,通過使用字段的GetType()方法可以獲得該圖層是點(diǎn)層、線層或面層,并作出相應(yīng)的定位處理。字段的GetValue()方法返回的是一個VARIANT類型值,其中封裝了各種各樣的數(shù)據(jù)類型,在Shape字段中,它封裝的是一個圖形要素,可以通過pdispVal取得它的真正內(nèi)容,并根據(jù)圖層類型轉(zhuǎn)換為相應(yīng)的圖形要素,作為計算地圖顯示范圍的依據(jù)。

posted on 2008-03-27 11:30 isabc 閱讀(1110) 評論(0)  編輯 收藏 引用

廣告信息(免費(fèi)廣告聯(lián)系)

中文版MSDN:
歡迎體驗(yàn)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩视频第一区| 在线视频你懂得一区| 久久精品视频在线| 亚洲欧美一区二区视频| 国产精品毛片高清在线完整版| 亚洲欧美国产视频| 亚洲一区二区三区四区五区午夜| 国产精品午夜在线| 葵司免费一区二区三区四区五区| 开心色5月久久精品| 91久久久亚洲精品| 99国产精品| 国产日韩综合| 欧美福利一区| 国产精品v日韩精品| 欧美一级网站| 免费国产一区二区| 亚洲一区二区免费视频| 欧美一区二区在线免费观看| 亚洲国产高清视频| 一区二区三区免费在线观看| 国产自产高清不卡| 亚洲精选91| 国产自产精品| 99精品国产高清一区二区| 国产欧美精品在线观看| 欧美国产先锋| 国产网站欧美日韩免费精品在线观看| 亚洲天天影视| 欧美人成在线| 亚洲欧美日韩精品久久亚洲区| 亚洲欧美精品| 日韩一级二级三级| 欧美专区在线| 亚洲午夜一区二区三区| 久久一区激情| 久久精品国产第一区二区三区最新章节 | 日韩亚洲视频| 亚洲综合成人婷婷小说| 亚洲精品国产精品国自产在线| 亚洲理伦电影| 亚洲电影在线看| 欧美亚洲专区| 午夜精品久久久久久久久| 欧美国产亚洲另类动漫| 久久嫩草精品久久久精品一| 国产精品劲爆视频| 91久久午夜| 激情小说另类小说亚洲欧美| 日韩亚洲在线| 亚洲美女中文字幕| 久久综合一区| 欧美a级一区二区| 国产一区二区三区久久| 亚洲视频精品在线| 一区二区三区偷拍| 欧美日本国产视频| 91久久久久| 亚洲精品久久久久久久久久久久| 久久久久久久激情视频| 久久久精品国产免费观看同学| 国产精品日韩欧美大师| 在线午夜精品自拍| 亚洲一区精彩视频| 国产精品二区三区四区| 一本色道久久88综合日韩精品 | 亚洲国产精品美女| 久久色中文字幕| 能在线观看的日韩av| 在线成人激情黄色| 欧美91大片| 亚洲日韩欧美视频一区| 在线视频欧美精品| 国产精品色婷婷久久58| 亚洲欧美激情视频在线观看一区二区三区| 亚洲午夜精品网| 欧美日韩一区二区三区在线| 99在线精品视频| 欧美一二三视频| 国产一区二区黄| 久久影院午夜论| 亚洲日本成人在线观看| 亚洲天堂久久| 国产一级揄自揄精品视频| 欧美中文字幕在线| 亚洲第一免费播放区| 亚洲午夜久久久久久尤物 | 欧美韩国日本综合| 欧美激情无毛| 亚洲天堂网在线观看| 欧美在线观看视频在线| 永久久久久久| 欧美日韩美女一区二区| 午夜欧美电影在线观看| 欧美成人精品不卡视频在线观看 | 国产精品第十页| 欧美一区二区在线视频| 亚洲国产精品久久久久秋霞不卡| 一本色道久久综合精品竹菊| 国产精品视频999| 毛片av中文字幕一区二区| 亚洲美女电影在线| 久久久久国产精品一区二区| 亚洲精品乱码久久久久久按摩观| 国产精品都在这里| 久久一区二区三区四区五区| 一区二区三区视频在线观看 | 亚洲午夜电影| 亚洲大黄网站| 国产欧美精品一区aⅴ影院| 欧美xart系列在线观看| 午夜精品福利电影| 亚洲裸体在线观看| 久久夜色精品亚洲噜噜国产mv| 日韩亚洲精品在线| 国内免费精品永久在线视频| 欧美激情一区二区三级高清视频| 亚洲欧美精品伊人久久| 亚洲美女在线一区| 欧美 日韩 国产 一区| 亚洲欧美日韩精品久久久| 亚洲精品欧洲精品| 在线观看亚洲专区| 国产一区二区三区观看| 国产精品一区二区在线观看网站 | 欧美一区在线视频| 一本大道久久精品懂色aⅴ| 在线高清一区| 一区在线免费观看| 国产在线一区二区三区四区| 国产精品高潮呻吟| 欧美色图首页| 欧美日韩成人综合在线一区二区| 美日韩丰满少妇在线观看| 久久精品国内一区二区三区| 午夜一区二区三区在线观看| 中文一区在线| 国产精品99久久不卡二区| 亚洲精品免费网站| 亚洲欧洲综合另类| 亚洲精品久久久久久久久久久| 欧美国产三级| 亚洲国产免费| 亚洲老司机av| 一区二区免费在线播放| 在线视频你懂得一区| 亚洲一区二区3| 午夜精品久久久久久久99樱桃| 中文欧美字幕免费| 亚洲欧美日韩久久精品| 午夜精品久久久久影视| 欧美在线综合视频| 久久亚洲春色中文字幕久久久| 久久亚洲精品一区二区| 母乳一区在线观看| 欧美日韩一区二区三区高清| 在线观看视频欧美| 亚洲看片一区| 一区二区三区视频观看| 久久久久久午夜| 乱中年女人伦av一区二区| 麻豆av一区二区三区久久| 欧美成人乱码一区二区三区| 欧美成人午夜激情视频| 欧美人交a欧美精品| 国产精品久久久久久模特| 国产欧美精品一区| 亚洲国产成人午夜在线一区| 亚洲美女福利视频网站| 亚洲女人小视频在线观看| 久久久精品动漫| 亚洲人成毛片在线播放女女| 在线亚洲免费| 老鸭窝毛片一区二区三区| 欧美精品日本| 国产一区二区三区不卡在线观看| 亚洲激情中文1区| 亚洲免费影视第一页| 久久中文在线| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 黄色工厂这里只有精品| 亚洲经典三级| 小嫩嫩精品导航| 欧美激情精品久久久久久蜜臀| 亚洲黄色性网站| 久久成人在线| 欧美午夜视频在线| 亚洲国产专区校园欧美| 午夜久久福利| 亚洲精品欧美极品| 久久久久久9| 国产麻豆日韩| 亚洲午夜未删减在线观看| 欧美成人第一页| 欧美一级视频精品观看| 欧美调教视频| 一区二区三区欧美| 欧美风情在线观看| 久久疯狂做爰流白浆xx| 欧美性猛交99久久久久99按摩|