久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ArcGIS Engine基础开发教程(转)

發布時間:2024/4/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ArcGIS Engine基础开发教程(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ArcGIS Engine基礎開發教程(0)——目錄

《ArcEngine9.3 基礎開發教程》是面向初中級開發者的一份簡單易用,功能全面的學習資料及參考文檔。教程首先從如何來創建一個ArcGIS Engine桌面應用程序開始,依據GIS的數據獲取(幾何對象與空間參考)、顯示(地圖與地圖布局、圖層符號化、地圖輸出)、處理(地圖查詢)、分析(空間分析)主線來進行詳細講解。每一具體的部分均由目標、準備工作、接口介紹、實例代碼、演示效果幾方面來闡述。教程圖文并茂,條理清晰,是初學者最佳的選擇。

講座題目:ArcGIS Engine基礎開發教程
主講人:fxlcoco
第一講 創建第一個ArcGIS Engine桌面應用程序... 6
第二講 學習何對象與空間參考... 15
第三講 學習地圖和地圖布局... 44
第四講 學習圖層符號化... 64
第五講 學習地圖查詢... 91
第六講 學習空間分析... 110

第七講 學習地圖輸出... 121、

ArcGIS Engine基礎開發教程(2)——學習幾何對象與空間參考

轉載自: http://bbs.esrichina-bj.cn/ESRI/thread-46367-1-1.html

2.1目標

1.熟悉ArcGIS Engine Geometry模型,通過程序構建常用幾何對象

2.熟悉空間參考

3.通過野外測量點構建一個polygon shapefile功能開發

2.2準備工作

1.IDE:Visual

2.ArcGIS Engine Developer kit 9.3
??????? 3.自造一份包含X,Y坐標的*.txt文本文檔數據(即野外測量點)

2.3Geometry主要幾何對象模型圖

???????????????????????????????????????????????????????????????? 圖1

Geometry是ArcGIS Engine中使用最為廣泛的對象集之一,用戶在創建、刪除、編輯和進行地理分析的時候,就是處理一個包含幾何形體的矢量對象;除了顯示要素意外,控件對象選擇,要素符號化,標注要素,編輯要素都需要Geometry參與。圖1是Geometry的主要幾何對象模型圖,接下來將一一介紹這些幾何對象

2.4幾何對象

2.4.1Point和MultiPoint幾何對象

2.4.1.1Point幾何對象

Point:是一個0維的幾何圖形,具有X,Y坐標值,以及一些可選的屬性:如高程值(Z值),度量值(M值) 和ID號,點對象用于描述精確定位的對象,例如一個電話亭在一個城市的精確位置以下代碼演示如何創建一個Point對象:

  • IPoint pPoint = new PointClass();
  • pPoint.X = 100;
  • pPoint.Y = 100;
  • 復制代碼

    2.4.1.2MultiPoint幾何對象

    MultiPoint:點集對象是一系列無序的點的群集,這些點具有相同的屬性信息。例如可以用一個點集來表示整個城市天然氣調壓站。如下圖所示:一個Multipoint對象由6個Point對象組成。

    ????????????????????????????????????????????????????????????? 圖2

    以下代碼片段演示如何構建Multipoint對象:

    //定義第一個點

    IPoint pPoint1 = new PointClass();

    pPoint1.X = 100;

    pPoint1.Y = 100;

    //定義第二個點

    IPoint pPoint2 = new PointClass();

    pPoint2.X = 200;

    pPoint2.Y = 200;

    ……//構建其他點

    IPointCollection pMultipoint = new MultipointClass();

    object o=Type.Missing;

    //添加第一個點,不需要設置點的順序,參數設置為Type.Missing

    pMultipoint.AddPoint(pPoint1, ref o, ref o);

    //添加第二個點,不需要設置點的順序,參數設置為Type.MissingpMultipoint.AddPoint(pPoint2, ref o, ref o);

    ……//添加其他點

    2.4.2Segment幾何對象

    2.4.3Path和Ring幾何對象

    2.4.3.1Path幾何對象

    Path是連續的Segment的集合,除了路徑的第一個Segment和最后一個Segment外其余的Segment的起始點都是前一個Segment的終止點,即Path對象的中的Segment不能出現分離,Path可以是任意數的Line,CircularArc,EllipticArc和BezierCurve的組合。

    ??????????????????????????????????????????????????????? 圖4

    ??? 一個或多個Path組成一個Polyline對象。

    2.4.3.2Ring幾何對象

    ???????? Ring是一個封閉的Path即起始和終止點有相同的坐標值。它有內部和外部屬性。

    ????????????????????????????????????????? 圖5

    ???? 一個或多個Ring對象組成一個Polygon對象。

    2.4.4Polyline和Polygon幾何對象

    2.4.4.1Polyline幾何對象

      Polyline對象是由一個或多個相連或者不相連的path對象的有序集合,它可以是單個Path對象組成,也可以是多個相連的Path對象組成,或者是多個分離的Path組成,如下圖所示。Polyline通常用來代表線狀地物如道路,河流,管線等等。

    ??????????????????????????????????????????????????????????????????????? 圖6

    一個Polyline對象必須滿足以下準則:

    1.組成Polyline對象的所有Path對象必須是有效的。

    2.組成Polyline對象的所有Path對象不能重合,相交或自相交。

    3.組成Polyline對象的多個Path對象可以連接與某一點,也可以分離。

    4.Path對象的長度不能為0.

    IPolyline是Polyline類的主要接口,IPolyline的Reshape方法可以使用一個Path對象為一個Polyline對象整形,IPolyline的SimplifyNetwork方法用于簡化網絡。

    Polyline對象可以使用IGeometryCollection接口添加Path對象的方法來創建,使用該接口需注意以下情況:

    1.每一個Path對象必須是有效的,或使用IPath::Simplify方法后有效。

    2.由于Polyline是Path對象的有序集合,所以添加Path對象時必須注意順序和方向。

    3.為了保證Polyline是有效的,可以創建完Polyline對象后使用ITopologicalOperator接口的Simplify方法。

        以下代碼片段為使用IGeometryCollection接口創建一個Polyline對象:

    //定義第一個點

    IPoint pPoint1 = new PointClass();

    pPoint1.X = 100;

    pPoint1.Y = 100;

    //定義第二個點

    IPoint pPoint2 = new PointClass();

    pPoint2.X = 200;

    pPoint2.Y = 200;

    //創建一個Line對象

    ILine pLine= new LineClass();

    //設置Line對象的起始終止點

    pLine.PutCoords(pPoint1,pPoint2);

    //QI到ISegment

    ISegment pSegment= pLine as ISegment;

    //創建一個Path對象

    SegmentCollection pPath= new PathClass();

    object o=Type.Missing;

    //通過ISegmentCollection接口為Path對象添加Segment對象

    pPath.AddSegment(pSegment,ref o,ref o);

    //創建一個Polyline對象

    IGeometryCollection pPolyline = new PolylineClass();

    //通過IGeometryCollection為Polyline對象添加Path對象pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o);

    2.4.4.2Polylgon幾何對象

    ?? 2Polylgon對象是由一個或多個Ring對象的有序集合,它可以是由單個Ring 對象構成,也可以使用多個Ring組成如下圖所示。其中Ring可以分為Outer Ring(外環)和Inner Ring(內環)之分。外環和內環都是有方向的,它們的區別是外環的方向是順時針的,內環的方向是逆時針。Polygon通常用來代表有面積的多邊形矢量對象,如行政區,建筑物等。

    ???????????????????????????????????????????????????????????????? 圖7

    以下代碼片段演示如何構建一個Polygon:

    //創建一個Ring對象,通過ISegmentCollection接口向其中添加Segment對象

    ISegmentCollection pSegCollection = new RingClass();

    object o = Type.Missing;

    pSegCollection.AddSegment(pSegment1, ref o, ref o);

    pSegCollection.AddSegment(pSegment2, ref o, ref o);

    //QI到IRing接口封閉Ring對象,使其有效

    IRing pRing = pSegCollection as IRing;

    pRing.Close();

    //使用Ring對象構建Polygon對象

    IGeometryCollection pGeometryColl = new PolygonClass();pGeometryColl.AddGeometry(pRing, ref o, ref o);

    2.4.5Envelope幾何對象

    ? Envelope是所有幾何對象的外接矩形,用于表示幾何對象的最小邊框,所有的幾何對象都有一個Envelope對象,IEnvelope是Envelope對象的主要接口,通過它可以獲取幾何對象的XMax,XMin,YMax,YMin,Height,Width屬性。通過IEnvelope的Expand方法還可以按比例縮放Envelope對象的范圍,如下圖所示:

    2.4.6Curve對象幾何對象

    ? 除去Point,MultiPoint和Envelope外,其他所有的幾何體都可以看做是Curve(曲線)。Line,Polyline,Polygon,CircularArc,BezierCurve,EllipticArc和CircularArc都是曲線的一種,它們都實現了ICurve接口。

    ICurve接口的Length屬性用于返回一個Curve對象的長度。

    ICurve接口的FromPoint和ToPoint屬性可以獲得Curve對象的起止點。

    ICurve接口的Reverseorientation方法可以改變一個Curve對象的節點次序即調動Curve對象的起始點和終止點互相調換。

    ICurve接口的IsClosed屬性則可以判斷一個Curve對象起始點和終止點是否在一個位置上。

    ICurve接口的GetSubcurve方法可以復制一條Curve對象的特定部分,例如一條10千米公路的Curve對象,獲取2-5千米處的公路的曲線代碼片段如下所示:

    //QI到ICurve接口

    ICurve pCurve = pPolyline as ICurve;

    //創建一個Polyline對象

    ICurve pNewCurve = new PolylineClass();

    bool btrue= true;

    //獲取-5千米間的曲線對象pCurve.GetSubcurve(2, 5, btrue, out pNewCurve);

    此外ICurve的QueryTangent和QueryNormal方法分別用于獲取Curve對象上某一點的曲線的切線和法線。

    2.4.7 Triangle Strip和Trangle Fan, Trangle,Ring幾何對象

    Triangle Strip和Trangle Fan, Trangle,Ring是構成MultiPatch幾何對象的構建對象。

    2.4.7.1Triangle Strip幾何對象

    TriangelStrip對象是由一系列點定義的曲面片組成,而曲面片是有若干個三角形所組成,所以這個曲面可以定義為:(0,1,2) ,(2, 1, 3), (2, 3, 4), (4, 3, 5)。

    ??????????????????????????????????????????????????????????? 圖9

    2.4.7.2Trangle Fan幾何對象

    一個Trangle Fan對象由一系列點定義的曲面片組成,所不同的是所有的三角形共享一個頂點。如下圖所示,所以這個曲面可以定義為:(0,1,2) ,(0,2, 3), (0, 3, 4), (0, 4, 5)。

    ????????????????????????????????????????????????????????????????????? 圖10

    2.4.7.3Triangle幾何對象

    Triangle由三個點所確定如下圖,一個Triangle可定義為(0,1,2)等。

    ??????????????????????????????????????????????????? 圖11

    2.4.7.4Ring幾何對象

    Ring和前邊介紹的組成Polygon的Ring一樣,例如下邊一個房屋組成它的墻是個OutRing對象,而窗戶和門是InnerRing對象。

    ????????????????????????????????????????????????????????????????????????? 圖12

    2.4.8Multipatch幾何對象

    Multipatch幾何對象用于描述3D圖形,可以由TriangleStrip, TriangleFan, Triangle和ring對象組合構成組成。Multipatch可以通過多種方式創建,一種是通過導入外部3D格式數據文件(3D Studio Max .3ds files, OpenFlight .flt files, COLLADA .dae files, Sketchup .skp files, VRML .wrl files),另外ArcGIS Engine提供了多種創建Multipatch幾何對象的方法:

    如果創建沒有貼圖紋理,沒有法向,沒有組成部分信息的Multipatch時,只需創建好組成的Multipatch的各個部分即可,然后通過MultiPatch的IGeometryCollection接口添加各個組成部分即可。

    如果要為Multipatch每個組成部分添加紋理信息,法向信息,屬性信息就必須使用GeneralMultiPatchCreator對象來創建,通過其IGeneralMultiPatchInfo接口來為MultiPatch各個組成部分定義法向,材質,屬性信息。通過IGeneralMultiPatchInfo接口可以獲取這些MultiPatch的各個組成部分的信息。

    通過IConstructMultiPatch接口和IExtrude接口操作GeometryEnvironment對象可以通過拉伸Polyline對象(拉伸為墻)和Polygon對象(拉伸為多面體)來創建MultiPatch.

    通過訪問3D符號庫,獲取3DSymbol來渲染點,把三維符號放置在點的位置從而生成Multipatch.

    下圖為MultiPatch對象的貼圖原理:

    ????????????????????????????????????????????????????????????????????????????? 圖13

    接下來給大家介紹通過GeneralMultiPatchCreator創建一個有紋理MultiPatch的方法:需要使用以下三個對象:

    GeometryMaterial:用于構建材質,通過IGeometryMaterial創建的材質可以作為TextureLineSymbol或者 TextureFillSymbol屬性用來創建這些符號,也可以把它添加到GeometryMaterialList對象中,用于GeneralMultipatchCreator對象構建Multipatch對象。

    GeometryMaterialList:材質對象的容器用于GeneralMultiPatchCreator對象調用Init方法時使用。

    GeneralMultiPatchCreator:用于創建有紋理的貼圖的Multipatch.。

    以下代碼片段演示如何創建一個MultiPatch對象

    ??????? ///

    <summary>

    ??????? ///

    構建Multipatch幾何對象

    ??????? ///

    </summary>

    ??????? ///

    <returns>返回Multipatch幾何對象</returns>

    ??????? public IMultiPatch CreateMultipatch()

    {

    ??????????? try

    {

    ??????????????? //創建圖形材質對象

    ??????????????? IGeometryMaterial texture = new GeometryMaterialClass();

    texture.TextureImage = @"C:\Temp\MyImage.jpg";

    ??????????????? //創建材質列表對象

    ??????????????? IGeometryMaterialList materialList = new GeometryMaterialListClass();

    ??????????????? //向材質列表添加材質

    materialList.AddMaterial(texture);

    ??????????????? //創建GeneralMultiPatchCreator對象

    ??????????????? IGeneralMultiPatchCreator multiPatchCreator = new GeneralMultiPatchCreatorClass();

    multiPatchCreator.Init(4, 1, false, false, false, 4, materialList);

    ??????????????? //設置Part:可以使三角扇或環

    multiPatchCreator.SetPatchType(0, esriPatchType.esriPatchTypeTriangleStrip);

    multiPatchCreator.SetMaterialIndex(0, 0);

    multiPatchCreator.SetPatchPointIndex(0, 0);

    multiPatchCreator.SetPatchTexturePointIndex(0, 0);

    ??????????????? //創建真實points.

    ??????????????? WKSPointZ upperLeft = new WKSPointZ();

    ??????????????? WKSPointZ lowerLeft = new WKSPointZ();

    ??????????????? WKSPointZ upperRight = new WKSPointZ();

    ??????????????? WKSPointZ lowerRight = new WKSPointZ();

    upperLeft.X = 0;

    upperLeft.Y = 0;

    upperLeft.Z = 0;

    upperRight.X = 300;

    upperRight.Y = 0;

    upperRight.Z = 0;

    lowerLeft.X = 0;

    lowerLeft.Y = 0;

    lowerLeft.Z = -100;

    lowerRight.X = 300;

    lowerRight.Y = 1;

    lowerRight.Z = -100;

    multiPatchCreator.SetWKSPointZ(0, ref upperRight);

    multiPatchCreator.SetWKSPointZ(1, ref lowerRight);

    multiPatchCreator.SetWKSPointZ(2, ref upperLeft);

    multiPatchCreator.SetWKSPointZ(3, ref lowerLeft);

    ??????????????? //設置貼圖的點

    ??????????????? WKSPoint textureUpperLeft = new WKSPoint();

    ??????????????? WKSPoint textureLowerLeft = new WKSPoint();

    ??????????????? WKSPoint textureUpperRight = new WKSPoint();

    ??????????????? WKSPoint textureLowerRight = new WKSPoint();

    textureUpperLeft.X = 0; textureUpperLeft.Y = 0;

    textureUpperRight.X = 1; textureUpperRight.Y = 0;

    textureLowerLeft.X = 0; textureLowerLeft.Y = 1;

    textureLowerRight.X = 1; textureLowerRight.Y = 1;

    multiPatchCreator.SetTextureWKSPoint(0, ref textureUpperRight);

    multiPatchCreator.SetTextureWKSPoint(1, ref textureLowerRight);

    multiPatchCreator.SetTextureWKSPoint(2, ref textureUpperLeft);

    multiPatchCreator.SetTextureWKSPoint(3, ref textureLowerLeft);

    ??????????????? //創建MultiPatch對象

    ??????????????? IMultiPatch multiPatch = multiPatchCreator.CreateMultiPatch() as IMultiPatch;

    ??????????????? return multiPatch;

    }

    ??????????? catch (Exception Err)

    {

    ??????????????? MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

    }

    }

    2.4.9Geometry集合接口

    通過前邊對于具體的Geometry對象的介紹可知,除了Point對象之外,其他幾何對象都是通過其他幾何對象集合構建而成。如MultiPoint對象是點的集合,Path對象是Segment對象的集合,Polyline對象是Path對象的集合,Polygon對象是Ring對象的集合,Multipatch對象是Triangle Strip和Trangle Fan, Trangle,Ring對象的集合。

    ArcGIS Engine提供了三個主要的幾何圖形集合接口用于對幾何對象的操作,分別是IPointCollection,ISegmentCollection和IGeometryCollection,這些接口揭示出ArcGIS Engine的幾何模型的實質——它們是一種組合構成的模式,這種組合并不一定按照嚴格的層次結構組織。

    在前面介紹一些幾何對象的時候,也給大家演示了部分使用功能,這三個接口在程序開發中經常使用到,接下來簡單闡述以下這三個接口的使用方法。

    2.4.9.1IGeometryCollection接口IGeometryCollection接口被Polygon,Polyline, Multipoint, Multipatch, Trangle,T rangle Strip,Trangle Fan和GeometryBag所實現。IGeometryCollection接口提供的方法可以讓開發者對一個幾何對象的組成元素即子對象進行添加,改變和移除。例如:

    組成Polyline對象的子對象是Path對象。

    組成Polygon對象的子對象是Ring對象。

    組成Multipoint對象的子對象是Point對象。

    組成MultiPatch對象的子對象是TrangleFan TrangleStrip,Triangle或Ring對象。

    組成GeometryBag對象的是任何類型的幾何體對象,實際上GeometryBag是一個可以容納任何類型幾何對象的容器。

    IGeometryCollection的Geometry 屬性可以通過一個索引值返回一個組成該幾何對象的某個子對象,而GeometryCount返回組成該幾何對象的子對象的數目。

    IGeometry的AddGeometry和AddGeometries方法都用于向一個幾何對象添加子對象,它們的區別是前者一次只能添加一個幾何對象,而后者可以一次添加一個幾何對象數組。除此之外,AddGeometry方法可以將子對象添加到幾何的指定索引值的位置,而AddGeometries方法將子對象數組添加到集合的最后。

    在使用AddGeometry方法添加子對象到Polygon對象的過程中,如果子對象即Ring出現覆蓋現象,那么多邊形就沒有封閉或出現了包含關系,那么這個Polygon就不是簡單Polygon,因此通過IGometryCollection來創建一個Polygon時,需要使用ITopologicalOperator 的Simplify方法保證其有效性。

    通過IGeometryCollection創建一個Polygon對象的代碼片段如下:

    ///

    <summary>

    ///

    構造Polygon對象

    ///

    </summary>

    ///

    <param name="pRingList">Ring對象集合</param>

    ///

    <returns>返回一個Polygon對象</returns>

    private IPolygon ConstructorPolygon(List<IRing> pRingList)

    {

    try

    {

    //創建一個Polygon對象

    IGeometryCollection pGCollection = new PolygonClass();

    object o = Type.Missing;

    //遍歷Ring集合

    for(int i=0;i<pRingList.Count;i++)

    {

    //通過IGeometryCollection接口的AddGeometry方法向Polygon對象中添加Ring子對象

    pGCollection.AddGeometry(pRingList, ref o, ref o);

    }

    //QI至ITopologicalOperator

    ITopologicalOperator pTopological = pGCollection as ITopologicalOperator;

    //執行Simplify操作

    pTopological.Simplify();

    IPolygon pPolygon=pGCollection as IPolygon;

    //返回Polygon對象

    return pPolygon;

    }

    catch (Exception Err)

    {

    MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,,MessageBoxIcon.Information);

    return null;

    }

    }

    同樣可以通過IGeometryCollection的AddGeometryCollection方法可以將一個Polygon中的所有子對象Ring添加到另外一個多邊形中,這樣就實現了合并兩個多邊形對象為一個多邊形對象的功能,這非常有用。

    以下代碼片段演示如何合并兩個Polygon對象為一個Polgyone對象:

    ///

    <summary>

    ///

    合并兩個Polygon

    ///

    </summary>

    ///

    <param name="firstPolygon">第一個Polygon</param>

    ///

    <param name="SecondPolygon">第二個Polygon</param>

    ///

    <returns>返回合并后的Polygon</returns>

    private IPolygon MergePolygons(IPolygon firstPolygon, IPolygon SecondPolygon)

    {

    try

    {

    //創建一個Polygon對象

    IGeometryCollection pGCollection1=new PolygonClass();

    IGeometryCollection pGCollection2 = firstPolygon as IGeometryCollection;

    IGeometryCollection pGCollection3 = SecondPolygon as IGeometryCollection;

    //添加firstPolygon

    pGCollection1.AddGeometryCollection(pGCollection2);

    //添加SecondPolygon

    pGCollection1.AddGeometryCollection(pGCollection3);

    //QI至ITopologicalOperator

    ITopologicalOperator pTopological = pGCollection1 as ITopologicalOperator;

    //執行Simplify操作

    pTopological.Simplify();

    IPolygon pPolygon=pGCollection1 as IPolygon;

    //返回Polygon對象

    return pPolygon;

    }

    catch (Exception Err)

    {

    MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,,MessageBoxIcon.Information);

    return null;

    }

    }

    2.4.9.2ISegmentCollection接口

    ISegmentCollection接口被Path,Ring,Polyline和Polygon四個類所實現,它們被稱作是Segment集合對象,使用這個接口可以處理組成Segment集合對象中的每一個子Segment對象。使用ISegmentCollection接口可以為一個Segment集合對象添加,插入,刪除Segment子對象。ISegmentCollection接口SetCircle和SetRectangle方法提供了一種簡單不需要添加Segment的情況下構建一個完成的Path,Ring,Polyline和Polygon的方法。

    2.4.9.3IPointCollection接口

    IPointCollection可以被多個幾何對象類所實現,這些對象都是由多個點構成如:Mullipoint,Path,Ring,Polyline,Polygon,TriangleFan,TrangleStrip,Trangle,Multipatch等,它們都可以稱作PointCollection對象,通過IPointCollection接口定義的方法可以獲取,添加,插入,查詢,移除幾何對象中的某個頂點。同以上兩個接口一樣它也定義了操作一個點集合對象的方法,例如通過AddPoint方法可以向PointCollection對象中的特定索引位添加一個點對象,如果不指定位置,則添加到最后。通過IPointCollection的Point屬性通過頂點索引可以得到某一頂點。

    在本章節最后的Demo 實例將為大家演示IPointCollection提供的功能。

    2.4.10幾何對象總結

    在Geometry模型中的幾何對象分為兩種類型,一類是用來直接構建要素類的稱為高級幾何對象,一類用來構建高級幾何對象相對低一級的幾何對象成為構建幾何對象如下表所示:

    幾何對象名稱

    所屬類別

    構成子幾何對象

    用于創建和編輯的接口

    Polyline

    高級

    Path

    IGeometryCollection,

    IPointCollection

    Polygon

    高級

    Ring

    IGeometryCollection,

    IPointCollection

    MultiPoint

    高級

    Point

    IGeometryCollection,

    IPointCollection

    MultiPatch

    高級

    TrangleFan,Ring TrangleStrip ,Trangle,

    IGeometryCollection,

    IPointCollection

    Ring

    低級

    Segment

    ISegmentCollection,

    IPointCollection

    Path

    低級

    Segment

    ISegmentCollection,

    IPointCollection

    Segment

    低級

    Point

    IPoint,ILine, ICurve

    TriangleFan

    低級

    Point

    IGeometryCollection,

    IPointCollection

    TriangleStrip

    低級

    Point

    IGeometryCollection,

    IPointCollection

    Triangle

    低級

    Point

    IGeometryCollection,

    IPointCollection

    Point

    高級/低級

    IPoint

    2.5 空間參考

    2.5.1空間參考簡介

    空間參考(Spatial Reference)是GIS數據的骨骼框架,能夠將我們的數據定位到相應的位置,為地圖中的每一點提供準確的坐標。 在同一個地圖上顯示的地圖數據的空間參考必須是一致的,如果兩個圖層的空間參考不一致,往往會導致兩幅地圖無法正確拼合,因此開發一個GIS系統時,為數據選擇正確的空間參考非常重要。

    ArcGIS Engine提供了一系列對象供開發者管理GIS系統的坐標系統。對大部分開發者而言了解ProjectedCoordinateSystem, GeographicCoordinateSystem, SpatialReference Environment這三個組件類是非常有必要的,對于高級開發者而言,可能需要自定義坐標系統可以使用這些對象Projection,Datum,AngularUnit,Spheriod,PrimeMeridian和GeoTransformation等。

    2.5.2修改空間參考

    以下代碼片段演示了如何改變一個圖層的空間參考。

  • /// <summary>
  • /// 改變圖層的空間參考
  • /// </summary>
  • /// <param name="pFeatureLayer">圖層</param>
  • /// <param name="pGeoType">空間參考類型</param>
  • private void ChangeLayerRef(IFeatureLayer pFeatureLayer, int gcsType)
  • {
  • try
  • {
  • IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
  • //QI到IGeoDataset
  • IGeoDataset pGeoDataset = pFeatureClass as IGeoDataset;
  • //QI到IGeoDatasetSchemaEdit
  • IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = pGeoDataset as IGeoDatasetSchemaEdit;
  • if (pGeoDatasetSchemaEdit.CanAlterSpatialReference == true)
  • {
  • //創建SpatialReferenceEnvironmentClass對象
  • ISpatialReferenceFactory2 pSpaRefFactory = new SpatialReferenceEnvironmentClass();
  • //創建地理坐標系對象
  • IGeographicCoordinateSystem pNewGeoSys = pSpaRefFactory.CreateGeographicCoordinateSystem(gcsType);//4214代表Beijing1954
  • pGeoDatasetSchemaEdit.AlterSpatialReference(pNewGeoSys);
  • }
  • }
  • catch (Exception Err)
  • {
  • MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • }
  • }
  • ArcGIS Engine基礎開發教程(3)——學習地圖和地圖布局

    轉載自: http://bbs.esrichina-bj.cn/ESRI/thread-46577-1-1.html

    本章是ArcGIS Engine基礎開發教程的第三章,主要給大家大致講解了,地圖和地圖布局的相關對象。這些對象非常重要,如果這些基本對象都不熟悉就開始搞ArcGIS Engine開發是不科學的也走不遠的。

    3地圖和地圖布局

    3.1地圖

    3.1.1Map對象

    Map對象是ArcGIS Engine的主要對象,本章將給大家介紹地圖組成結構,如何創建地圖,如何對組成地圖的對象進行操作,在介紹這些內容時盡量結合ArcMap學習效果會更好。

    在Map對象上能顯示的圖形有兩類一類是地理數據,一類是元素。地理數據包括矢量類型的要素數據,柵格數據,Tin等表面數據等,這些數據都保存在Geodatabase或數據文件如shapefile中,它們是用于GIS分析制圖的源數據;

    而元素是另一種可以顯示在Map上的對象,它分為兩部分一類是圖形元素,一類是框架元素,圖形元素可以顯示出來,而框架元素充當了“容器”的角色。在ArcMap中可以使用“Draw”工具在Map上直接繪制一個矩形,圓形,文本等對象,在布局視圖上也可以給地圖添加指北針,圖例,比例尺等圖形對象,這些都是圖形元素。

    在ArcMap中Map對象是由MXDocument對象的MapFrame對象管理,MapFrame是一個框架元素。

    Map對象有雙重身份,一方面是數據的管理容器,可以加載地理數據和圖形元素,扮演了數據管理器的角色,另一方面它又可以讓用戶看到這些數據即扮演了數據顯示器的角色,當加載數據到Map對象的時候,Map對象是數據的管理者;當改變視圖范圍,刷新地圖的時候它是數據的顯示者。

    Map對象主要實現的接口由IMap, IGraphicContainer, IActiveView, IMapBookmarks等接口。

    IMap接口主要用于管理Map對象中的Layer對象,要素選擇集對象,MapSourround對象,空間參考等對象。

    Map對象可以顯示圖形元素(Graphics Element),Map對象通過IGraphicsContainer接口來管理這些元素對象,包括圖形元素和框架元素。IGraphicsContainer返回的是Map對象中處于活動狀態的Graphics layer引用指針,它可以是一個Basicgraphicslayer,也可以是CompositeGraphicsLayer中的一個圖層,或者是一個FDOGraphicsLayer注記圖層。

    以下代碼片段演示如何添加一個Element到Map上:

  • ?? ///
  • <summary>
  • ///添加臨時元素到地圖窗口上
  • ///</summary>
  • ///<param name="pMapCtrl">地圖控件</param>
  • ///<param name="pEle">單個元素</param>
  • ///<param name="pEleColl">元素集合</param>
  • public static void AddTempElement(AxMapControl pMapCtrl, IElement pEle, IElementCollection pEleColl)
  • {
  • try
  • {
  • IMap pMap = pMapCtrl.Map;
  • IGraphicsContainer pGCs = pMap as IGraphicsContainer;
  • if (pEle != null)
  • pGCs.AddElement(pEle, 0);
  • if (pEleColl != null)
  • ?? if (pEleColl.Count > 0)
  • ????? pGCs.AddElements(pEleColl, 0);
  • ????? IActiveView pAV = (IActiveView)pMap;
  • ???? //需要刷新才能即時顯示
  • ??? pAV.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, pAV.Extent);
  • }
  • catch (Exception Err)
  • {
  • MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • }
  • }
  • IActiveView接口定義了Map對象的數據顯示功能。使用該接口可以改變視圖的范圍,刷新視圖。

    IActiveView的PartialRefresh(esriViewGeography, pLayer, null)用于刷新指定圖層:

    IActiveView的PartialRefresh(esriViewGeography, null, null) 用于刷新刷新所有圖層:

    IActiveView的PartialRefresh(esriViewGeoSelection, null, null) 用于刷新所選擇的對象:

    IActiveView的PartialRefresh(esriViewGraphics, null, null) 用于刷新圖形元素:

    IActiveView的PartialRefresh(esriViewGraphics, pElement, null) 用于刷新指定圖形元素

    IActiveView的PartialRefresh(esriViewGraphics, null, null) 用于刷新所有圖形元素

    IActiveView的PartialRefresh(esriViewGraphicSelection, null, null)用于刷新所選擇的圖元。

    IMapBookmark接口用于管理所有的空間書簽對象。

    3.1.2圖層對象

    Map對象可以裝載地理數據,這些數據是以圖層的形式加載到地圖對象上的,圖層對象Layer作為一個數據的“中介”存在,它本身沒有轉載地理數據,而僅僅是獲得了數據的引用,用于管理數據源的連接。地理數據始終保存在Geodatabase或者地理數據文件中。

    由于地理數據的類型多樣,所以Layer類也擁有眾多子類(具體查看幫助),接下來主要給大家介紹要素圖層—FeatureLayer對象。

    3.1.3FeatureLayer對象

    FeatureLayer類實現的常用主要接口如下圖所示:IFeatureLayer,IFeatureLayerDefinition,FeatureSelection,IGeoDataset,IGeoFeatureLayer,IIdentify,ILayerEffects。

    IFeatureLayer接口主要用于設置要素圖層的數據源(FeatureClass), IFeatureLayer的DataSourceType獲取FeatureLayer對象的數據源類型。此外通過IFeatureLayer的Search方法可以查詢要素圖層上符號某一條件的要素集。

    IGeoFeatureLayer接口繼承了ILayer和IFeatureLayer兩個接口,用于控制要素圖層的符號化和標注等。

    IGeoDataset接口僅有兩個屬性,它們用于管理地理要素集。Extent可以返回當前數據集的范圍,是一個IEnvelope類型的對象;

    SpatialReference屬性則可以讓用戶獲得這個數據集的空間參考。

    IFeatureSelection接口提供管理一個圖層中的要素的選擇集的方法和屬性。

    以下代碼片段演示如何獲取要素圖層符合條件獲取選擇集

  • /// /// <summary>
  • ??????? /// 獲取要素圖層符合條件獲取選擇集
  • ??????? /// </summary>
  • ??????? /// <param name="pFeatureLayer">要素圖層</param>
  • ??????? /// <param name="WhereClause">過濾條件</param>
  • ??????? /// <returns>返回選擇集</returns>
  • ??????? private IFeatureSelection SelectLayersFeatures(IFeatureLayer pFeatureLayer, string WhereClause)
  • ??????? {
  • ??????????? IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
  • ??????????? if (pFeatureSelection == null) return null;
  • ??????????? IQueryFilter pQueryFilter = new QueryFilterClass();
  • ??????????? pQueryFilter.WhereClause = WhereClause;
  • ??????????? pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
  • ??????????? return pFeatureSelection;
  • ??????? }
  • IFeatureLayerDefinition接口定義了CreateSelectionLayer方法,可以將一個圖層選擇集中的要素轉換為一個單獨的要素圖層。

    3.1.4矢量圖層操作實例

    以下代碼片段演示按行政區加載圖層數據的功能,以此理解IFeatureLayerDefinition的CreateSelectionLayer方法的使用。

    比方說整個國土資源部有某一類型專題數據有若干圖層,每個圖層數據的范圍是整個中國,這時國土資源部開發一套系統可能有這個需求,每個省只能加載本省的數據。以下函數即為按按行政區范圍創建行政區范圍的圖層。

    比方說我想獲取河南省的數據只需傳入行政區圖層中河南省圖元的Geometry即可。另外如果如果遇到行政區層必須用esriSpatialRelEnum. esriSpatialRelContains這個參數,否則行政區這個圖層就不能只獲取河南這個省份,它會把河南省的周圍省份,河北,湖北,安徽,陜西,山東,山西等省份的圖元也添加創建到新圖層。

  • ???????? /// <summary>
  • ??????? /// 按行政區范圍創建行政區范圍的圖層
  • ??????? /// </summary>
  • ??????? /// <param name="pFeatureLayer">源數據圖層</param>
  • ??????? /// <param name="pGeometry">行政區范圍</param>
  • ??????? /// <param name="bXZQ">圖層是否為行政區</param>
  • ??????? /// <returns>新創建的圖層</returns>
  • ??????? private IFeatureLayer? GetSelectionLayer(IFeatureLayer pFeatureLayer, IGeometry pGeometry,bool bXZQ)
  • ??????? {
  • ??????????? try
  • ??????????? {
  • ??????????????? if (pFeatureLayer != null && pGeometry != null)
  • ??????????????? {
  • ??????????????????? IQueryFilter pQueryFilter;
  • ??????????????????? ISpatialFilter pSpatialFilter = new SpatialFilterClass();
  • ??????????????????? IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
  • ??????????????????? pSpatialFilter.GeometryField = pFeatureLayer.FeatureClass.ShapeFieldName;
  • ??????????????????? pFeatureSelection.Clear();??????????????????
  • ??????????????????? if (!bXZQ)
  • ??????????????????? {
  • ??????????????????????? pSpatialFilter.Geometry = pGeometry;?????????????????????
  • ??????????????????????? pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
  • ??????????????????????? pQueryFilter = pSpatialFilter;???????????????????????
  • ??????????????????????? pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
  • ??????????????????? }
  • ??????????????????? else
  • ??????????????????? {
  • ??????????????????????? pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
  • ??????????????????????? pQueryFilter = pSpatialFilter;???????????????????????
  • ??????????????????????? if(pGeometry is IGeometryCollection)
  • ??????????????????????? {
  • ??????????????????????????? for (int i = 0; i < (pGeometry as IGeometryCollection).GeometryCount; i++)
  • ??????????????????????????? {
  • ??????????????????????????????? pSpatialFilter.Geometry = (pGeometry as IGeometryCollection).get_Geometry(i);
  • ??????????????????????????????? pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultAdd, false);
  • ??????????????????????????? }
  • ??????????????????????? }
  • ??????????????????? }?????????????????
  • ??????????????????? IFeatureLayerDefinition pFLDefinition = pFeatureLayer as IFeatureLayerDefinition;
  • ??????????????????? IFeatureLayer pNewFeatureLayer = pFLDefinition.CreateSelectionLayer(pFeatureLayer.Name ,true, null, null);
  • ??????????????????? pNewFeatureLayer.MaximumScale = pFeatureLayer.MaximumScale;
  • ??????????????????? pNewFeatureLayer.MinimumScale = pFeatureLayer.MinimumScale;
  • ??????????????????? pNewFeatureLayer.Selectable = pFeatureLayer.Selectable;
  • ??????????????????? pNewFeatureLayer.Visible = pFeatureLayer.Visible;
  • ??????????????????? pNewFeatureLayer.ScaleSymbols = pFeatureLayer.ScaleSymbols;
  • ??????????????????? return pNewFeatureLayer;
  • ??????????????? }
  • ??????????????? else
  • ??????????????? {
  • ??????????????????? return null;
  • ??????????????? }
  • ??????????? }
  • ??????????? catch (Exception Err)
  • ??????????? {
  • ??????????????? MessageBox.Show(Err.Message, "獲取SelectionLayer", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • ??????????????? return null;
  • ??????????? }
  • ??????? }
  • IIdentify接口定義了獲得要素圖層單個要素的屬性的

    ILayerFields接口可以直接獲取一個要素圖層的要素類字段集合

    ILayerEffects接口用來設置一個要素圖層的透明度,對比度,對比度。以下代碼片段演示如何設置要素圖層特效:

  • ? /// <summary>
  • ??????? /// 設置圖層特效
  • ??????? /// </summary>
  • ??????? /// <param name="pFeatureLayer">要素圖層</param>
  • ??????? /// <param name="brightness">亮度</param>
  • ??????? /// <param name="contrast">對比度</param>
  • ??????? /// <param name="transparency">透明度</param>
  • ??????? private static void SetLayerEffects(IFeatureLayer pFeatureLayer, short brightness, short contrast, short transparency)
  • ??????? {
  • ??????????? ILayerEffects pLayerEffect = pFeatureLayer as ILayerEffects;
  • ??????????? pLayerEffect.Brightness = brightness;
  • ??????????? pLayerEffect.Contrast = contrast;
  • ??????????? pLayerEffect.Transparency = transparency;
  • ??????? }
  • 3.2地圖布局

    3.2.1PageLayout對象

    PageLayout用以顯示地圖數據,并通過對地圖數據進行整飾以便對地圖打印輸出滿足不同行業對GIS出圖功能的需求。PageLayout和Map這兩個對象看起來非常相似,它們都是視圖對象,可以顯示地圖;也都是圖形元素的容器,可以容納圖形元素(Graphics Element)。但是所能夠保存的圖形類型卻是有差別的。PageLayout除了保存圖形元素外,還可以保存諸如MapFrame的框架元素(Frame Element)。PageLayout控件上的Map對象被PageLayout的MapFrame對象所管理的。

    PageLayout類主要實現了IPageLayout接口,它定義了用于修改頁面版式(layout)的方法和屬性。

    IPageLayout的方法ZoomToWhole方法可以讓PageLayout以最大尺寸顯示;

    IPageLayout的ZoomToPercent方法可以按照輸入的比例顯示;

    IPageLayout的ZoomToWidth方法可以讓視圖顯示的范圍匹配控件對象的寬度。

    IPageLayout的Page屬性用以獲取Page對象

    IPageLayout的RulerSettings屬性用以獲取RulerSettings對象

    IPageLayout的HorizontalSnapGuides和VerticalSnapGuides屬性用以獲取SnapGuides對象

    如下圖所示:

    3.2.2Page對象

     Page對象主要來管理PageLayout對象中的頁面,它用來加載地理數據,但不提供分析和查詢功能。Page類的主要接口是IPage,它除了用于管理Page的顏色,尺寸和方向,還可以管理邊框類型和打印區域等。例如通過IPage的FromID可以直接設置紙張大小類型(A4,A3等)。 

    3.2.3SnapGrid對象

    SnapGrid是PageLayout上用于擺放元素而設置的輔助點如圖所示,這些點有規則呈網狀排列,便于使用者對其元素,它可以直接通過IPageLayout的SnapGrid屬性獲得當前PageLayout使用的SnapGrid對象的引用。

    SnapGrid類主要實現了ISnapGrid接口用于設置SnapGrid對象的屬性,ISnapGrid的HorizontalSpacing 和VerticalSpacing屬性用于設置網點之間的水平距離和垂直距離,ISnapGrid的Visible屬性決定了這些網點是否可見,Draw方法將用于在Page對象上繪制一個SnapGrid對象。

    以下代碼片段演示如何在設置PageLayout控件上SnapGrid:

  • ?????? /// <summary>
  • ??????? /// 設置PageLayout上SnapGrid
  • ??????? /// </summary>
  • ??????? /// <param name="pPageLayout">PangeLayout對象</param>
  • ??????? private void SetwSnapGridOnPageLayout(IPageLayout pPageLayout)
  • ??????? {
  • ?????????? if(pPageLayout !=null)
  • ?????????? {
  • ?????????? ISnapGrid pSnapGrid=pPageLayout.SnapGrid;
  • ?????????? pSnapGrid.VerticalSpacing =2;
  • ?????????? pSnapGrid.HorizontalSpacing =2;
  • ?????????? pSnapGrid.IsVisible =true;
  • ?????????? IActiveView pActiveView=pPageLayout as IActiveView;
  • ?????????? pActiveView.Refresh();
  • ?????????? }???????????
  • ??? }
  • 3.2.4SnapGuides對象

     SnapGuides是為了更好的放置地圖而在Pagelayout上設置的輔助線如圖所示,SnapGuides分為兩種類型一種是水平輔助線通過IPageLayout的HorizontalSnapGuides屬性獲得,另一種是垂直輔助線通過IPageLayout的VerticalSnapGuides屬性獲得。每個SnapGuides都管理著一個Guide集合,即不同的類型的輔助線可以同時存在多條。

    SnapGuides都實現了ISnapGuides接口,它定義了管理SnapGuide的屬性和方法。

    ISnapGuides的AreVisible設定SnapGuides是否可見。

    ISnapGuides的GuideCount屬性返回一個SnapGuides對象中的Guide的個數。而使用

    ISnapGuides的Guide屬性可以按索引值獲得某個具體的Guide對象。

    ISnapGuides的AddGuide方法將一個Guide放在指定位置上。

    ISnapGuides的RemoveAllGuides和RemoveGuide方法分別可以清楚所有的Guide和按索引值清除Guide.

    以下代碼片段演示如何為PageLayout對象添加輔助線:

  • ?????? /// <summary>
  • ??????? /// 向PageLayout上指定位置添加輔助線
  • ??????? /// </summary>
  • ??????? /// <param name="pPageLayout">PageLayout對象</param>
  • ??????? /// <param name="pPoistion">位置</param>
  • ??????? /// <param name="bHorizontal">true為水平方向輔助線,False為垂直方向輔助線</param>
  • ??????? private void AddGuideOnPageLayout(IPageLayout pPageLayout,double pPoistion,bool bHorizontal)
  • ??????? {
  • ?????????? try
  • ?????????? {
  • ????????????? if(pPageLayout !=null)
  • ????????????? {
  • ????????????????? ISnapGuides pSnapGuides=null;
  • ????????????????? //如果是水平輔助線
  • ????????????????? if(bHorizontal)
  • ????????????????? {
  • ???????????????????? pSnapGuides=pPageLayout.HorizontalSnapGuides;
  • ????????????????? }
  • ????????????????? //如果是垂直輔助線
  • ????????????????? else
  • ????????????????? {
  • ???????????????????? pSnapGuides=pPageLayout.VerticalSnapGuides;
  • ????????????????? }
  • ????????????????? if(pSnapGuides!=null)
  • ????????????????? {
  • ????????????????????? //向PageLayout上添加輔助線
  • ???????????????????? pSnapGuides.AddGuide(pPoistion);
  • ????????????????? }
  • ????????????? }
  • ?????????? }
  • ??????????? catch(Exception Err)
  • ?????????? {
  • ????????????? MessageBox.Show(Err.Message,"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • ??????????? }
  • }
  • 3.2.5RulerSettings對象

    標尺對象是為了輔助圖形元素的放置而出現在PageLayout對象上方和左方的輔助尺如圖所示,通過IPageLayout的RulerSettings屬性可以獲得PageLayout上的RulerSettings對象.

    RulerSettings對象主要實現了IRulerSettings接口它只有一個SmallestDivision屬性用于設置RulerSettings對象的最小刻度值屬性。

    3.2.6Element對象

    在Map對象和PageLayout對象顯示的數據除了地理數據之外,另一種即為元素數據如下圖5所示。

    Element是一個非常龐大復雜的對象集合如圖6所示,它主要分為兩大部分:圖形元素(GraphicElement)和框架元素(Frame Element)。

    圖形元素(GraphicElement)包LineElement, MarkerElement, TextElement, GroupElement, FillshapElement,PictureElement,MultiPatchElement等。它們都是作為圖形的形式而存在,在地圖視圖或者PageLayout視圖上時可見的。框架元素(Frame Element)包括MapFrameElement, MapSurroundElement等它們是作為不可見的容器而存在的。

    Map對象或者PageLayout對象可以通過IGraphicsContainer接口來管理這些元素,使用IGraphicsContainer接口可以添加,刪除和更新位于Map或PageLayout上的元素。使用GroupElement對象還可以將多個元素編組為單個實體來給用戶使用。

    IElement是所有圖形元素(GraphicElement)和框架元素(Frame Element)都實現的接口,通過IElement接口可以確定Element對象的Geometry屬性,同時IElment接口也提供了用于查找和繪制元素的方法。Element是個抽象類,在開發中必須明確指定使用的Element的類型。另外IElement和ILineElement, ITextElement等并不是父子關系,后者沒有Geometry屬性。

    3.2.7MapGrid對象

    MapGrid是布局視圖中的一系列參考線和參考點用來幫助地圖使用者快速地確定地圖要素的位置如圖7中的公里格網,MapGridBorder,MapGridLabel。MapGrid等。MapGrid對象由MapGrids來管理,一個MapGrids可以包含多個MapGrid對象。

    MapGrid是一個抽象類,它的子類有MeasuredGrid,IndexGrid,MgrsGrid,Graticule和CustomOverlayGrid五種,這些子類的對象由MapGridFactory對象創建。MapGride對象模型圖如圖8和圖9所示

  • ????????? /// <summary>
  • ??????? /// 為PageLayout對象添加格網對象
  • ??????? /// </summary>
  • ??????? /// <param name="pPageLayout"></param>
  • ??????? private void AddMeasuredGridToPageLayout(IPageLayout pPageLayout)
  • ??????? {
  • ????????? try
  • ????????? {
  • ?????????????? //獲取MapFrame對象
  • ??????????????? IActiveView pAcitiveView= pPageLayout as IActiveView;
  • ??????????????? IMap pMap = pAcitiveView.FocusMap;?????????????????????
  • ??????????????? IGraphicsContainer pGraphicsContainer=pAcitiveView as IGraphicsContainer;
  • ??????????????? IMapFrame pMapFrame = pGraphicsContainer.FindFrame(pMap) as IMapFrame;
  • ??????????????? IMapGrids pMapGrids = pMapFrame as IMapGrids;
  • ?????????????? //創建一個MeasuredGrid對象
  • ??????????????? IMeasuredGrid pMeasureGrid = new MeasuredGridClass();
  • ??????????????? IMapGrid? pMapGrid = pMeasureGrid as IMapGrid;
  • ??????????????? pMeasureGrid.FixedOrigin = true;
  • ??????????????? pMeasureGrid.Units = pMap.MapUnits;
  • ??????????????? pMeasureGrid.XIntervalSize = 1000;
  • ??????????????? pMeasureGrid.YIntervalSize = 1000;
  • ??????????????? pMeasureGrid.XOrigin = -180;
  • ??????????????? pMeasureGrid.YOrigin = -90;
  • ??????????????? //設置MeasuredGride投影屬性
  • ??????????????? IProjectedGrid pProGrid = pMeasureGrid as IProjectedGrid;
  • ??????????????? pProGrid.SpatialReference = pMap.SpatialReference;
  • ??????????????? pMapGrid.Name = "Measured Grid";
  • ?????????????? //創建一個CalibratedMapGridBorder對象并設置為pMapGrid的Border屬性
  • ??????????????? ICalibratedMapGridBorder pCalibratedBorder = new CalibratedMapGridBorderClass();
  • ??????????????? pCalibratedBorder.BackgroundColor = GetRgbColor(255, 255, 255);
  • ??????????????? pCalibratedBorder.ForegroundColor = GetRgbColor(0, 0, 0);
  • ??????????????? pCalibratedBorder.BorderWidth = 0.1;
  • ??????????????? pCalibratedBorder.Interval = 72;
  • ??????????????? pCalibratedBorder.Alternating = true;
  • ??????????????? pMapGrid.Border = pCalibratedBorder as IMapGridBorder;
  • ?????????????? //創建一個FormattedGridLabel對象
  • ??????????????? IFormattedGridLabel pFormattedGridLabel = new FormattedGridLabelClass();
  • ??????????????? IGridLabel pGridLabel = pFormattedGridLabel as IGridLabel;
  • ??????????????? stdole.StdFont pFont = new stdole.StdFont();
  • ??????????????? pFont.Name = "Arial";
  • ??????????????? pFont.Size = 6;
  • ??????????????? pGridLabel.Font = pFont as stdole.IFontDisp; ;
  • ??????????????? pGridLabel.Color = GetRgbColor(0, 0, 0);
  • ??????????????? pGridLabel.LabelOffset = 4;
  • ??????????????? pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisLeft, false);
  • ??????????????? pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisRight, false);
  • ??????????????? INumericFormat pNumericFormat = new NumericFormatClass();
  • ??????????????? pNumericFormat.AlignmentOption = esriNumericAlignmentEnum.esriAlignRight;
  • ??????????????? pNumericFormat.RoundingOption = esriRoundingOptionEnum.esriRoundNumberOfSignificantDigits;
  • ??????????????? pNumericFormat.RoundingValue = 0;
  • ??????????????? pNumericFormat.ShowPlusSign = false;???????????????
  • ??????????????? pNumericFormat.ZeroPad = true;
  • ?????????????? pFormattedGridLabel.Format = pNumericFormat as INumberFormat;
  • ??????????????? //設置pMapGrid的LabelFormat屬性
  • ??????????????? pMapGrid.LabelFormat = pGridLabel;
  • ?????????????? //添加格網
  • ??????????????? pMapGrids.AddMapGrid(pMapGrid);
  • ????????? }
  • ????????? catch(Exception Err)
  • ????????? {
  • ???????????? MessageBox.Show(Err.Message,"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • ????????? }
  • ??????? }
  • 3.2.8MapSurround對象

    MapSurround對象是與一個地圖對象關聯的用于修飾地圖的輔助圖形元素對象如圖所示。它的形狀或內容會隨著Map屬性的變化而自動改變。如Map視圖范圍改變后比例尺(ScaleBar)也會自動調整比例,比例尺文本(ScaleBarText)也會相應改變它的比例值。

    MapSurround對象由MapSurroundFrame 對象管理,所有的MapSurround對象添加在布局視圖上,每一個MapSurround對象可以通過IMap接口的MapSurrounds屬性的索引值所獲取。也可以通過IMap接口的MapSurroundCount來遍歷布局視圖上的所有MapSurround對象。

    所有的MapSurround對象都實現IMapSurround接口,使用IMapSurround接口的Name屬性可以獲得MapSurround對象的名稱,通過IMapSurround的FitToBound方法可以設置一個MapSurround對象的大小。

    同時MapSurround類也實現了IMapSurroundEvents接口,可以用來觸發MapSounrround相關事件如:AfterDraw,BeforeDraw,ContensChanged。

    下圖是MapSurround對象模型

    如下代碼演示如何為PageLayout添加Legend:

  • /// <summary>
  • ?????? /// 為PageLayout對象添加圖例對象
  • ?????? /// </summary>
  • ?????? /// <param name="pPageLayout">PageLayout對象</param>
  • ?????? /// <param name="pEnvelope">圖例添加的位置</param>
  • ?????? private void AddLegendToPageLayout(IPageLayout pPageLayout,IEnvelope pEnvelope)
  • ?????? {
  • ???????? try
  • ???????? {
  • ??????????? IActiveView pActiveView=pPageLayout as IActiveView;
  • ??????????? IMap pMap = pActiveView.FocusMap;?????????????????????
  • ??????????? IGraphicsContainer pGraphicsContainer=pActiveView as IGraphicsContainer;
  • ??????????? IMapFrame pMapFrame = pGraphicsContainer.FindFrame(pMap) as IMapFrame;
  • ??????????? UID pUID = new UID();
  • ??????????? pUID.Value = "{7A3F91E4-B9E3-11d1-8756-0000F8751720}";
  • ??????????? ISymbolBackground pSymbolBackground = new SymbolBackgroundClass();
  • ??????????? IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
  • ??????????? ILineSymbol pLineSymbol = new SimpleLineSymbolClass();
  • ??????????? pFillSymbol.Color = GetRgbColor(255, 255, 255);
  • ??????????? pLineSymbol.Color = GetRgbColor(255, 255, 255);
  • ??????????? pFillSymbol.Outline = pLineSymbol;
  • ??????????? pSymbolBackground.FillSymbol = pFillSymbol;
  • ??????????? IMapSurroundFrame pMapSurroundFrame = pMapFrame.CreateSurroundFrame(pUID, null);
  • ??????????? pMapSurroundFrame.Background = pSymbolBackground;
  • ??????????? IElement pElement = pMapSurroundFrame as IElement;
  • ??????????? pElement.Geometry = pEnvelope;
  • ??????????? IMapSurround pMapSurround = pMapSurroundFrame.MapSurround;
  • ??????????? ILegend pLegend = pMapSurround as ILegend;
  • ??????????? pLegend.ClearItems();
  • ??????????? pLegend.Title = "圖例";
  • ??????????? ITextSymbol pTextSymbol = new TextSymbolClass();
  • ??????????? pTextSymbol.Size = 10;
  • ??????????? pTextSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHALeft;
  • ??????????? ILegendItem pLegendItem = null;
  • ??????????? for (int i = 0; i < pActiveView.FocusMap.LayerCount; i++)
  • ??????????? {
  • ??????????????? ILayer pLayer = pActiveView.FocusMap.get_Layer(i);
  • ??????????????? if (pLayer is IFeatureLayer)
  • ??????????????? {
  • ??????????????????? IFeatureLayer pFLayer = pLayer as IFeatureLayer;
  • ??????????????????? IFeatureClass pFeatureClass = pFLayer.FeatureClass;
  • ??????????????????? if (pFeatureClass.FeatureType == esriFeatureType.esriFTAnnotation)
  • ??????????????????? {
  • ??????????????????????? continue;
  • ??????????????????? }
  • ??????????????????? else
  • ??????????????????? {
  • ??????????????????????? pLegendItem = new HorizontalLegendItemClass();
  • ??????????????????????? pLegendItem.Layer = pLayer;
  • ??????????????????????? pLegendItem.Columns = 1;
  • ??????????????????????? pLegendItem.ShowDescriptions = false;
  • ??????????????????????? pLegendItem.ShowHeading = false;
  • ??????????????????????? pLegendItem.ShowLabels = true;
  • ??????????????????????? pLegendItem.LayerNameSymbol = pTextSymbol;
  • ??????????????????????? pLegend.AddItem(pLegendItem);
  • ??????????????????? }
  • ??????????????? }
  • ??????????? }????????????????????????
  • ???????? }????????
  • ???????? catch(Exception Err)
  • ???????? {
  • ???????? }
  • ?????? }
  • 結果如下圖所示:

    ArcGIS Engine基礎開發教程(4)— 學習圖層符號化

    轉載自:http://bbs.esrichina-bj.cn/ESRI/thread-46784-1-1.html

    地圖符號不僅具有確定的空間位置以及空間地物的性質:例如在一個城市管線系統中不同的線符號表示不同類型的管線,不同的點符號表示不同類型的設備等等,而且地圖符號也可以表達與空間位置相關的豐富信息:例如人口密度符號可以直觀的表示人口數量的空間分布情況。所以地圖數據的符號化決定著地圖以何種“面目”展現給地圖的使用者,自此空間數據的符號化對GIS開發有非常重要的意義。

    ArcGIS Engine9.3提供了豐富的控件和組件庫來實現圖層符號化的相關功能。ArcGIS Engine9.3提供了SymbologyControl控件用于顯示ArcGIS符號庫中的符號(關于ArcGIS符號請查找相關文檔),而組件庫中的組件對象分為Color , Symbol, Renderer三大系列,圖層符號化就是通過多個組件對象來合作完成。

    4.1目標

    1.熟悉ArcGIS Engine符號化之Color(顏色)體系

    2.熟悉ArcGIS Engine符號化之Symbol(符號)體系

    3.熟悉ArcGIS Engine符號化之Renderer( 渲染)體系

    4.利用ESRI自帶的符號庫進行符號化圖層

    4.2準備工作

    1.IDE:Visual Studio 2005/2008

    2.ArcGIS Engine Developer kit 9.3

    3.自造一份用于唯一值符號化的點數據(文章內有說明)

    4.3符號化Color(顏色)體系

    4.3.1ArcGIS顏色模型

    ArcGIS提供Color(顏色)的模型有多種分別是:

    • RGB顏色模型:最常用,所有顏色都是通過紅色(Red)、綠色(Green)、藍色(Blue)這三原色的混合來顯示。

    • CMY顏色模型:青(Cyan)、洋紅(Magenta)和黃(Yellow)三種顏色的簡寫,是相減混色模式,用這種方法產生的顏色之所以稱為相減色,主要用于印刷中。

    • HSV顏色模型:色彩(H),純度(S),明度(V)。

    • Gray模型:沒有彩色的,灰度圖像由8位信息組成,并使用256級的灰色來模擬顏色層次。

    • HLS模型: Hue(色相)、Luminance(亮度)、Saturation(飽和度)。

    ????? 如上圖所示Color對象是一個抽象類,它包括5個子類:它有5個顏色子類,即CmykColor、RGBColor、HSVColor、HLSColor和GrayColor,它們可以使用IColor接口定義的方法設置顏色對象的基本屬性。在ArcGIS engine中最常使用的兩種顏色模型是RGB和HSV,RGB類實現IRgbColor接口,而HSV類則實現IHsvColor接口,兩個接口分別定義了設置一個RGBColor對象和RGBColor對象需傳遞的值。

    接下來以一個函數來通過R,G,B值來構建一個RGBColor對象

    private IRgbColor GetRGB(int r,int g,int b)

    {

    IRgbColor pRgbColor= new RgbColorClass();//構建一個RgbColorClass

    pRgbColor.Red = r;//設置Red屬性

    pRgbColor.Green = g;//設置Green屬性pRgbColor.Blue = b;//設置Blue屬性

    return pRgbColor;

    }

    4.3.2ColorRamp對象

    在地圖符號化的過程中,需要的顏色常常不是一種,而是隨機或有序產生的一組顏色。如果對某一個圖層進行符號化需要上百種顏色如圖2所示,程序開發者肯定不能逐個產生出來。ArcGIS Engine提供了ColorRamp對象:

    ColorRamp類的對象可以產生顏色帶,這個類實現了IColorRamp接口,它定義了一系列顏色帶的屬性,如 Size(產生多少種顏色),Colors(顏色帶 IEnumColor)。

    ColorRamp類是一個抽象類,它包括4個子類分別是:RandomColorRamp(隨機顏色帶)、PresetColorRamp(預設顏色帶)、AlgorithmicColorRamp(起止顏色帶)、MultiPartColorRamp(疊加顏色帶),它們的說明如表一所示。

    表一

    RandomColorRamp

    使用HSV顏色模型來確定一串顏色

    PresetColorRamp

    預設的顏色模式,可存儲13種顏色

    AlgorithmicColorRamp

    用起始顏色、終止顏色確定一個顏色帶,起始、終止顏色使用HSV模型

    MultiPartColorRamp

    疊加產生顏色帶

    在GIS應用開發中用到比較多得是RandomColorRamp(隨機顏色帶)和AlgorithmicColorRamp(起止顏色帶)接下來詳細介紹一下這兩個顏色帶。

    AlgorithmicColorRamp是通過起止顏色來確定多個在這兩個顏色之間的色帶。AlgorithmicColorRamp類實現了兩個接口:IColorRamp和IAlgorithmicColorRamp,兩個接口之間是接口繼承關系,后者包含了前者所有的方法和屬性。

    4.3.3生成顏色帶實例

    ?? 接下來制作一個實例演示AlgorithmicColorRamp(起止顏色帶)的Demo:

    1.創建一個窗體,在窗體上添加5個Picturebox用于分別顯示產生的包含5個顏色的起始顏色帶中的顏色,如圖3所示

    2.在“生成顏色帶”Button的Click事件中生成顏色帶,代碼片段如下所示:

    private void button1_Click(object sender, EventArgs e)

    {

    //創建一個新AlgorithmicColorRampClass對象

    IAlgorithmicColorRamp algColorRamp = new AlgorithmicColorRampClass();

    //創建起始顏色對象

    IRgbColor startColor = new RgbColor();

    startColor.Red = 255;

    startColor.Green = 0;

    startColor.Blue = 0;

    //創建終止顏色對象

    IRgbColor endColor = new RgbColor();

    endColor.Red = 0;

    endColor.Green = 255;

    endColor.Blue = 0;

    //設置AlgorithmicColorRampClass的起止顏色屬性

    algColorRamp.ToColor = startColor;

    algColorRamp.FromColor = endColor;

    //設置梯度類型

    algColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;

    //設置顏色帶顏色數量

    algColorRamp.Size = 5;

    //創建顏色帶

    bool bture = true;

    algColorRamp.CreateRamp(out bture);

    //使用IEnumColors獲取顏色帶

    IEnumColors pEnumColors = null;

    pEnumColors = algColorRamp.Colors;

    //設置5個picturebox的背景色為產生顏色帶的5個顏色

    this.pictureBox1.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

    this.pictureBox2.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

    this.pictureBox3.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

    this.pictureBox4.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

    this.pictureBox5.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

    }

    運行點擊Button 結果如圖4所示:

    RandomColorRamp對象產生隨機顏色帶,RandomColorRamp也需要設定一個范圍,但是這個范圍是HSV顏色模型的,顏色將在這個范圍內隨機出現。 RandomColorRamp類實現了IRandomColorRamp接口

    以下是生成RandomColorRamp的代碼片段

    IRandomColorRamp pRandomColorRamp = new RandomColorRampClass();

    //** 制作一系列介于橘黃色和藍綠色之間的隨機顏色

    pRandomColorRamp.StartHue = 40;

    pRandomColorRamp.EndHue = 120;

    pRandomColorRamp.MinValue = 65;

    pRandomColorRamp.MaxValue = 90;

    pRandomColorRamp.MinSaturation = 25;

    pRandomColorRamp.MaxSaturation = 45;

    pRandomColorRamp.Size = 20;

    pRandomColorRamp.Seed = 23;

    bool bture = true;

    pRandomColorRamp.CreateRamp(out bture);

    IEnumColors pEnumColors = pRandomColorRamp.Colors

    //** 對pEnumColors進行操作

    4.4符號化Symbol(符號)體系

    ArcGIS Engine9.3為開發人員提供了32種符號,主要分為三大類符號MarkerSymbol(點符號)、 LineSymbol(線符號)和FillSymbol(填充符號)來繪制地理要素的幾何圖形。此外還有兩種特殊類型的符號:一種是TextSymbol用于文字標注;另一種是3D Chart符號,用于顯示餅圖等三維對象,如需詳細了解請查找幫助文檔。

    4.4.1MarkerSymbol對象

    MarkerSymbol用于修飾點對象的符號,它擁有十三個子類如表2所示,其中不同的子類可以產生不同類型的點符號。所有的MarkerSymbol類都實現了IMarkerSymbol接口,這個接口定義了標記符號的公共方法和屬性,如角度、顏色、大小和X,Y偏移量等。

    表二

    點符號類型

    描述

    ArrowMarkerSymbol

    預定義的肩頭符號

    BarChartSymbol

    柱狀圖符號

    CharacterMarker3DSymbol

    三維字體符號

    CharacterMarkerSymbol

    字體符號

    Marker3DSymbol

    3D 符號

    MultiLayerMarkerSymbol

    多個符號疊加產生新點符號

    PictureMarkerSymbol

    圖片符號(bmp或emf)

    PiechartSymbol

    餅圖符號

    SimpleMarker3DSymbol

    簡單3D符號

    SimpleMarkerSymbol

    簡單符號

    StackedChartSymbol

    堆疊符號

    TextMarkerSymbol

    文字符號用來符號化點??

    常用的有以下5種 類型:

    如何創建MarkerSymbol?接下來以SimpleMarkerSymbol構建為例演示如何創建一個點符號:

    //創建SimpleMarkerSymbolClass對象

    ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();

    //創建RgbColorClass對象為pSimpleMarkerSymbol設置顏色

    IRgbColor pRgbColor = new RgbColorClass();

    pRgbColor.Red = 255;

    pSimpleMarkerSymbol.Color = pRgbColor as IColor;

    //設置pSimpleMarkerSymbol對象的符號類型,選擇鉆石

    pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond;

    //設置pSimpleMarkerSymbol對象大小,設置為5

    pSimpleMarkerSymbol.Size = 5;

    //顯示外框線

    pSimpleMarkerSymbol.Outline = true;

    //為外框線設置顏色

    IRgbColor pLineRgbColor = new RgbColorClass();

    pLineRgbColor.Green = 255;

    pSimpleMarkerSymbol.OutlineColor = pLineRgbColor as IColor;

    //設置外框線的寬度

    pSimpleMarkerSymbol.OutlineSize = 1;

    如何使用這個符號,在接下來介紹Renderer對象的時候將為大家演示如何用創建的點符號去符號化一個圖層。

    4.4.2LineSymbol對象

    LineSymbol對象是用于修飾線型幾何對象的符號,它擁有八個子類如表3所示,其中不同的子類可以產生不同類型的線符號,所有的LineSymbol類都實現了ILineSymbol接口, ILineSymbol定義了兩個公共屬性:Color和Width。

    表三

    線符號類型

    描述

    CartographicLineSymbol

    實心或者虛線線符號

    HashLineSymbol

    離散線符號

    MarkerLineSymbol

    點線符號

    MultiLayerLineSymbol

    多符號疊加產生新線符號

    PictureLineSymbol

    圖片線符號

    SimpleLine3DSymbol

    3D 線符號

    SimpleLineSymbol

    預定義風格的線符號

    TextureLineSymbol (3DAnalyst)

    紋理貼 圖線符號

    常用的LineSymbol如下圖所示:

    如何創建LineSymbol?接下來以MarkerLineSymbol構建為例演示如何創建一個線符號:

    IArrowMarkerSymbol pArrowMarker = new ArrowMarkerSymbolClass();

    IRgbColor pRgbColor = new RgbColorClass();

    pRgbColor.Red = 255;

    pArrowMarker.Color = pRgbColor as IColor;

    pArrowMarker.Length = 10;

    pArrowMarker.Width = 8;

    pArrowMarker.Style = esriArrowMarkerStyle.esriAMSPlain;

    IMarkerLineSymbol pMarkerLine = new MarkerLineSymbolClass();

    pMarkerLine.MarkerSymbol = arrowMarker;

    IRgbColor pLineColor = new RgbColorClass();

    pLineColor.Blue = 255;

    pMarkerLine.Color = pLineColor as IColor;

    4.4.3FillSymbol對象

    FillSymbol是用來修飾如多邊形等具有面積的幾何形體的符號對象,它擁有十一個子類如表4所示它實現了IFillSymbol,這個接口定義了兩個屬性Color和OutLine,以滿足所有類型的FillSymbol對象的公共屬性設置。

    表四

    填充符號類型

    描述

    ColorRampSymbol (Carto)

    用于渲染Raster數據的顏色帶

    ColorSymbol (Carto)

    用于渲染Raster數據的顏色符號

    DotDensityFillSymbol

    點密度填充符號

    GradientFillSymbol

    漸變填充符號

    LineFillSymbol

    包含線符號的填充符號

    MarkerFillSymbol

    包含點符號的填充符號

    MultiLayerFillSymbol

    多符號疊加產生新填充符號

    PictureFillSymbol

    圖片填充符號

    RasterRGBSymbol

    用于渲染Raster數據 RGBSymbol

    SimpleFillSymbol

    簡單填充符號

    TextureFillSymbol

    紋理貼圖填充符號

    常用的FillSymbol如下圖所示:

    如何創建FillSymbol?接下來以MarkerLineSymbol構建為例演示如何創建一個線符號:

    //為填充符號創建外框線符號

    IColor pLineColor = new RgbColorClass();

    ICartographicLineSymbol pCartoLineSymbol = new CartographicLineSymbolClass();

    pCartoLineSymbol.Width = 2;

    pCartoLineSymbol.Color = pLineColor;

    //創建一個填充符號

    ISimpleFillSymbol pSmplFillSymbol = new SimpleFillSymbol();

    //設置填充符號的屬性

    IColor pRgbClr = new RgbColorClass();

    IFillSymbol pFillSymbol = pSmplFillSymbol;

    pFillSymbol.Color = pRgbClr;

    pFillSymbol.Outline = pCartoLineSymbol;

    如果沒有ArcGIS Desktop使用經驗的開發看了以上代碼片段會一頭霧水,不明白填充符號的創建為什么還要創建線符號等等,如果有ArcGIS Desktop使用經驗就會非常容易理解這些符號的創建的機制,如圖8是SimpleFillSymbol設置信息。所以熟悉ArcGIS Desktop的使用對開發人員進行ArcGIS Engine開發非常有用。

    4.4.4TextSymbol對象

    TextSymbol對象是用于修飾文字元素的,文字元素在要素標注等方面很有用處。TextSymbol符號最重要的設置對象是它的字符,它實現了三個主要的接口來設置字符:ITextSymbol 、 ISimpleTextSymbol 和 IFormattedTextSymbol 。

    ITextSymbol接口是定義文本字符樣式的主要接口,它定義的ITextSymbol::Font屬性是產生一個TextSymbol符號的關鍵。可以使用IFontDisp接口來設置字體的大小和是否是粗體、傾斜等屬性。使用ITextSymbol接口還可以定義TextSymbol對象的顏色、角度、水平排列方式、垂直排列方式和文本等內容。

    以下是一個構建TextSymbol的函數:

    ///<summary>

    ///生成文本符號

    ///</summary>

    ///<param name="pTxtSymbol">文本符號</param>

    ///<param name="sFontName">字體名稱</param>

    ///<param name="iFont">字體大小</param>

    ///<param name="iColor">字體顏色</param>

    public static void MakeTextSymbol(ref ITextSymbol pTxtSymbol, string sFontName, int iFont, int iColor)

    {

    try

    {

    pTxtSymbol.Font.Name = sFontName;

    pTxtSymbol.Font.Size = (decimal)iFont;

    IRgbColor pRGBColor = new RgbColorClass();

    pRGBColor.RGB = iColor;

    pTxtSymbol.Color = (IColor)pRGBColor;

    pTxtSymbol.Angle = 0;

    pTxtSymbol.RightToLeft = false;

    pTxtSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHACenter;

    pTxtSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVABaseline;

    }

    catch (Exception Err)

    {

    MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

    }

    }

    4.4.5 3DChartSymbol對象

    3DChartSymbol是一個抽象類,它擁有三個子類:BarChart、PieChart和StackedChart。如圖9所示:

    BarChartSymbol是最常用的三維著色符號,它使用不同類型的柱子來代表一個要素類中不同的屬性,而柱子的高度取決于屬性值的大小。

    PieChartSymbol符號進行著色的方法是使用一個餅圖來顯示不同要素類中的不同屬性,不同的屬性按照它們的數值大小占有一個餅圖中的不同比例的扇形區域。

    PieChartSymbol符號進行著色的方法是使用一個餅圖來顯示不同要素類中的不同屬性,不同的屬性按照它們的數值大小占有一個餅圖中的不同比例的扇形區域。

    至于如何創建這些3DChartSymbol符號這里不再提供代碼片段演示,讀者可以根據前邊學習的知識,自己操作ArcGIS Desktop使用3DChartSymbol制作專題圖,然后根據ArcGIS Engine的幫助文檔開發創建3DChartSymbol。

    4.5使用ServerStyle

    如果熟悉ArcGIS Desktop的使用,就會對Style符號庫文件有所了解,相對應的在ArcGIS Engine開發中對應的是ServerStyle符號庫,它的結構體系如圖10所示。可以通過專門的轉換程序把ArcGIS Desktop Style符號庫轉換為ArcGIS Engine所能夠使用的ServerStyle符號庫。

    用于獲取ServerStyle符號庫中的符號主要涉及到以下接口如表所示:

    接口名稱

    功能描述

    IStyleGallery

    用于管理Style Gallery

    IStyleGalleryStorage

    管理Style Gallery中的符號庫文件

    IStyleGalleryClass

    控制符號庫中Style Gallery Class

    IEnumStyleGalleryItem

    枚舉一組Style Gallery items

    IStyleGalleryItem

    定義Style Galle ry itme

    4.5.1獲取符號庫中符號

    如何獲取到一個符號庫中符號?接下來以獲取ESRI符號庫中名稱為Rose的符號的流程:

    1.首先構建一個ServerStyleGallery對象

    2.其次使用IStyleGalleryStorage接口的AddFile方法加載ServerStyle文件

    3.遍歷ServerGallery中的Class,如果是FillSymbol使用IStyleGallery的GetItems方法返回一個可枚舉的包含一系列StyleGalleryItem的EnumStyleGalleryItem對象。

    4.遍歷EnumServerStyleGalleryItme枚舉對象中的StylegalleryItme如果名稱是Rose即可獲取ESRI符號庫中名稱為Rose的StylegalleryItme,然后通過IStyleGalleryItem的Item屬性即可轉換為ISymbol。

    整個流程圖如圖11所示:

    4.6SymbologyControl控件

    SymbologyControl用來顯示ServerStyle符號庫中的符號樣式,可以選擇在該控件上選擇一個符號用來符號化一個圖層或者作為一個Element的符號。使用SymbologyControl可以再設計的模式下在其屬性頁中加載ServerStyle符號庫文件,同樣也可以使用的LoadStyleFile和RemoveFile方法加載和移除Serverstyle符號庫文件。運行效果如圖12所示:

    4.7符號化之Renderer( 渲染)體系

    ArcGIS Engine9.3對GIS數據的符號化分為矢量數據渲染和柵格數據渲染兩大類。接下來分別介紹FeatureRender和RasterRender。

    4.7.1FeatureRender對象

    FeatureRenderer是一個抽象類,它有15個子類負責進行不同類型的著色運算。它們都實現了IFeatureRenderer接口,這個接口定義了進行要素圖層符號化的公共屬性和方法。

    可以通過IGeoFeatureLayer::Renderer屬性獲得一個要素圖層的符號化對象

    表四

    要素符號化類型

    描述

    SimpleRender

    簡單符號化

    UniqueValueRender

    唯一值符號化

    BiUniqueValueRender

    雙變量唯一值符號化

    ChartRender

    圖表符號化

    ClassBreaksRenderer

    分類等級符號化

    DotDensityRenderer

    點密度符號化

    ProportionalSymbolRenderer

    根據屬性值設置符號大小進行符號化

    ScaleDependentRenderer

    依比例尺符號化

    RepresentationRenderer

    制圖表達符號化

    CoTrackSymbologyRenderer(TrackingAnalyst)

    軌跡符號化(應用于TrackingAnaylyst擴展模塊)

    EnhancedInfoRenderder(TrackingAnalyst)

    增強信息符號化(應用于TrackingAnaylyst擴展模塊)

    UniqueValueTextRenderer(TrackingAnalyst)

    唯一值文本符號化(應用于TrackingAnaylyst擴展模塊)

    NAStopRenderer(NetworkAnalyst)

    停止符號化(應用于網絡分析擴展模塊)

    FeatureVertexRenderer(SurveyExt)

    要素定點符號化(應用于測量分析擴展模塊)

    SharedEdgeRenderer(EditorExt)

    用于繪制拓撲元素

    常用的要素符號化類型主要有以下6種類型,如圖13所示:

    由于篇幅有限不再對每一種符號化類型的使用進行講解,在后邊的實例中將為讀者演示如何進行唯一值符號化。

    4.7.2RasterRender對象

    RasterRender是一個抽象類,它有15個子類負責進行不同類型的著色運算。它們都實現了IRasterRender接口,這個接口定義了柵格圖層符號化的公共屬性和方法。可以通過IRasterLayer::Renderer屬性獲得一個柵格圖層的符號化對象。

    要素符號化類型

    描述

    RasterRGBRenderer

    柵格RGB符號化

    RasterUniqueValueRenderer

    唯一值符號化

    RasterColormapRenderer

    雙變量唯一值符號化

    RasterClassifyColorRampRenderer

    圖表符號化

    RasterStretchColorRampRenderer

    分類等級符號化

    RasterDiscreteColorRenderer

    點密度 符號化

    ?? 柵格符號化類型結構圖如圖14所示:

    以下代碼片段是對一個RasterLayer進行RasterStretchColorRampRenderer符號化操作:

    ///<summary>

    /// StretchColorRamp符號化RasterLayer

    ///</summary>

    ///<param name="pRasterLayer">RasterLayer</param>

    public void SetStretchColorRampRenderer(IRasterLayer pRasterLayer)

    {

    try

    {

    //創建RasterStretchColorRampRendererClass對象

    IRasterStretchColorRampRenderer pRStretchRender= new RasterStretchColorRampRendererClass();

    //QI到IRasterRenderer

    IRasterRenderer pRasterRender=pRStretchRender as IRasterRenderer;

    pRasterRender.Raster = pRasterLayer as IRaster;

    pRasterRender.Update();

    //創建兩個起始顏色

    IRgbColor pFromRgbColor = new RgbColorClass();

    pFromRgbColor.Red = 255;

    IRgbColor pToRgbColor = new RgbColorClass();

    pToRgbColor.Blue = 255;

    //創建起止顏色帶

    IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass();

    pAlgorithmicColorRamp.Size = 255;

    pAlgorithmicColorRamp.FromColor = pFromRgbColor as IColor;

    pAlgorithmicColorRamp.ToColor = pToRgbColor as IColor;

    bool btrue= true;

    pAlgorithmicColorRamp.CreateRamp(out btrue);

    //選擇拉伸顏色帶符號化的波段

    pRStretchRender.BandIndex = 0;

    //設置拉伸顏色帶符號化所采用的顏色帶

    pRStretchRender.ColorRamp = pAlgorithmicColorRamp as IColorRamp;

    pRasterRender.Update();

    //符號化RasterLayer

    pRasterLayer.Renderer = pRasterRender;

    }

    catch(Exception Err)

    {

    MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

    }

    }

    轉載自: http://bbs.esrichina-bj.cn/ESRI/thread-46784-1-1.html

    4.8利用ESRI自帶的符號庫進行唯一值符號化一圖層開發實例

    4.8.1目的

    學會開發唯一值符號化要素圖層功能

    4.8.2步驟

    1.準備點數據,添加屬性字段“類別”;

    2.并為要素“類別”屬性值分別設置為“Hospital2”,“School 1”,“Airport”三種屬性值。

    3.實現唯一值符號化功能

    4.運行程序實現效果

    4.8.3功能開發

    實現唯一值符號化功能代碼如下:

    ///<summary>

    ///獲取符號庫中符號

    ///</summary>

    ///<param name="sServerStylePath">符號庫全路徑名稱</param>

    ///<param name="sGalleryClassName">GalleryClass名稱</param>

    ///<param name="symbolName">符號名稱</param>

    ///<returns>符號</returns>

    private ISymbol GetSymbol(string sServerStylePath, string sGalleryClassName, string symbolName)

    {

    try

    {

    //ServerStyleGallery對象

    IStyleGallery pStyleGaller = new ServerStyleGalleryClass();

    IStyleGalleryStorage pStyleGalleryStorage = pStyleGaller as IStyleGalleryStorage;

    IEnumStyleGalleryItem pEnumSyleGalleryItem=null;

    IStyleGalleryItem pStyleGallerItem = null;

    IStyleGalleryClass pStyleGalleryClass = null;

    //使用IStyleGalleryStorage接口的AddFile方法加載ServerStyle文件

    pStyleGalleryStorage.AddFile(sServerStylePath);

    //遍歷ServerGallery中的Class

    for (int i = 0; i < pStyleGaller.ClassCount; i++)

    {

    pStyleGalleryClass = pStyleGaller.get_Class(i);

    if (pStyleGalleryClass.Name != sGalleryClassName)

    ??? continue;

    //獲取EnumStyleGalleryItem對象

    pEnumSyleGalleryItem = pStyleGaller.get_Items(sGalleryClassName, sServerStylePath, "");

    pEnumSyleGalleryItem.Reset();

    //遍歷pEnumSyleGalleryItem

    pStyleGallerItem = pEnumSyleGalleryItem.Next();

    while (pStyleGallerItem != null)

    {

    if (pStyleGallerItem.Name == symbolName)

    {

    //獲取符號

    ISymbol pSymbol = pStyleGallerItem.Item as ISymbol;

    System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumSyleGalleryItem);

    System.Runtime.InteropServices.Marshal.ReleaseComObject(pStyleGalleryClass);

    return pSymbol;

    }

    pStyleGallerItem = pEnumSyleGalleryItem.Next();

    }

    }

    System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumSyleGalleryItem);

    System.Runtime.InteropServices.Marshal.ReleaseComObject(pStyleGalleryClass);

    ? return null;

    }

    catch (Exception Err)

    {

    MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

    return null;

    }

    }

    ///<summary>

    ///設置要素圖層唯一值符號化

    ///</summary>

    ///<param name="pFeatureLayer"></param>

    private void UniqueValueRenderFlyr(IFeatureLayer pFeatureLayer)

    {

    try

    {

    //創建UniqueValueRendererClass對象

    IUniqueValueRenderer pUVRender = new UniqueValueRendererClass();

    List<string> pFieldValues= new List<string>();

    pFieldValues.Add("Hospital 2");

    pFieldValues.Add("School 1");

    pFieldValues.Add("Airport");

    for(int i=0;i<pFieldValues.Count;i++)

    {

    ??? ISymbol pSymbol= new SimpleMarkerSymbolClass();

    ??? pSymbol =GetSymbol(@"C:\Program Files\ArcGIS\Styles\ESRI.ServerStyle","Marker Symbols",pFieldValues【i】);

    //添加唯一值符號化字段值和相對應的符號

    pUVRender.AddValue(pFieldValues,pFieldValues,pSymbol);

    }

    //設置唯一值符號化的字段個數和字段名

    pUVRender.FieldCount = 1;

    pUVRender.set_Field(0, "類別");

    IGeoFeatureLayer pGFeatureLyr = pFeatureLayer as IGeoFeatureLayer;

    //設置IGeofeatureLayer的Renderer屬性

    pGFeatureLyr.Renderer = pUVRender as IFeatureRenderer;

    }

    catch (Exception Err)

    {

    MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

    }

    }

    private void button1_Click(object sender, EventArgs e)

    {

    IFeatureLayer pFeatureLayer = this.axMapControl1.get_Layer(0) as IFeatureLayer;

    UniqueValueRenderFlyr(pFeatureLayer);

    this.axMapControl1.Refresh();

    }

    4.9設計GIS系統符號化模塊

    大家首先有個觀念:用ArcEngine開發C/S應用程序時,一個成熟的GIS項目在加載數據這方面是不允許直接把SDE里邊的數據以MXD的形式組織起來這是不科學的,原因如下:

    1.從數據安全性考慮

    一個MXD文檔包含了SDE數據庫里與MXD數據的詳細信息,通常對于數據擁有者來說是不希望外部能夠獲取這些信息的。

    2.從系統靈活性考慮

    通過程序動態加載所需同層,動態符號化相關圖層能夠為程序帶來很大的靈活性,例如根據不同的用戶的權限從數據庫加載不同的數據,符號化不同的圖層等等。習慣直接在MapControl上Load MXD File的就會有疑問,不通過MXD怎么展現圖層的符號化。

    接下來我將從兩種途徑給大家介紹一下如果動態符號化圖層:

    使用ArcEngine開發C/S應用程序數據加載一個重要的功能模塊,在數據加載模塊符號圖層是其技術核心之一:

    4.9.1通過系統符號化配置表存儲圖層符號化信息符號化圖層。

    首先在關系型數據庫中創建一個圖層符號化配置表詳細記錄每一個圖層的符號化信息,如下表(我只列出簡單符號化的配置表設計,至于唯一值等大家可以自己根據需求設計):

    圖層ID

    符號化類型

    符號庫ID

    符號名稱

    符號類型

    點圖層1

    簡單符號化

    1

    火車站

    線圖層1

    簡單符號化

    2

    鐵路線

    面圖層1

    簡單符號化

    3

    綠色面

    然后使用ArcEngine提供的每種符號化類型的接口對圖層進行符號化渲染。

    4.9.2通過ArcEngine提供的Represatation存儲要素符號化

    Representation是ArcGIS9.3的新特性,能夠通過Representation制作更精美,更復雜的地圖操作過程,下圖是ArcGIS Desktop中Repre sentation工具條。

    通過一下操作可以把通過Representation工具條制作出來的地圖效果存儲在要素類中(只能是Geodat? abase類型的)。

    從以上可以看出每一個要素的符號化信息都以Blob方式存儲在相對應的數據表中,這樣就不需要通過配置表的設置進行動態符號化,直接通過Engine中提供的與Representation相關的接口和類符號化每一個圖層。

    轉載自: http://bbs.esrichina-bj.cn/ESRI/thread-47411-1-1.html

    地圖查詢

    ??? 地圖查詢、統計是一個GIS系統的基本的功能模塊,實際上統計功能的前提也是通過查詢獲取結果以文字或者圖表等報表的形式展現查詢結果數據。

    地圖查詢有兩種類型的查詢:

    1.空間查詢:在地圖上設置一定范圍,查詢這一范圍內的要素。例如在地圖上畫一范圍查詢這一區域內的所有消防栓,這一范圍的所有消防栓高亮顯示(或者其他顯示方式)并展現出所有的消防栓的屬性信息。

    2.屬性查詢:通過一定的查詢條件獲取目標要素。例如我們需要查詢中國行政區上人口大于5000萬,同時GDP大于1萬億的省份,通過執行查詢,符號條件的省份高亮顯示(或者其他顯示方式)并展現出這些省份的屬性信息。

    ArcGIS Engine9.3為開發者提供了無需寫代碼即可進行查詢功能的Identify工具,但是這個工具是一個通用的信息查詢新工具。而開發者通常需要自己開發一套符合自己業務需求更加靈活的查詢功能模塊,甚至一些功能不僅僅是查詢信息,很多編輯編輯功能以及和業務相結合的功能開發都用到查詢功能。所以很有必要了解ArcGIS Engine的查詢機制。

    5.1目標

    1.熟悉Cursor,FeatureCursor對象,使用IFeatureCursor接口

    2.熟悉QueryFilter, SpatialFilter對象使用IQueryFilter,ISpatialFilter接口

    3.熟悉要素選擇集SelectionSet對象,會使用IFeatureSelection,ISelectionSet接口

    4.開發一個屬性查詢小功能Demo, 獲取符號查詢條件的Feature,并IFeatureLayerDefinition接口創建一個新的要素圖層加載到Mapcontrol上

    5.開發一個空間多邊形查詢功能的小Demo, 學會創建內存半透明圖層用于顯示選擇范圍

    5.2準備工作

    1.IDE:Visual Studio 2005/2008

    2.ArcGIS Engine Developer kit 9.3

    3.準備一份用于查詢的的矢量數據(文章內有說明)

    5.3Cursor對象

    Cursor(游標)本質上是一個指向數據的指針,本身并不包含數據內容,它是連接到Row對象或要素對象的橋梁。

    ?? 游標有三種類型,即查詢游標、插入游標和更新游標。每一種游標都是通過與之相適應的方法來獲得的,如Search、Insert和Update方法。更新和插入游標都需要使用一個過濾器(Filter)對象,因為它們首先必須獲得需要進行操作的要素。

    ??????? Cursor對象支持的接口是ICursor,它定義了操作一個Row集合或一個Row對象的屬性和方法,下面是獲得插入型、更新型和查詢型游標的方法:

    ??????? pCursor = IFeatureClass.Insert()

    使用IFeatureClass的Insert方法返回一個插入型游標,它通常用于往表中插入一條記錄。

    ??????? pCursor = IFeatureClass.Update()

    使用IFeatureClass的Update方法會返回一個更新型游標,它用于更新或者刪除一條記錄。

    ??????? pCursor= IFeatureClass.Search()

    使用IFeatureClass的Sarch方法對表進行查詢后,可以得到一個查詢型Cursor對象,它指向一個或多個Row對象。

    ????? 以我們這章的內容主要使用查詢游標。

    ????? FeatureCursor是Cursor的一個子類,指向一個或多個要素,它實現了IFeatureCursor接口,ArcGIS Engine開發所對矢量圖層實現查詢功能都是實行IFeatureCursor。

    5.4QueryFilter對象與SpatialFilter對象???

    ???? 在關系型數據庫中,查詢條件是通過SQL語句的Where子語句來完成的。在ArcGIS Engine中不能直接使用SQL語句,但ArcGIS Engine提供了QueryFilter和SpatialFilter兩個過濾器對象來配合完成查詢條件的設置,從而查詢到想要的數據。

    ????????? QueryFilter過濾器主要用于對屬性數據查詢條件的設置,它主要實現IQueryFilter接口從而實現屬性查詢功能。

  • IQueryFilter pQueryFilter = new QueryFilterClass();
  • //設置過濾器對象的屬性
  • pQueryFilter.WhereClause = "人口> 10000000";
  • 復制代碼

    ????????? SpatialFilter過濾器主要用于空間范圍查詢條件的設置,它主要實現ISpatialFilter(繼承 IQueryFilter接口)接口從而實現空間查詢功能。

  • ISpatialFilter pSpatialFilter = new SpatialFilterClass();
  • //設置空間過濾器的范圍(多邊形)
  • pSpatialFilter.Geometry = pGeometry;
  • //設置空間過濾器空間關系類型
  • pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
  • 復制代碼

    空間過濾器空間關系類型主要有以下幾種類型如表一所示:

    表1

    空間過濾器空間關系類型

    描述(A是待查詢圖形,B是過濾條件圖形)

    esriSpatialRelUndefined

    未定義

    esriSpatialRelIntersects

    A與B圖形相交

    esriSpatialRelEnvelopeIntersects

    A的Envelope和B的Envelope相交

    esriSpatialRelIndexIntersects

    A與B索引相交

    esriSpatialRelTouches

    A與B邊界相接

    esriSpatialRelOverlaps

    A與B相疊加

    esriSpatialRelCrosses

    A與B相交(兩條線相交于一點,一條線和一個面相交)

    esriSpatialRelWithin

    A在B內

    esriSpatialRelContains

    A包含B

    esriSpatialRelRelation

    A與B空間關聯

    5.5SelectionSet要素選擇集對象

    ? 熟悉ArcGIS Desktop使用的開發者一定會知道當在ArcMap中顯示查詢結果的時,所有的符號查詢調教的要素都以藍色高亮的形式顯示在地圖控件上,藍色高亮顯示表示高亮選中,這些高亮顯示選中的要素對應一個要素選擇集對象中。通過IFeatureSelection的SelectionSet屬性可以獲取選擇集,FeatureLayer對象實現了IFeatureSelection接口。

    實現代碼如下:

    IFeatureLayer pFeatureLayer = this.axMapControl1.get_Layer(0) as IFeatureLayer;

    //QI至IFeatureSelection

    IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;

    //創建過濾器

    IQueryFilter pQueryFilter = new QueryFilterClass();

    //設置過濾器對象的查詢條件

    pQueryFilter.WhereClause = "人口> 10000000";

    //選擇要素

    pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew,false);???????????????

    //獲取選擇集對象

    ISelectionSet pSelectinSet=pFeatureSelection.SelectionSet;

    //設置選擇集的符號

    pFeatureSelection.SelectionSymbol = pSymbol;

    5.6屬性查詢實例

    5.6.1程序實現目標:

    ? 查詢人口大于5000000的城市,并把查詢結果創建為一個新的圖層,如圖1-3所示:

    代碼片段如下:

  • private void button1_Click(object sender, EventArgs e)
  • {
  • ?? IFeatureLayer pFeatureLayer = this.axMapControl1.get_Layer(0) as IFeatureLayer;
  • ??? //QI到FeatureSelection
  • ??? IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
  • ??? //創建過濾器
  • ? IQueryFilter pQueryFilter = new QueryFilterClass();
  • ?? //設置過濾器對象的查詢條件
  • pQueryFilter.WhereClause = "人口> 5000000";
  • //根據查詢條件選擇要素
  • pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
  • //QI到ISelectionSet
  • ISelectionSet pSelectionSet = pFeatureSelection.SelectionSet;
  • if (pSelectionSet.Count > 0)
  • {
  • IFeatureLayerDefinition pFDefinition = pFeatureLayer as IFeatureLayerDefinition;
  • //創建新圖層
  • IFeatureLayer pNewFeatureLayer = pFDefinition.CreateSelectionLayer("newlayerName", true, null, null);
  • pNewFeatureLayer.Name = "查詢結果城市";
  • axMapControl1.AddLayer(pNewFeatureLayer as ILayer);
  • ? }
  • }
  • ArcGIS Engine基礎開發教程(5)下——學習地圖查詢

  • 5.7空間查詢實例
  • 5.7.1目標
  • ?? 實現多邊形查詢功能
  • 5.7.2功能開發
  • ?? 代碼片段如下:
  • 引用的命名空間:
  • [code]
  • using System;
  • using System.Drawing;
  • using System.Collections;
  • using System.ComponentModel;
  • using System.Windows.Forms;
  • using System.Data;
  • using System.IO;
  • using System.Runtime.InteropServices;
  • using System.Collections.Generic;
  • using ESRI.ArcGIS.esriSystem;
  • using ESRI.ArcGIS.Carto;
  • using ESRI.ArcGIS.Controls;
  • using ESRI.ArcGIS.ADF;
  • using ESRI.ArcGIS.SystemUI;
  • using ESRI.ArcGIS.Display;
  • using ESRI.ArcGIS.Geodatabase;
  • using ESRI.ArcGIS.Geometry;
  • using ESRI.ArcGIS.DataSourcesGDB;
  • ///<summary>///
  • 在程序運行時的內存中創建矢量要素層,并加到地圖控件最頂端
  • ///</summary> ///
  • <param name="pMapCtrl">地圖控件</param>
  • ///<returns>IFeatureLayer 新加的要素層</returns>
  • private? IFeatureLayer AddFeatureLayerByMemoryWS(AxMapControl pMapCtrl,ISpatialReference pSReference)
  • {?????????
  • ? try
  • ? {
  • ???? if (pMapCtrl == null) return null;
  • #region
  • 創建新的內存工作空間
  • IWorkspaceFactory pWSF = new InMemoryWorkspaceFactoryClass();
  • IWorkspaceName pWSName = pWSF.Create("", "Temp", null, 0);
  • IName pName = (IName)pWSName;
  • IWorkspace pMemoryWS = (IWorkspace)pName.Open();
  • #endregion
  • IField oField = new FieldClass();
  • IFields oFields = new FieldsClass();
  • IFieldsEdit oFieldsEdit = null;
  • IFieldEdit oFieldEdit = null;
  • IFeatureClass oFeatureClass = null;
  • IFeatureLayer oFeatureLayer = null;
  • try
  • {
  • FieldsEdit = oFields as IFieldsEdit;
  • oFieldEdit = oField as IFieldEdit;
  • oFieldEdit.Name_2 = "OBJECTID";
  • oFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
  • oFieldEdit.IsNullable_2 = false;
  • oFieldEdit.Required_2 = false;
  • oFieldsEdit.AddField(oField);
  • oField = new FieldClass();
  • oFieldEdit = oField as IFieldEdit;
  • IGeometryDef pGeoDef = new GeometryDefClass();
  • IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;
  • pGeoDefEdit.AvgNumPoints_2 = 5;
  • pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
  • pGeoDefEdit.GridCount_2 = 1;
  • pGeoDefEdit.HasM_2 = false;
  • pGeoDefEdit.HasZ_2 = false;
  • pGeoDefEdit.SpatialReference_2 = pSReference;
  • oFieldEdit.Name_2 = "SHAPE";
  • oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
  • oFieldEdit.GeometryDef_2 = pGeoDef;
  • oFieldEdit.IsNullable_2 = true;
  • oFieldEdit.Required_2 = true;
  • oFieldsEdit.AddField(oField);
  • oField = new FieldClass();
  • oFieldEdit = oField as IFieldEdit;
  • oFieldEdit.Name_2 = "Code";
  • oFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;
  • oFieldEdit.IsNullable_2 = true;
  • oFieldsEdit.AddField(oField);
  • //創建要素類
  • oFeatureClass = (pMemoryWS as IFeatureWorkspace).CreateFeatureClass("Temp", oFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
  • oFeatureLayer = new FeatureLayerClass();
  • oFeatureLayer.Name = "TransTemp";
  • oFeatureLayer.FeatureClass = oFeatureClass;
  • //創建唯一值符號化對象
  • IUniqueValueRenderer pURender = new UniqueValueRendererClass();
  • pURender.FieldCount = 1;
  • pURender.set_Field(0, "Code");
  • pURender.UseDefaultSymbol = false;
  • ISimpleFillSymbol pFillSym = new SimpleFillSymbolClass();
  • pFillSym.Style = esriSimpleFillStyle.esriSFSSolid;
  • //半透明顏色
  • IRgbColor pColor = new RgbColorClass();
  • pColor.Red = 255;
  • pColor.Green = 255;
  • pFillSym.Color = pColor;
  • pURender.AddValue("1", "", pFillSym as ISymbol);
  • pFillSym = new SimpleFillSymbolClass();
  • pFillSym.Style = esriSimpleFillStyle.esriSFSSolid;
  • //唯一值符號化內存圖層
  • (oFeatureLayer as IGeoFeatureLayer).Renderer = pURender as IFeatureRenderer;
  • ILayerEffects pLyrEffect = oFeatureLayer as ILayerEffects;
  • //透明度
  • pLyrEffect.Transparency = 80;
  • }
  • catch(Exception Err)
  • {
  • ??? MessageBox.Show(Err.Message);
  • }
  • finally
  • {
  • ?? try{
  • ystem.Runtime.InteropServices.Marshal.ReleaseComObject(oField);
  • System.Runtime.InteropServices.Marshal.ReleaseComObject(oFields);
  • System.Runtime.InteropServices.Marshal.ReleaseComObject(oFieldsEdit);
  • System.Runtime.InteropServices.Marshal.ReleaseComObject(oFieldEdit);
  • System.Runtime.InteropServices.Marshal.ReleaseComObject(pName);
  • System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSF);
  • System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSName);
  • System.Runtime.InteropServices.Marshal.ReleaseComObject(pMemoryWS);
  • System.Runtime.InteropServices.Marshal.ReleaseComObject(oFeatureClass);
  • }
  • catch
  • {
  • }
  • GC.Collect();
  • }
  • ???? return oFeatureLayer;
  • }
  • ? catch (Exception Err)
  • {
  • MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • return null;}
  • }
  • /// <summary> 在地圖控件上添加透明臨時圖元/// </summary>
  • /// <param name="pMapCtrl">地圖控件</param>
  • /// <param name="pGeo">Envelope或Polygon幾何實體</param>
  • /// <param name="bAutoClear">是否清除原有內容</param>
  • public? void AddTransTempEle(AxMapControl pMapCtrl, IGeometry pGeo, bool bAutoClear)
  • ??????? {
  • ??????????? try
  • ??????????? {
  • ??????????????? if (pMapCtrl == null) return;
  • ??????????????? if (pGeo == null) return;
  • ??????????????? if (pGeo.IsEmpty) return;
  • ??????????????? IGeometry pPolygon = null;
  • ??????????????? if (pGeo is IEnvelope)
  • ??????????????? {
  • ??????????????????? object Miss = Type.Missing;
  • ??????????????????? pPolygon = new PolygonClass();
  • ??????????????????? IGeometryCollection pGeoColl = pPolygon as IGeometryCollection;
  • ??????????????????? pGeoColl.AddGeometry(pGeo, ref Miss, ref Miss);
  • ??????????????? }
  • ??????????????? else if (pGeo is IPolygon)
  • ??????????????? {
  • ??????????????????? (pGeo as ITopologicalOperator).Simplify();
  • ??????????????????? pPolygon = pGeo;
  • ??????????????? }
  • ??????????????? else
  • ??????????????? {
  • ??????????????????? MessageBox.Show( "幾何實體類型不匹配","提示" ,MessageBoxButtons.OK, MessageBoxIcon.Information);
  • ??????????????????? return;
  • ??????????????? }
  • ??????????????? //獲取透明要素層
  • ??????????????? IFeatureLayer pFlyr = null;
  • ??????????????? for (int i = 0; i < pMapCtrl.LayerCount; i++)
  • ??????????????? {
  • ??????????????????? if (pMapCtrl.get_Layer(i).Name == "TransTemp")
  • ??????????????????? {
  • ??????????????????????? pFlyr = pMapCtrl.get_Layer(i) as IFeatureLayer;
  • ??????????????????????? break;
  • ??????????????????? }
  • ??????????????? }
  • ??????????????? //透明臨時層不存在需要創建
  • ??????????????? if (pFlyr == null)
  • ??????????????? {???
  • ??????????????????? pFlyr = AddFeatureLayerByMemoryWS(pMapCtrl,pMapCtrl.SpatialReference);
  • ??????????????????? if (pFlyr == null)
  • ??????????????????? {
  • ??????????????????????? MessageBox.Show("創建透明臨時圖層發生異常", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • ??????????????????????? return;
  • ??????????????????? }
  • ??????????????? }
  • ??????????????? IFeatureClass pFC = pFlyr.FeatureClass;
  • ??????????????? if (bAutoClear)
  • ??????????????? {
  • ??????????????????? if (pFC.FeatureCount(null) > 0)
  • ??????????????????? {
  • ??????????????????????? IFeatureCursor pFCursor = pFC.Search(null, false);
  • ??????????????????????? if (pFCursor != null)
  • ??????????????????????? {
  • ??????????????????????????? IFeature pFeature = pFCursor.NextFeature();
  • ??????????????????????????? if (pFeature != null)
  • ??????????????????????????? {
  • ??????????????????????????????? while (pFeature != null)
  • ??????????????????????????????? {
  • ??????????????????????????????????? pFeature.Delete();
  • ??????????????????????????????????? pFeature = pFCursor.NextFeature();
  • ??????????????????????????????? }
  • ??????????????????????????? }
  • ??????????????????????????? System.Runtime.InteropServices.Marshal.ReleaseComObject(pFCursor);
  • ??????????????????????? }
  • ??????????????????? }
  • ??????????????? }
  • ??????????????? //創建要素
  • ??????????????? IFeature pNFeature = pFC.CreateFeature();
  • ??????????????? pNFeature.Shape = pPolygon;
  • ??????????????? pNFeature.set_Value(pFC.FindField("Code"),"1");
  • ??????????????? pNFeature.Store();
  • ??????????????? pMapCtrl.Refresh(esriViewDrawPhase.esriViewGeography, pFlyr, pFlyr.AreaOfInterest);
  • ??????????? }
  • ??????????? catch (Exception Err)
  • ??????????? {
  • ??????????????? MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • ??????????? }
  • ??????? }
  • /// <summary>
  • ??????? /// 獲取查詢要素
  • ??????? /// </summary>
  • ??????? /// <param name="pFeatureLayer">要素圖層</param>
  • ??????? /// <param name="pGeometry">圖形范圍參數</param>
  • ??????? /// <returns>符號條件要素集合</returns>
  • ??????? private List<IFeature> GetSeartchFeatures( IFeatureLayer pFeatureLayer,IGeometry pGeometry)
  • ??????? {
  • ??????????? try
  • ??????????? {
  • ??????????????? List<IFeature> pList = new List<IFeature>();
  • ??????????????? //創建SpatialFilter空間過濾器對象
  • ??????????????? ISpatialFilter pSpatialFilter = new SpatialFilterClass();
  • ??????????????? IQueryFilter pQueryFilter = pSpatialFilter as ISpatialFilter;
  • ??????????????? //設置過濾器的Geometry
  • ??????????????? pSpatialFilter.Geometry = pGeometry;
  • ??????????????? //設置空間關系類型
  • ??????????????? pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
  • ??????????????? //獲取FeatureCursor游標
  • ??????????????? IFeatureCursor pFeatureCursor = pFeatureLayer.Search(pQueryFilter, false);
  • ??????????????? //遍歷FeatureCursor
  • ??????????????? IFeature pFeature = pFeatureCursor.NextFeature();
  • ??????????????? while (pFeature != null)
  • ??????????????? {
  • ??????????????????? //獲取要素對象
  • ??????????????????? pList.Add(pFeature);
  • ??????????????????? pFeature = pFeatureCursor.NextFeature();
  • ??????????????? }
  • ??????????????? System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
  • ??????????????? return pList;
  • ??????????? }
  • ??????????? catch (Exception Err)
  • ??????????? {
  • ??????????????? MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • ??????????????? return null;
  • ??????????? }
  • ??????? }
  • ? bool bSearch = false; //定義bool變量用于啟動多邊形查詢功能
  • ??????? private void button1_Click(object sender, EventArgs e)
  • ??????? {
  • ??????????? try
  • ??????????? {
  •         //向地圖控件添加內存圖層
  • ??????????????? IFeatureLayer pFeatureLayer = this.AddFeatureLayerByMemoryWS(this.axMapControl1,this.axMapControl1.SpatialReference);
  • ??????????????? this.axMapControl1.AddLayer(pFeatureLayer);
  • ?????????????? //設置鼠標樣式為十字絲
  • ??????????????? this.axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
  •         //啟動范圍查詢功能
  • ??????????????? bSearch = true;
  • ???????? }
  • 添加一個新的Form在Form上添加一個DataGridView控件用于顯示查詢結果信息。如圖4所示:

  • private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
  • ??????? {
  • ??????????? if (bSearch)
  • ??????????? {
  • ??????????????? //設置鼠標樣式為十字絲
  • ??????????????? this.axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
  • ??????????????? //獲取畫定范圍的Geometry
  • ??????????????? IGeometry pGeometry = this.axMapControl1.TrackPolygon();
  • ??????????????? //添加半透名臨時圖形
  • ??????????????? this.AddTransTempEle(this.axMapControl1, pGeometry, false);
  • ??????????????? IFeatureLayer pFeatureLayer=this.axMapControl1.get_Layer(1) as IFeatureLayer;
  • ??????????????? //執行查詢獲取符號條件的要素
  • ??????????????? List<IFeature> pFList = this.GetSeartchFeatures(pFeatureLayer, pGeometry);
  • ??????????????? attribute pAttribute = new attribute();
  • ??????????????? //設置信息顯示窗體中DataGridView的屬性
  • ??????????????? //設置行數pFList.Count+1包括字段名哪一行即表頭
  • ??????????????? pAttribute.dataGridView1.RowCount = pFList.Count+1;???????????????
  • ??????????????? //設置邊界風格
  • ??????????????? pAttribute.dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Sunken;
  • ??????????????? //設置列數
  • ??????????????? pAttribute.dataGridView1.ColumnCount = pFList[0].Fields.FieldCount;
  • ??????????????? //遍歷第一個要素的字段用于給列頭賦值(字段的名稱)
  • ??????????????? for(int m=0;m<pFList[0].Fields.FieldCount;m++)
  • ??????????????? {
  • ??????????????????? pAttribute.dataGridView1.Columns[m].HeaderText = pFList[0].Fields.get_Field(m).AliasName;
  • ??????????????? }
  • ??????????????? //遍歷要素
  • ??????????????? for (int i = 0; i < pFList.Count; i++)
  • ??????????????? {
  • ?????????????????? IFeature pFeature=pFList;
  • ??????????????? for(int j=0;j<pFeature.Fields.FieldCount;j++)
  • ?????????????????? {
  • ?????????????????????? //填充字段值
  • ?????????????????????? pAttribute.dataGridView1[j, i].Value = pFeature.get_Value(j).ToString();
  • ?????????????????? }
  • ??????????????? }
  • ??????????????? pAttribute.Show();
  • ??????????? }
  • ??????? }
  • 5.7.3功能演示

    ?? 1.單擊按鈕向地圖控件上添加一內存圖層,并啟動多邊形查詢功能如圖5示:

    ?????? 2.點擊鼠標左鍵在地圖上畫以多邊形范圍,雙擊結束,將看到在所畫的范圍以半透明的形式添加在地圖之上,并顯示出查詢結果的屬性信息如圖所示:

    5.7.4 Demo總結:

    1.使用IWorkspaceFactory,IWorkspaceName,IName,IWorkspace等接口以及InMemoryWorkspaceFactoryClass對象創建在程序運行時的內存中的矢量要素層

    2.復習IUniqueValueRenderer等接口以及UniqueValueRendererClass對象唯一值符號化要素圖層

    3.使用ILayerEffects接口創建半透明效果要素圖層

    4.使用ISpatialFilter,IQueryFilter 等接口以及SpatialFilterClass對象獲取符號條件的FeatureCursor,并學會通過遍歷整個FeatureCursor中Feature對象,獲取符號查詢條件的Feature集合

    5.使用IFeatureLayerDefinition根據要素選擇集創建新要素圖層

    5.8附IFeatureClass.Search(IQuery Filter,bool Recycling)參數說明

    FeatureClass的Search方法大家經常用到,很多人對Search方法的其中一個參數bool Recycling不是很理解。先做以下解釋:

    1.pFeatureCursor存儲的是所有符合條件的Feature對象的引用,

    2.Recycling的意思是回收,參數Recycling為True的時當執行這個方法IFeature pFeature=pFeatureCursor.NextFeature()上一條記錄的圖形值在內存中所占的地址就會被銷毀回收,為False的時候當執行這個方法IFeature pFeature=pFeatureCursor.NextFeature()上一條記錄的圖形值依然存在在內存中。

    1.參數Recycling設置為True

    ? IFeatureClass pFeatureClass = (this.axMapControl1.get_Layer(0) as IFeatureLayer).FeatureClass;

    ??????????? IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, true);

    ??????????? //IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);

    ??????????? List<IFeature> pFeatures = new List<IFeature>();

    ??????????? IFeature pFeature = pFeatureCursor.NextFeature();

    ??????????? while (pFeature != null)

    ??????????? {

    ??????????????? pFeatures.Add(pFeature);

    ??????????????? pFeature = pFeatureCursor.NextFeature();

    ??????????? }

    ??????????? for (int i = 0; i < pFeatures.Count; i++)

    ??????????? {

    ??????????????? MessageBox.Show(((pFeatures.Shape as IPolygon) as IArea).Area.ToString());

    ??????????? }

    分析:pFeatures集合存儲了指向FeatureClass上所有Feature的引用,但是由于Recycling參數設置為TRUE也就是說每執行一個NextFeautre方法上一條記錄的Feature值在內存中被回收,所以到最后遍歷pFeatures集合的時候所有的IFeature引用指向的Feature對象都為Null。所以會引發一下錯誤(如下圖7所示):

    .參數Recycling設置為False

    ??? IFeatureClass pFeatureClass = (this.axMapControl1.get_Layer(0) as IFeatureLayer).FeatureClass;

    ??????????? //IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, true);

    ??????????? IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);

    ??????????? List<IFeature> pFeatures = new List<IFeature>();

    ??????????? IFeature pFeature = pFeatureCursor.NextFeature();

    ??????????? while (pFeature != null)

    ??????????? {

    ??????????????? pFeatures.Add(pFeature);

    ??????????????? pFeature = pFeatureCursor.NextFeature();

    ??????????? }

    ??????????? for (int i = 0; i < pFeatures.Count; i++)

    ??????????? {

    ??????????????? MessageBox.Show(((pFeatures.Shape as IPolygon) as IArea).Area.ToString());

    ??????????? }

    分析:pFeatures集合存儲了指向FeatureClass上所有Feature的引用,但是由于Recycling參數設置為False也就是說每執行一個NextFeautre方法上一條記錄的Feature值在內存中依然存在,所以到最后遍歷pFeatures集合的時候所有的IFeature引用指向的Feature對象都依然存在。所以會執行的很Happy(如下圖8所示):

    轉載于:https://www.cnblogs.com/mazhenyu/archive/2011/02/25/1965179.html

    總結

    以上是生活随笔為你收集整理的ArcGIS Engine基础开发教程(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    东京热无码av男人的天堂 | 熟妇人妻无乱码中文字幕 | 在线亚洲高清揄拍自拍一品区 | 国产精品国产自线拍免费软件 | 永久免费观看国产裸体美女 | 国产精品办公室沙发 | 国产精品怡红院永久免费 | 人人爽人人澡人人高潮 | 亚洲成在人网站无码天堂 | 久久久国产精品无码免费专区 | 日本熟妇浓毛 | 欧美兽交xxxx×视频 | 99久久人妻精品免费二区 | 中文字幕无码免费久久9一区9 | 久久亚洲日韩精品一区二区三区 | 夜精品a片一区二区三区无码白浆 | 性色av无码免费一区二区三区 | 国产亚洲美女精品久久久2020 | 狠狠综合久久久久综合网 | 精品人人妻人人澡人人爽人人 | 自拍偷自拍亚洲精品被多人伦好爽 | 欧美成人午夜精品久久久 | 亚洲色大成网站www国产 | 久久久久久久久888 | 日本乱偷人妻中文字幕 | 亚洲精品国产精品乱码视色 | ass日本丰满熟妇pics | 中文字幕av无码一区二区三区电影 | 久久久久久久久蜜桃 | 日韩成人一区二区三区在线观看 | 精品国产一区二区三区四区在线看 | 大胆欧美熟妇xx | 免费无码av一区二区 | 乱人伦人妻中文字幕无码久久网 | 荫蒂被男人添的好舒服爽免费视频 | 国产亚洲精品久久久久久大师 | 国产卡一卡二卡三 | 男人和女人高潮免费网站 | 无码av免费一区二区三区试看 | 日本大香伊一区二区三区 | 狂野欧美激情性xxxx | 2019nv天堂香蕉在线观看 | 国产av一区二区三区最新精品 | 国产偷国产偷精品高清尤物 | 国产真人无遮挡作爱免费视频 | 99久久精品日本一区二区免费 | 性欧美大战久久久久久久 | 欧美人与禽猛交狂配 | 亚洲精品国产品国语在线观看 | 国色天香社区在线视频 | 天天拍夜夜添久久精品 | 377p欧洲日本亚洲大胆 | 国产激情无码一区二区 | 亚洲精品国偷拍自产在线麻豆 | 少妇高潮喷潮久久久影院 | 老子影院午夜伦不卡 | 激情亚洲一区国产精品 | 亚洲色偷偷偷综合网 | 最近免费中文字幕中文高清百度 | 图片小说视频一区二区 | 久久婷婷五月综合色国产香蕉 | 国产精品人妻一区二区三区四 | 午夜理论片yy44880影院 | 欧美肥老太牲交大战 | 日本熟妇乱子伦xxxx | 无码国模国产在线观看 | 久久综合久久自在自线精品自 | 国产一精品一av一免费 | 无码人妻av免费一区二区三区 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲国产精品无码久久久久高潮 | 人妻体内射精一区二区三四 | 老司机亚洲精品影院无码 | 无码成人精品区在线观看 | 熟妇人妻无码xxx视频 | 日韩少妇白浆无码系列 | 久久亚洲日韩精品一区二区三区 | 一本久久a久久精品vr综合 | 欧美三级不卡在线观看 | 国产精品va在线播放 | 中文无码伦av中文字幕 | 55夜色66夜色国产精品视频 | 人妻与老人中文字幕 | 欧美日韩久久久精品a片 | 300部国产真实乱 | 国产精品内射视频免费 | 少妇激情av一区二区 | 欧美人与动性行为视频 | 精品久久综合1区2区3区激情 | 亚洲中文字幕乱码av波多ji | 日本xxxx色视频在线观看免费 | 色综合天天综合狠狠爱 | 亚洲精品综合一区二区三区在线 | 一本大道久久东京热无码av | 国产美女极度色诱视频www | 曰本女人与公拘交酡免费视频 | 99久久精品午夜一区二区 | 色情久久久av熟女人妻网站 | 国产无av码在线观看 | 一区二区传媒有限公司 | 人人爽人人澡人人高潮 | 少妇无码av无码专区在线观看 | 成人欧美一区二区三区黑人免费 | 亚洲一区二区三区国产精华液 | 天堂一区人妻无码 | 久久精品国产一区二区三区 | 欧美亚洲国产一区二区三区 | 国产精品理论片在线观看 | 人妻少妇精品视频专区 | 少妇被粗大的猛进出69影院 | 国产猛烈高潮尖叫视频免费 | 精品国产成人一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 无码av免费一区二区三区试看 | 亚洲欧美色中文字幕在线 | 少妇人妻偷人精品无码视频 | 麻豆国产97在线 | 欧洲 | 女人高潮内射99精品 | 人人澡人人妻人人爽人人蜜桃 | 欧美老妇交乱视频在线观看 | 骚片av蜜桃精品一区 | 亚洲毛片av日韩av无码 | 99视频精品全部免费免费观看 | 永久免费观看美女裸体的网站 | 妺妺窝人体色www在线小说 | 377p欧洲日本亚洲大胆 | 妺妺窝人体色www在线小说 | 国产suv精品一区二区五 | 大色综合色综合网站 | 中文字幕av伊人av无码av | 亚洲综合无码一区二区三区 | 亚洲理论电影在线观看 | 性做久久久久久久久 | 久久久久久国产精品无码下载 | 国内少妇偷人精品视频免费 | 成人免费视频视频在线观看 免费 | www国产亚洲精品久久久日本 | 精品水蜜桃久久久久久久 | 在线观看免费人成视频 | 国产乱码精品一品二品 | 亚洲va中文字幕无码久久不卡 | 亚洲国产精品成人久久蜜臀 | 久久熟妇人妻午夜寂寞影院 | 人妻中文无码久热丝袜 | 久久精品人妻少妇一区二区三区 | 国产成人无码午夜视频在线观看 | 婷婷丁香五月天综合东京热 | 精品水蜜桃久久久久久久 | 久久综合狠狠综合久久综合88 | 乱人伦人妻中文字幕无码久久网 | 人妻无码αv中文字幕久久琪琪布 | 一本大道久久东京热无码av | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 久久99国产综合精品 | 欧美日韩视频无码一区二区三 | 男女超爽视频免费播放 | 大胆欧美熟妇xx | 国产后入清纯学生妹 | 98国产精品综合一区二区三区 | 99久久99久久免费精品蜜桃 | 国产精品99爱免费视频 | 欧美丰满少妇xxxx性 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产人妻大战黑人第1集 | 正在播放老肥熟妇露脸 | 未满成年国产在线观看 | 中文字幕 亚洲精品 第1页 | 中文字幕av无码一区二区三区电影 | 日本大乳高潮视频在线观看 | aⅴ亚洲 日韩 色 图网站 播放 | 国产亚洲美女精品久久久2020 | 色综合久久久久综合一本到桃花网 | 樱花草在线社区www | 中文字幕+乱码+中文字幕一区 | 中文字幕无码免费久久99 | 精品一二三区久久aaa片 | 娇妻被黑人粗大高潮白浆 | 麻豆国产丝袜白领秘书在线观看 | 国产成人精品三级麻豆 | 99er热精品视频 | 国产区女主播在线观看 | 成人精品视频一区二区 | 亚洲人亚洲人成电影网站色 | 无码免费一区二区三区 | 久久 国产 尿 小便 嘘嘘 | 伊人久久大香线蕉午夜 | 国产精品99久久精品爆乳 | 日韩亚洲欧美精品综合 | 丝袜 中出 制服 人妻 美腿 | 日本大乳高潮视频在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 日韩欧美中文字幕在线三区 | 国产成人一区二区三区别 | 国产在热线精品视频 | 久久综合给久久狠狠97色 | 亚洲一区二区三区播放 | а天堂中文在线官网 | 欧洲精品码一区二区三区免费看 | 色窝窝无码一区二区三区色欲 | 婷婷色婷婷开心五月四房播播 | 熟女少妇人妻中文字幕 | 亚洲色无码一区二区三区 | 欧美亚洲日韩国产人成在线播放 | 婷婷丁香六月激情综合啪 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产成人久久精品流白浆 | 国产亚洲精品久久久久久大师 | 久青草影院在线观看国产 | 国产无遮挡吃胸膜奶免费看 | 欧美高清在线精品一区 | 欧美放荡的少妇 | 1000部夫妻午夜免费 | 欧美真人作爱免费视频 | 高潮喷水的毛片 | 国产熟女一区二区三区四区五区 | 荫蒂被男人添的好舒服爽免费视频 | 丰满人妻一区二区三区免费视频 | 欧美变态另类xxxx | 亚洲a无码综合a国产av中文 | 成人免费视频在线观看 | 欧美人与牲动交xxxx | 国产成人亚洲综合无码 | 亚洲精品国产a久久久久久 | 国产又爽又猛又粗的视频a片 | 美女黄网站人色视频免费国产 | 午夜肉伦伦影院 | 日日碰狠狠躁久久躁蜜桃 | 精品 日韩 国产 欧美 视频 | 欧美日韩人成综合在线播放 | 亚洲精品一区二区三区大桥未久 | 两性色午夜视频免费播放 | 性生交片免费无码看人 | 伊人久久大香线焦av综合影院 | 宝宝好涨水快流出来免费视频 | 免费无码一区二区三区蜜桃大 | 亚洲一区av无码专区在线观看 | 激情内射亚州一区二区三区爱妻 | 欧美丰满老熟妇xxxxx性 | 国产精品二区一区二区aⅴ污介绍 | 奇米影视888欧美在线观看 | 东京热一精品无码av | 麻豆av传媒蜜桃天美传媒 | 色老头在线一区二区三区 | 无码人妻丰满熟妇区五十路百度 | 久久精品人妻少妇一区二区三区 | 国产精品久久福利网站 | 97久久精品无码一区二区 | 午夜精品久久久内射近拍高清 | 中文字幕人妻丝袜二区 | 人妻人人添人妻人人爱 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产在线无码精品电影网 | www一区二区www免费 | 少妇无码一区二区二三区 | 青青久在线视频免费观看 | 亚洲欧美国产精品久久 | 熟妇人妻无码xxx视频 | 荫蒂被男人添的好舒服爽免费视频 | 久久久久成人片免费观看蜜芽 | 亚洲精品鲁一鲁一区二区三区 | 久久久久久av无码免费看大片 | 久久无码中文字幕免费影院蜜桃 | 99久久久国产精品无码免费 | 欧美亚洲日韩国产人成在线播放 | 俄罗斯老熟妇色xxxx | 娇妻被黑人粗大高潮白浆 | 日日碰狠狠丁香久燥 | 亚洲熟女一区二区三区 | 十八禁真人啪啪免费网站 | 精品日本一区二区三区在线观看 | 色婷婷香蕉在线一区二区 | a片免费视频在线观看 | 性色欲网站人妻丰满中文久久不卡 | 国产欧美精品一区二区三区 | 国产免费无码一区二区视频 | 免费看少妇作爱视频 | 图片区 小说区 区 亚洲五月 | 久久精品中文字幕大胸 | 亚洲小说图区综合在线 | 少妇邻居内射在线 | 日欧一片内射va在线影院 | 欧美猛少妇色xxxxx | 99久久精品国产一区二区蜜芽 | 久久这里只有精品视频9 | 国产在线aaa片一区二区99 | 激情人妻另类人妻伦 | 又大又黄又粗又爽的免费视频 | 精品欧洲av无码一区二区三区 | 亚洲精品一区三区三区在线观看 | 成人免费视频视频在线观看 免费 | 国产特级毛片aaaaaa高潮流水 | 日韩欧美成人免费观看 | av香港经典三级级 在线 | 日本www一道久久久免费榴莲 | 日本xxxx色视频在线观看免费 | 在线播放免费人成毛片乱码 | 狠狠色色综合网站 | 国产办公室秘书无码精品99 | 成人综合网亚洲伊人 | 久久精品国产一区二区三区肥胖 | 丰满护士巨好爽好大乳 | 无码帝国www无码专区色综合 | 中文字幕人妻无码一区二区三区 | 红桃av一区二区三区在线无码av | 永久免费观看美女裸体的网站 | 鲁一鲁av2019在线 | 国产麻豆精品精东影业av网站 | 日日噜噜噜噜夜夜爽亚洲精品 | 一区二区三区乱码在线 | 欧洲 | 成人欧美一区二区三区黑人免费 | 国产亚洲美女精品久久久2020 | 亚洲综合在线一区二区三区 | 精品欧洲av无码一区二区三区 | 东北女人啪啪对白 | 成人试看120秒体验区 | 国产精品无码一区二区三区不卡 | 2020久久超碰国产精品最新 | 日欧一片内射va在线影院 | 熟女少妇人妻中文字幕 | 国产精品怡红院永久免费 | 成人动漫在线观看 | 狠狠亚洲超碰狼人久久 | 国产热a欧美热a在线视频 | 97夜夜澡人人爽人人喊中国片 | 荫蒂被男人添的好舒服爽免费视频 | 国产农村乱对白刺激视频 | 无码人妻av免费一区二区三区 | 婷婷六月久久综合丁香 | 奇米影视888欧美在线观看 | 欧美日韩亚洲国产精品 | 99久久精品日本一区二区免费 | 精品国偷自产在线视频 | 丁香啪啪综合成人亚洲 | 精品国产一区二区三区av 性色 | 亚洲综合另类小说色区 | 国产精品久久久午夜夜伦鲁鲁 | 国产偷抇久久精品a片69 | 丰满人妻精品国产99aⅴ | 97精品人妻一区二区三区香蕉 | 日本大乳高潮视频在线观看 | 亚洲精品中文字幕乱码 | 女高中生第一次破苞av | 日韩精品久久久肉伦网站 | 国语精品一区二区三区 | 久久人妻内射无码一区三区 | 国产婷婷色一区二区三区在线 | 野外少妇愉情中文字幕 | 无码人妻丰满熟妇区五十路百度 | 久久99精品久久久久婷婷 | 人妻天天爽夜夜爽一区二区 | 久久久久亚洲精品中文字幕 | 乌克兰少妇xxxx做受 | 日韩av无码一区二区三区 | 日韩视频 中文字幕 视频一区 | 亚洲色大成网站www国产 | 巨爆乳无码视频在线观看 | 亚洲小说春色综合另类 | 在线成人www免费观看视频 | 国产情侣作爱视频免费观看 | 自拍偷自拍亚洲精品被多人伦好爽 | 欧美老熟妇乱xxxxx | 曰韩少妇内射免费播放 | 亚洲欧洲日本无在线码 | 色综合久久久无码网中文 | av香港经典三级级 在线 | 国产69精品久久久久app下载 | 少妇被黑人到高潮喷出白浆 | 任你躁国产自任一区二区三区 | a片在线免费观看 | 丰满人妻被黑人猛烈进入 | 偷窥日本少妇撒尿chinese | 国产绳艺sm调教室论坛 | 人人澡人人妻人人爽人人蜜桃 | 国产精品理论片在线观看 | 久久久亚洲欧洲日产国码αv | 日日天干夜夜狠狠爱 | 天堂а√在线中文在线 | 成人无码视频在线观看网站 | 国产精品对白交换视频 | 高清无码午夜福利视频 | 国产黑色丝袜在线播放 | 清纯唯美经典一区二区 | 精品国产一区二区三区av 性色 | 精品亚洲韩国一区二区三区 | 亚洲va欧美va天堂v国产综合 | 波多野结衣乳巨码无在线观看 | 日本熟妇人妻xxxxx人hd | 国产乱人伦偷精品视频 | 国产精品内射视频免费 | 久久人人爽人人爽人人片av高清 | 在线精品国产一区二区三区 | 呦交小u女精品视频 | 久久亚洲国产成人精品性色 | 亚欧洲精品在线视频免费观看 | 无码人妻丰满熟妇区毛片18 | 在线观看免费人成视频 | 无码国产激情在线观看 | 性欧美videos高清精品 | 欧美日韩视频无码一区二区三 | 国产三级精品三级男人的天堂 | 18禁止看的免费污网站 | 亚洲一区二区三区在线观看网站 | 免费看少妇作爱视频 | 国产精品成人av在线观看 | 麻豆av传媒蜜桃天美传媒 | 东京热男人av天堂 | 欧美xxxx黑人又粗又长 | 亚洲精品国产精品乱码视色 | 国精产品一品二品国精品69xx | 亚洲男人av香蕉爽爽爽爽 | 国内丰满熟女出轨videos | 国产性生大片免费观看性 | 国产一区二区三区影院 | 国产午夜无码视频在线观看 | 亚洲一区二区三区国产精华液 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品美女久久久久av爽李琼 | 性生交片免费无码看人 | 无套内谢老熟女 | 黑森林福利视频导航 | 人人妻人人澡人人爽欧美精品 | 18禁止看的免费污网站 | 国产绳艺sm调教室论坛 | 人妻与老人中文字幕 | 成人免费视频在线观看 | 狠狠综合久久久久综合网 | 西西人体www44rt大胆高清 | 欧美激情一区二区三区成人 | 亚洲精品久久久久中文第一幕 | 久久五月精品中文字幕 | 久久久久亚洲精品男人的天堂 | 国产sm调教视频在线观看 | 亚洲精品久久久久久久久久久 | 亚洲日本在线电影 | 超碰97人人射妻 | 人妻无码αv中文字幕久久琪琪布 | 人妻人人添人妻人人爱 | 欧美激情综合亚洲一二区 | 人妻尝试又大又粗久久 | 1000部啪啪未满十八勿入下载 | 无人区乱码一区二区三区 | 呦交小u女精品视频 | 欧美性猛交内射兽交老熟妇 | 国产人妻久久精品二区三区老狼 | 日产国产精品亚洲系列 | 国产内射爽爽大片视频社区在线 | 久久久久人妻一区精品色欧美 | 成人欧美一区二区三区黑人 | a片免费视频在线观看 | 成年女人永久免费看片 | 欧美喷潮久久久xxxxx | 国产成人精品久久亚洲高清不卡 | 国产高清不卡无码视频 | 国产99久久精品一区二区 | 久久久久免费精品国产 | 亲嘴扒胸摸屁股激烈网站 | 99久久久国产精品无码免费 | 成年女人永久免费看片 | 大地资源中文第3页 | 国产无遮挡又黄又爽免费视频 | 精品国产麻豆免费人成网站 | 色欲综合久久中文字幕网 | av小次郎收藏 | 高中生自慰www网站 | 奇米影视7777久久精品 | 久激情内射婷内射蜜桃人妖 | 黑人巨大精品欧美一区二区 | 少妇愉情理伦片bd | 亚洲精品www久久久 | 300部国产真实乱 | а√资源新版在线天堂 | 亚洲精品中文字幕 | 成人无码精品1区2区3区免费看 | 精品亚洲成av人在线观看 | 中文字幕精品av一区二区五区 | 中文精品久久久久人妻不卡 | 又色又爽又黄的美女裸体网站 | 激情内射亚州一区二区三区爱妻 | 十八禁真人啪啪免费网站 | 97夜夜澡人人爽人人喊中国片 | 欧美黑人巨大xxxxx | 人人妻人人澡人人爽欧美一区九九 | 国产极品美女高潮无套在线观看 | 国产精品久久久久7777 | 国产电影无码午夜在线播放 | 日韩人妻系列无码专区 | 77777熟女视频在线观看 а天堂中文在线官网 | 色综合天天综合狠狠爱 | 中文无码成人免费视频在线观看 | a在线亚洲男人的天堂 | 精品国产一区二区三区av 性色 | 天堂在线观看www | 青草青草久热国产精品 | 在线观看免费人成视频 | 内射巨臀欧美在线视频 | 天天摸天天碰天天添 | 亚洲aⅴ无码成人网站国产app | 国产精品无码一区二区桃花视频 | 亚洲精品一区二区三区四区五区 | 乱人伦人妻中文字幕无码久久网 | 国产另类ts人妖一区二区 | 无码福利日韩神码福利片 | 日本欧美一区二区三区乱码 | 色一情一乱一伦一区二区三欧美 | 欧美人与禽zoz0性伦交 | 成年女人永久免费看片 | 亚洲国产精品无码久久久久高潮 | 人妻有码中文字幕在线 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 疯狂三人交性欧美 | 日本护士xxxxhd少妇 | 午夜无码区在线观看 | 日韩精品成人一区二区三区 | 97久久国产亚洲精品超碰热 | 又大又黄又粗又爽的免费视频 | 色婷婷久久一区二区三区麻豆 | 红桃av一区二区三区在线无码av | 国产一区二区三区精品视频 | 亚洲 欧美 激情 小说 另类 | 国产成人无码av片在线观看不卡 | 亚洲七七久久桃花影院 | 国产两女互慰高潮视频在线观看 | 国产亚洲视频中文字幕97精品 | 色 综合 欧美 亚洲 国产 | 99久久精品日本一区二区免费 | 夜先锋av资源网站 | 97夜夜澡人人爽人人喊中国片 | 亚洲 a v无 码免 费 成 人 a v | 国产精品无套呻吟在线 | 欧美日韩在线亚洲综合国产人 | 性欧美疯狂xxxxbbbb | 东京热无码av男人的天堂 | 国产一区二区三区四区五区加勒比 | a在线亚洲男人的天堂 | 水蜜桃色314在线观看 | 少妇性l交大片欧洲热妇乱xxx | 性生交大片免费看女人按摩摩 | 国产亚洲精品精品国产亚洲综合 | 超碰97人人做人人爱少妇 | 亚洲精品一区二区三区四区五区 | 日韩视频 中文字幕 视频一区 | 国产精品人妻一区二区三区四 | 人人澡人人妻人人爽人人蜜桃 | www国产亚洲精品久久久日本 | 久久久久久a亚洲欧洲av冫 | 老司机亚洲精品影院无码 | 在线观看国产午夜福利片 | 日韩精品无码一区二区中文字幕 | 国产无av码在线观看 | av小次郎收藏 | 永久免费观看美女裸体的网站 | 久久综合九色综合欧美狠狠 | 少妇激情av一区二区 | 国产成人无码av一区二区 | 中文久久乱码一区二区 | 亚洲精品一区二区三区在线 | 亚洲午夜久久久影院 | 超碰97人人射妻 | 亚洲熟妇色xxxxx欧美老妇 | 女人被男人躁得好爽免费视频 | 国产特级毛片aaaaaa高潮流水 | 高清不卡一区二区三区 | 自拍偷自拍亚洲精品被多人伦好爽 | 久久综合网欧美色妞网 | 国产99久久精品一区二区 | 国产成人精品无码播放 | 成人片黄网站色大片免费观看 | 久久久亚洲欧洲日产国码αv | 人妻少妇精品无码专区二区 | 免费人成网站视频在线观看 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 兔费看少妇性l交大片免费 | 性色欲网站人妻丰满中文久久不卡 | 成 人 网 站国产免费观看 | 久久精品无码一区二区三区 | 天堂亚洲免费视频 | 成年美女黄网站色大免费全看 | 精品偷自拍另类在线观看 | 国产亚洲欧美日韩亚洲中文色 | 男人的天堂2018无码 | 国产精品沙发午睡系列 | 亚洲国产精品无码久久久久高潮 | 亚洲乱码中文字幕在线 | 妺妺窝人体色www婷婷 | 久久精品国产精品国产精品污 | 日本大香伊一区二区三区 | 天堂在线观看www | 日韩精品一区二区av在线 | 夜夜影院未满十八勿进 | 亚洲国产精品成人久久蜜臀 | 小sao货水好多真紧h无码视频 | 99国产精品白浆在线观看免费 | 天堂无码人妻精品一区二区三区 | 伊人久久大香线蕉av一区二区 | 亚洲精品久久久久avwww潮水 | 3d动漫精品啪啪一区二区中 | 性色欲情网站iwww九文堂 | 大地资源中文第3页 | 国产精品久久国产三级国 | 美女扒开屁股让男人桶 | 亚洲日韩一区二区 | 欧美激情一区二区三区成人 | 日本丰满熟妇videos | 丰腴饱满的极品熟妇 | 久久人人97超碰a片精品 | 亚洲国产av精品一区二区蜜芽 | 久久国语露脸国产精品电影 | 日日摸天天摸爽爽狠狠97 | 偷窥村妇洗澡毛毛多 | 国产艳妇av在线观看果冻传媒 | 性啪啪chinese东北女人 | 亚洲中文字幕乱码av波多ji | 特级做a爰片毛片免费69 | 日日天日日夜日日摸 | 国产精品第一区揄拍无码 | 激情五月综合色婷婷一区二区 | 久久精品人人做人人综合 | 国产黄在线观看免费观看不卡 | 中文字幕精品av一区二区五区 | 国产精品99久久精品爆乳 | 亚洲色大成网站www国产 | 少妇厨房愉情理9仑片视频 | 婷婷五月综合激情中文字幕 | 国产黄在线观看免费观看不卡 | 熟妇激情内射com | 激情亚洲一区国产精品 | 亚洲色在线无码国产精品不卡 | 国产成人综合在线女婷五月99播放 | 三上悠亚人妻中文字幕在线 | 亚洲国产欧美国产综合一区 | 精品人妻av区 | 国产精品高潮呻吟av久久 | 夜夜躁日日躁狠狠久久av | 亚洲成av人影院在线观看 | 亚洲精品午夜国产va久久成人 | 日本又色又爽又黄的a片18禁 | 欧美xxxx黑人又粗又长 | 国产电影无码午夜在线播放 | а√天堂www在线天堂小说 | 国产乱人无码伦av在线a | 精品久久久久香蕉网 | 亚洲精品国产第一综合99久久 | 久久天天躁狠狠躁夜夜免费观看 | 久久久久99精品成人片 | 国产性生大片免费观看性 | 黑人玩弄人妻中文在线 | 任你躁国产自任一区二区三区 | 日日碰狠狠丁香久燥 | 一本久道高清无码视频 | 特大黑人娇小亚洲女 | 成人影院yy111111在线观看 | 天天拍夜夜添久久精品 | 久久熟妇人妻午夜寂寞影院 | 免费无码av一区二区 | 亚洲 另类 在线 欧美 制服 | 精品日本一区二区三区在线观看 | 欧美丰满熟妇xxxx性ppx人交 | 成人一在线视频日韩国产 | 欧美35页视频在线观看 | 黑森林福利视频导航 | 精品无码一区二区三区爱欲 | 老头边吃奶边弄进去呻吟 | 强伦人妻一区二区三区视频18 | 无码人妻少妇伦在线电影 | 国内精品九九久久久精品 | 久久国产精品_国产精品 | 国产舌乚八伦偷品w中 | 女人被爽到呻吟gif动态图视看 | 成人片黄网站色大片免费观看 | 成人亚洲精品久久久久 | 欧美兽交xxxx×视频 | 国产精品久久久久影院嫩草 | 中文字幕av无码一区二区三区电影 | 免费国产黄网站在线观看 | 国产性生大片免费观看性 | 国产又爽又猛又粗的视频a片 | 夜夜躁日日躁狠狠久久av | av人摸人人人澡人人超碰下载 | 日本护士xxxxhd少妇 | 久在线观看福利视频 | 夜夜夜高潮夜夜爽夜夜爰爰 | 中文亚洲成a人片在线观看 | 天天拍夜夜添久久精品 | 少女韩国电视剧在线观看完整 | 中文字幕无线码免费人妻 | 国产精品久久久久无码av色戒 | 国产精品久久久久无码av色戒 | 国产亚洲人成在线播放 | 无码一区二区三区在线观看 | 欧美日韩久久久精品a片 | 正在播放老肥熟妇露脸 | 无码一区二区三区在线 | 国产国语老龄妇女a片 | 日本熟妇大屁股人妻 | 亚洲 欧美 激情 小说 另类 | 波多野42部无码喷潮在线 | 日韩在线不卡免费视频一区 | 国语自产偷拍精品视频偷 | 久久综合色之久久综合 | 婷婷综合久久中文字幕蜜桃三电影 | 荫蒂被男人添的好舒服爽免费视频 | 久久精品国产亚洲精品 | 久久精品女人天堂av免费观看 | 亚洲日韩中文字幕在线播放 | 水蜜桃亚洲一二三四在线 | 图片区 小说区 区 亚洲五月 | 国产人妖乱国产精品人妖 | 丝袜美腿亚洲一区二区 | 久久综合给久久狠狠97色 | 久久国产自偷自偷免费一区调 | 久久久久久久女国产乱让韩 | 国产极品美女高潮无套在线观看 | 欧美日本免费一区二区三区 | 乱码午夜-极国产极内射 | www国产亚洲精品久久网站 | 亚洲热妇无码av在线播放 | 国产av人人夜夜澡人人爽麻豆 | 亚洲一区二区观看播放 | 久久久中文字幕日本无吗 | 桃花色综合影院 | 自拍偷自拍亚洲精品10p | 国产一区二区三区日韩精品 | 亚洲综合无码一区二区三区 | 纯爱无遮挡h肉动漫在线播放 | 领导边摸边吃奶边做爽在线观看 | 国产真实乱对白精彩久久 | 国产三级精品三级男人的天堂 | 少妇性l交大片 | 日韩人妻少妇一区二区三区 | 国产免费无码一区二区视频 | 一本精品99久久精品77 | 国产高清不卡无码视频 | 亚洲综合无码一区二区三区 | 国产美女极度色诱视频www | 午夜无码人妻av大片色欲 | 色综合久久网 | 久久99精品久久久久婷婷 | 国产极品视觉盛宴 | 精品国产一区二区三区av 性色 | 人人妻人人澡人人爽欧美一区九九 | 东北女人啪啪对白 | 丰满人妻被黑人猛烈进入 | 国产人妻精品一区二区三区 | 又大又硬又黄的免费视频 | 在线观看国产一区二区三区 | 国内丰满熟女出轨videos | 高中生自慰www网站 | 我要看www免费看插插视频 | 国产综合在线观看 | 精品国偷自产在线 | 亚洲s码欧洲m码国产av | 日本一区二区三区免费高清 | 无码午夜成人1000部免费视频 | 又大又黄又粗又爽的免费视频 | 欧美精品免费观看二区 | 久久人人爽人人爽人人片av高清 | 一本一道久久综合久久 | 内射欧美老妇wbb | 无码人妻少妇伦在线电影 | 大肉大捧一进一出视频出来呀 | 亚洲男人av天堂午夜在 | 玩弄少妇高潮ⅹxxxyw | 久久综合香蕉国产蜜臀av | 最近中文2019字幕第二页 | 国产激情精品一区二区三区 | 久久精品女人的天堂av | 大乳丰满人妻中文字幕日本 | 欧美变态另类xxxx | 狠狠色噜噜狠狠狠狠7777米奇 | 无码人妻精品一区二区三区不卡 | 欧美人与物videos另类 | 黑人巨大精品欧美一区二区 | 中文久久乱码一区二区 | 美女扒开屁股让男人桶 | 免费视频欧美无人区码 | 牲欲强的熟妇农村老妇女视频 | 国产精华av午夜在线观看 | 永久黄网站色视频免费直播 | 国内精品久久毛片一区二区 | 无码人妻久久一区二区三区不卡 | 亚洲精品国偷拍自产在线麻豆 | 无码av最新清无码专区吞精 | 中文字幕人妻丝袜二区 | 初尝人妻少妇中文字幕 | 日本熟妇人妻xxxxx人hd | 嫩b人妻精品一区二区三区 | 亲嘴扒胸摸屁股激烈网站 | 亚洲国产午夜精品理论片 | 亚洲人成无码网www | 野狼第一精品社区 | 任你躁在线精品免费 | 国产艳妇av在线观看果冻传媒 | 无码毛片视频一区二区本码 | 人人爽人人爽人人片av亚洲 | 亚洲精品国产品国语在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 欧美熟妇另类久久久久久不卡 | 亚洲人成人无码网www国产 | 丰满少妇人妻久久久久久 | 成人试看120秒体验区 | 国产午夜视频在线观看 | 波多野42部无码喷潮在线 | 国产成人综合色在线观看网站 | 久久亚洲精品中文字幕无男同 | 精品久久久久香蕉网 | 中文字幕日韩精品一区二区三区 | 欧美人与禽zoz0性伦交 | 久久久久久a亚洲欧洲av冫 | 人人妻人人藻人人爽欧美一区 | 国产无套内射久久久国产 | 免费观看的无遮挡av | 国产精品无码永久免费888 | 激情亚洲一区国产精品 | 成人动漫在线观看 | 国产一区二区三区四区五区加勒比 | 亚洲综合无码久久精品综合 | 久久精品丝袜高跟鞋 | 在线观看国产一区二区三区 | 国产偷抇久久精品a片69 | 又湿又紧又大又爽a视频国产 | 日本丰满护士爆乳xxxx | 国产在线精品一区二区三区直播 | 中文字幕 亚洲精品 第1页 | 日本护士xxxxhd少妇 | 熟妇女人妻丰满少妇中文字幕 | 少妇久久久久久人妻无码 | 久久亚洲精品中文字幕无男同 | 国产综合久久久久鬼色 | 久久国产精品偷任你爽任你 | a在线观看免费网站大全 | 亚洲天堂2017无码 | 欧美精品国产综合久久 | 性啪啪chinese东北女人 | 成人无码精品一区二区三区 | 国产午夜无码视频在线观看 | 亚洲中文字幕久久无码 | 亚洲а∨天堂久久精品2021 | 亚洲精品久久久久中文第一幕 | 在线观看欧美一区二区三区 | 亚洲中文字幕在线观看 | 日本va欧美va欧美va精品 | 少妇无码av无码专区在线观看 | 亚洲精品国产第一综合99久久 | 婷婷色婷婷开心五月四房播播 | 欧美性色19p | 国产高清不卡无码视频 | 成熟女人特级毛片www免费 | 国产麻豆精品精东影业av网站 | 东京热无码av男人的天堂 | 初尝人妻少妇中文字幕 | 精品日本一区二区三区在线观看 | 丰满妇女强制高潮18xxxx | 欧洲极品少妇 | 国产农村乱对白刺激视频 | 国产精品亚洲а∨无码播放麻豆 | 久久天天躁夜夜躁狠狠 | 亚洲一区二区三区偷拍女厕 | 精品国偷自产在线视频 | 国产在线aaa片一区二区99 | 久久无码中文字幕免费影院蜜桃 | 亚洲精品一区三区三区在线观看 | 日韩欧美成人免费观看 | 日日摸日日碰夜夜爽av | 亚洲精品成a人在线观看 | 大肉大捧一进一出好爽视频 | 国产精品永久免费视频 | 中文字幕无码日韩欧毛 | 久久久久99精品成人片 | 久久精品一区二区三区四区 | 在线观看国产一区二区三区 | 性色av无码免费一区二区三区 | 亚洲爆乳大丰满无码专区 | 性欧美疯狂xxxxbbbb | 日本又色又爽又黄的a片18禁 | 99er热精品视频 | 亚洲另类伦春色综合小说 | 亚洲欧美精品伊人久久 | 国产内射老熟女aaaa | 国产精品igao视频网 | 人人澡人人妻人人爽人人蜜桃 | 亚洲毛片av日韩av无码 | 亚洲自偷自拍另类第1页 | 亚洲中文字幕成人无码 | 日本肉体xxxx裸交 | 丰满岳乱妇在线观看中字无码 | 国产精品亚洲lv粉色 | 久久精品人人做人人综合 | 国产精品无码成人午夜电影 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲 欧美 激情 小说 另类 | 4hu四虎永久在线观看 | 精品国产麻豆免费人成网站 | 少妇被粗大的猛进出69影院 | 亚洲一区二区三区国产精华液 | 丰满护士巨好爽好大乳 | √天堂资源地址中文在线 | а√天堂www在线天堂小说 | yw尤物av无码国产在线观看 | 免费看男女做好爽好硬视频 | 国产成人一区二区三区别 | 中文字幕人成乱码熟女app | 国产一区二区三区影院 | 无码av最新清无码专区吞精 | 国产精品美女久久久久av爽李琼 | 六月丁香婷婷色狠狠久久 | 亚洲阿v天堂在线 | 成人性做爰aaa片免费看不忠 | 欧美日韩视频无码一区二区三 | 亚洲一区二区三区四区 | 欧美日韩一区二区三区自拍 | 日韩人妻少妇一区二区三区 | 无码福利日韩神码福利片 | 色综合久久久久综合一本到桃花网 | 国产亲子乱弄免费视频 | 国产美女极度色诱视频www | 国产成人无码a区在线观看视频app | 亚洲一区av无码专区在线观看 | aa片在线观看视频在线播放 | 成人性做爰aaa片免费看不忠 | 亚洲日本在线电影 | 在线播放免费人成毛片乱码 | 精品无码av一区二区三区 | 大肉大捧一进一出好爽视频 | 久久精品丝袜高跟鞋 | 图片小说视频一区二区 | 国产情侣作爱视频免费观看 | 亚洲欧洲日本无在线码 | 亚洲a无码综合a国产av中文 | 强奷人妻日本中文字幕 | 99er热精品视频 | 国产办公室秘书无码精品99 | 性色欲情网站iwww九文堂 | 综合激情五月综合激情五月激情1 | 精品国产青草久久久久福利 | 久久久久久久久蜜桃 | 亚洲一区二区三区国产精华液 | 国产另类ts人妖一区二区 | 思思久久99热只有频精品66 | 人妻少妇被猛烈进入中文字幕 | 巨爆乳无码视频在线观看 | 久久www免费人成人片 | 久久国产劲爆∧v内射 | 日日噜噜噜噜夜夜爽亚洲精品 | 性生交大片免费看l | 人人妻人人澡人人爽精品欧美 | 俄罗斯老熟妇色xxxx | 无码人妻丰满熟妇区五十路百度 | 黑人玩弄人妻中文在线 | 麻豆精品国产精华精华液好用吗 | 色婷婷综合中文久久一本 | 久久久精品人妻久久影视 | www一区二区www免费 | 最近免费中文字幕中文高清百度 | 精品无码国产一区二区三区av | 亚洲最大成人网站 | √8天堂资源地址中文在线 | 国产情侣作爱视频免费观看 | 狂野欧美性猛xxxx乱大交 | 成人免费视频视频在线观看 免费 | av小次郎收藏 | 亚洲一区av无码专区在线观看 | 亚洲熟女一区二区三区 | 欧美性黑人极品hd | 精品久久久无码人妻字幂 | 性开放的女人aaa片 | 久久www免费人成人片 | 国产精品va在线播放 | 色 综合 欧美 亚洲 国产 | 亚洲欧美精品aaaaaa片 | 国产明星裸体无码xxxx视频 | 亚洲日本va中文字幕 | 99久久人妻精品免费二区 | 欧美人与牲动交xxxx | 国产成人一区二区三区在线观看 | 99riav国产精品视频 | 欧美日韩一区二区三区自拍 | 亚洲人成人无码网www国产 | 中文无码伦av中文字幕 | 日本熟妇浓毛 | 久久亚洲国产成人精品性色 | 亚洲成av人影院在线观看 | 色婷婷欧美在线播放内射 | 久久久精品国产sm最大网站 | av无码不卡在线观看免费 | 亚洲成a人片在线观看无码3d | 中文字幕精品av一区二区五区 | 色噜噜亚洲男人的天堂 | 欧美第一黄网免费网站 | 婷婷丁香五月天综合东京热 | 久久久久se色偷偷亚洲精品av | 亚洲欧美中文字幕5发布 | 国产午夜福利100集发布 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产人妻精品一区二区三区不卡 | 狠狠亚洲超碰狼人久久 | 亚洲欧美日韩成人高清在线一区 | 亚洲色偷偷男人的天堂 | 中文字幕乱妇无码av在线 | 成人精品视频一区二区 | 亚洲精品久久久久中文第一幕 | 久青草影院在线观看国产 | 国产精品无码成人午夜电影 | 天天躁夜夜躁狠狠是什么心态 | 蜜桃av抽搐高潮一区二区 | a在线观看免费网站大全 | 无码福利日韩神码福利片 | 成人无码视频免费播放 | 国产成人无码a区在线观看视频app | 欧美三级a做爰在线观看 | 国产精品无码一区二区桃花视频 | 国产亚洲美女精品久久久2020 | 久久99精品国产麻豆蜜芽 | 亚洲综合无码久久精品综合 | 亚洲精品综合五月久久小说 | 欧美三级a做爰在线观看 | 在线成人www免费观看视频 | 国产日产欧产精品精品app | 久久久久亚洲精品男人的天堂 | 俺去俺来也在线www色官网 | 无码精品国产va在线观看dvd | 精品欧美一区二区三区久久久 | 国产99久久精品一区二区 | 亚洲精品国偷拍自产在线观看蜜桃 | 色情久久久av熟女人妻网站 | 领导边摸边吃奶边做爽在线观看 | 狂野欧美性猛交免费视频 | 久久久久久av无码免费看大片 | 狠狠色丁香久久婷婷综合五月 | 久久久久久亚洲精品a片成人 | 欧美日本精品一区二区三区 | 久久精品国产一区二区三区 | 久久精品人人做人人综合试看 | 成 人 免费观看网站 | 狠狠色色综合网站 | 色欲人妻aaaaaaa无码 | 日本欧美一区二区三区乱码 | 成熟女人特级毛片www免费 | 中文字幕无线码免费人妻 | 久久国产精品_国产精品 | 在线观看国产午夜福利片 | 午夜福利一区二区三区在线观看 | 久久久久av无码免费网 | 国产成人精品优优av | 又大又硬又黄的免费视频 | 天天摸天天碰天天添 | 精品一区二区三区无码免费视频 | 一本久道久久综合狠狠爱 | 蜜桃av抽搐高潮一区二区 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 51国偷自产一区二区三区 | 97无码免费人妻超级碰碰夜夜 | 久久久久久国产精品无码下载 | 在线a亚洲视频播放在线观看 | 伦伦影院午夜理论片 | 国产超级va在线观看视频 | 中文字幕无码av激情不卡 | 亚洲成av人片在线观看无码不卡 | 中文精品久久久久人妻不卡 | 欧美日韩一区二区三区自拍 | 中文字幕无码日韩欧毛 | 午夜理论片yy44880影院 | 熟妇人妻激情偷爽文 | 377p欧洲日本亚洲大胆 | 2019午夜福利不卡片在线 | 久久午夜夜伦鲁鲁片无码免费 | 熟妇人妻无码xxx视频 | 亚洲欧美日韩国产精品一区二区 | 久久99精品久久久久久动态图 | 野狼第一精品社区 | 国产精品国产自线拍免费软件 | 国产又爽又黄又刺激的视频 | 熟女俱乐部五十路六十路av | 欧美激情一区二区三区成人 | 亚洲色www成人永久网址 | 国产激情精品一区二区三区 | 伊人色综合久久天天小片 | 成年女人永久免费看片 | 波多野结衣av在线观看 | 正在播放老肥熟妇露脸 | 色狠狠av一区二区三区 | 久久亚洲a片com人成 | 无码人妻av免费一区二区三区 | 图片区 小说区 区 亚洲五月 | 亚洲热妇无码av在线播放 | 亚洲国产精华液网站w | 中文字幕+乱码+中文字幕一区 | 亚洲精品欧美二区三区中文字幕 | 亚洲精品一区二区三区四区五区 | 国产亚洲精品久久久久久久久动漫 | 欧美乱妇无乱码大黄a片 | 日韩精品无码免费一区二区三区 | 中文字幕乱码人妻无码久久 | 伦伦影院午夜理论片 | www国产亚洲精品久久网站 | 强伦人妻一区二区三区视频18 | 亚洲综合无码久久精品综合 | 中文字幕人妻丝袜二区 | 国产亚洲日韩欧美另类第八页 | 丰满护士巨好爽好大乳 | 国产精品成人av在线观看 | 领导边摸边吃奶边做爽在线观看 | 一本大道久久东京热无码av | 中文字幕av无码一区二区三区电影 | 曰韩无码二三区中文字幕 | 无码乱肉视频免费大全合集 | 精品人人妻人人澡人人爽人人 | 国产农村乱对白刺激视频 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 成人三级无码视频在线观看 | 台湾无码一区二区 | 超碰97人人做人人爱少妇 | 一本久久伊人热热精品中文字幕 | 欧美日韩人成综合在线播放 | 亚洲人成影院在线观看 | 国产精品鲁鲁鲁 | 久久精品中文字幕大胸 | 国产人妻人伦精品1国产丝袜 | 红桃av一区二区三区在线无码av | 国产深夜福利视频在线 | 日日碰狠狠丁香久燥 | 日韩欧美中文字幕在线三区 | 中文无码成人免费视频在线观看 | 高潮毛片无遮挡高清免费视频 | 成熟妇人a片免费看网站 | 午夜精品久久久久久久久 | 激情人妻另类人妻伦 | 日日摸夜夜摸狠狠摸婷婷 | 日本xxxx色视频在线观看免费 | 熟女俱乐部五十路六十路av | 欧美丰满少妇xxxx性 | 无码一区二区三区在线观看 | 精品无码国产一区二区三区av | 久久综合久久自在自线精品自 | 成人免费视频视频在线观看 免费 | 狠狠色丁香久久婷婷综合五月 | 国产办公室秘书无码精品99 | 亚洲午夜久久久影院 | 精品少妇爆乳无码av无码专区 | 欧美日韩久久久精品a片 | 青青草原综合久久大伊人精品 | 亚洲一区二区三区香蕉 | 大地资源网第二页免费观看 | 日日摸夜夜摸狠狠摸婷婷 | 久久99热只有频精品8 | 亚洲精品一区二区三区在线 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲欧美色中文字幕在线 | 性啪啪chinese东北女人 | 影音先锋中文字幕无码 | 99久久久无码国产aaa精品 | 国产精品久久久久无码av色戒 | 国产精品99久久精品爆乳 | 国产精品久久久久9999小说 | 日韩在线不卡免费视频一区 | 玩弄人妻少妇500系列视频 | 久久久久成人片免费观看蜜芽 | 极品嫩模高潮叫床 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 人人爽人人澡人人高潮 | 亚洲经典千人经典日产 | 桃花色综合影院 | 国语自产偷拍精品视频偷 | av香港经典三级级 在线 | 亚洲综合伊人久久大杳蕉 | 亚洲国产高清在线观看视频 | 久久综合给久久狠狠97色 | 日日天干夜夜狠狠爱 | 中文字幕无码免费久久9一区9 | 欧美日韩久久久精品a片 | 国产高清不卡无码视频 | 亚洲人成无码网www | 国产精品自产拍在线观看 | 欧美老妇与禽交 | 亚洲大尺度无码无码专区 | 亚洲国产av美女网站 | 亚洲色成人中文字幕网站 | 色婷婷香蕉在线一区二区 | 曰本女人与公拘交酡免费视频 | 东京热男人av天堂 | 国产97色在线 | 免 | 欧美日韩一区二区免费视频 | 丰满人妻翻云覆雨呻吟视频 | 蜜桃臀无码内射一区二区三区 | 国产精品无套呻吟在线 | 国产凸凹视频一区二区 | 国产色xx群视频射精 | 成人无码视频免费播放 | 人人妻人人澡人人爽欧美一区 | 国产精品无码久久av | 又黄又爽又色的视频 | 日韩成人一区二区三区在线观看 | 中文字幕无码乱人伦 | 中文字幕中文有码在线 | 成人综合网亚洲伊人 | 日日噜噜噜噜夜夜爽亚洲精品 | 国内丰满熟女出轨videos | 成人无码影片精品久久久 | 国产成人人人97超碰超爽8 | 四十如虎的丰满熟妇啪啪 | 久久综合九色综合97网 | 少妇性l交大片欧洲热妇乱xxx | 无人区乱码一区二区三区 | 久久久久国色av免费观看性色 | 久久精品国产精品国产精品污 | 久久久国产精品无码免费专区 | 3d动漫精品啪啪一区二区中 | 无人区乱码一区二区三区 | 久久精品人妻少妇一区二区三区 | 亚洲中文字幕无码一久久区 | 亚洲人成无码网www | 精品乱子伦一区二区三区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 丝袜人妻一区二区三区 | 午夜福利试看120秒体验区 | 久久99久久99精品中文字幕 | 国产一区二区不卡老阿姨 | 无套内射视频囯产 | 精品国产aⅴ无码一区二区 | 精品午夜福利在线观看 | 国产欧美精品一区二区三区 | 国产亚洲精品久久久久久久久动漫 | 久久久久久九九精品久 | 国内精品人妻无码久久久影院蜜桃 | 无套内谢的新婚少妇国语播放 | 特黄特色大片免费播放器图片 | 美女扒开屁股让男人桶 | 婷婷色婷婷开心五月四房播播 | 亚洲 欧美 激情 小说 另类 | 国产亚洲欧美在线专区 | 奇米影视7777久久精品人人爽 | 成人精品一区二区三区中文字幕 | 亚洲 高清 成人 动漫 | a片免费视频在线观看 | 噜噜噜亚洲色成人网站 | 丝袜足控一区二区三区 | 一本无码人妻在中文字幕免费 | 国产精品人妻一区二区三区四 | 久久无码专区国产精品s | 高清国产亚洲精品自在久久 | 午夜无码人妻av大片色欲 | 国产特级毛片aaaaaa高潮流水 | 内射后入在线观看一区 | www成人国产高清内射 | 台湾无码一区二区 | 成人女人看片免费视频放人 | 久9re热视频这里只有精品 | 国产精品久久国产三级国 | 东京热一精品无码av | 丰满妇女强制高潮18xxxx | 99久久久无码国产aaa精品 | 久久国内精品自在自线 | 免费国产成人高清在线观看网站 | 人妻中文无码久热丝袜 | 露脸叫床粗话东北少妇 | 未满成年国产在线观看 | 精品成人av一区二区三区 | 久久人人爽人人人人片 | 色综合久久久久综合一本到桃花网 | 亚洲中文字幕av在天堂 | 一个人看的www免费视频在线观看 | 捆绑白丝粉色jk震动捧喷白浆 | 啦啦啦www在线观看免费视频 | 国产精品无码永久免费888 | 国产精品.xx视频.xxtv | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 宝宝好涨水快流出来免费视频 | 久久精品无码一区二区三区 | 无码人妻出轨黑人中文字幕 | 精品熟女少妇av免费观看 | 久久综合给合久久狠狠狠97色 | 欧美成人午夜精品久久久 | 中文字幕无码免费久久99 | 两性色午夜免费视频 | 欧美熟妇另类久久久久久不卡 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 日日夜夜撸啊撸 | 大胆欧美熟妇xx | 欧美成人午夜精品久久久 | 成在人线av无码免费 | 亚洲欧洲日本无在线码 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 男女超爽视频免费播放 | 久久精品人人做人人综合 | 奇米影视7777久久精品 | 中文字幕av日韩精品一区二区 | 精品人妻人人做人人爽 | 国产精品美女久久久久av爽李琼 | 日本一卡二卡不卡视频查询 | 色狠狠av一区二区三区 | 亚洲精品久久久久中文第一幕 | 亚洲色偷偷男人的天堂 | 亚洲国产av美女网站 | 色婷婷综合中文久久一本 | 未满成年国产在线观看 | 日欧一片内射va在线影院 | 呦交小u女精品视频 | av在线亚洲欧洲日产一区二区 | 久久精品国产精品国产精品污 | 精品国产成人一区二区三区 | 99国产欧美久久久精品 | 少妇无码吹潮 | 两性色午夜视频免费播放 | 欧美国产日韩亚洲中文 | 国产人妻人伦精品 | 亚洲自偷精品视频自拍 | 天堂亚洲2017在线观看 | 国内丰满熟女出轨videos | 亚洲精品鲁一鲁一区二区三区 | 欧洲欧美人成视频在线 | 男女猛烈xx00免费视频试看 | 精品水蜜桃久久久久久久 | 亚洲精品成a人在线观看 | 正在播放东北夫妻内射 | 午夜无码人妻av大片色欲 | 精品水蜜桃久久久久久久 | 日本在线高清不卡免费播放 | 国产午夜亚洲精品不卡下载 | 国产sm调教视频在线观看 | 中文字幕日产无线码一区 | 亚洲s色大片在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 成人免费无码大片a毛片 | 精品国偷自产在线视频 | 性做久久久久久久免费看 | 精品人妻人人做人人爽夜夜爽 | 无码人妻出轨黑人中文字幕 | 麻豆国产人妻欲求不满谁演的 | 色一情一乱一伦一区二区三欧美 | 亚洲性无码av中文字幕 | 少妇性俱乐部纵欲狂欢电影 | 亚洲欧美日韩成人高清在线一区 | 精品一二三区久久aaa片 | 国产深夜福利视频在线 | 亚洲中文字幕乱码av波多ji | 亚洲一区二区观看播放 | 中文字幕无码免费久久99 | 丝袜足控一区二区三区 | 一本色道久久综合亚洲精品不卡 | 久久久精品欧美一区二区免费 | 俄罗斯老熟妇色xxxx | 久久成人a毛片免费观看网站 | 丰满人妻一区二区三区免费视频 | 中文无码成人免费视频在线观看 | 亚洲另类伦春色综合小说 | 日韩精品无码一本二本三本色 | 国产成人无码区免费内射一片色欲 | 亚洲 日韩 欧美 成人 在线观看 | 成人三级无码视频在线观看 | 久久久久人妻一区精品色欧美 | 日本www一道久久久免费榴莲 | 小泽玛莉亚一区二区视频在线 | 亚洲中文字幕av在天堂 | www成人国产高清内射 | 性色欲网站人妻丰满中文久久不卡 | 青春草在线视频免费观看 | 精品久久8x国产免费观看 | 呦交小u女精品视频 | 国产精品无套呻吟在线 | 亚洲第一网站男人都懂 | 中文字幕乱码人妻二区三区 | 无码任你躁久久久久久久 | 日产精品99久久久久久 | 人妻插b视频一区二区三区 | 免费播放一区二区三区 | 中文毛片无遮挡高清免费 | 蜜臀aⅴ国产精品久久久国产老师 | 国产suv精品一区二区五 | 国内揄拍国内精品少妇国语 | 1000部夫妻午夜免费 | 天堂久久天堂av色综合 | 国产免费久久精品国产传媒 | 日韩精品a片一区二区三区妖精 | 中文字幕无码免费久久99 | 内射巨臀欧美在线视频 | 在线欧美精品一区二区三区 | a片免费视频在线观看 | 午夜福利不卡在线视频 | 青青青爽视频在线观看 | 亚洲一区二区三区无码久久 | 国产av无码专区亚洲awww | 国产精品va在线观看无码 | 亚洲色偷偷偷综合网 | 无遮挡啪啪摇乳动态图 | 国产香蕉尹人视频在线 | 高潮毛片无遮挡高清免费视频 | 无码毛片视频一区二区本码 | 少妇性荡欲午夜性开放视频剧场 | 麻豆国产人妻欲求不满 | 国产成人一区二区三区别 | 一本久道久久综合狠狠爱 | 国产在线一区二区三区四区五区 | 全黄性性激高免费视频 | 精品国产国产综合精品 | 亚洲狠狠色丁香婷婷综合 | 欧美肥老太牲交大战 | 国产精品人人爽人人做我的可爱 | av小次郎收藏 | 狂野欧美性猛交免费视频 | 大肉大捧一进一出视频出来呀 | 久久久久se色偷偷亚洲精品av | 天干天干啦夜天干天2017 | 天海翼激烈高潮到腰振不止 | 99精品国产综合久久久久五月天 | 国产成人一区二区三区在线观看 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲色成人中文字幕网站 | 一本久久a久久精品亚洲 | 亚洲一区二区三区 | 在线a亚洲视频播放在线观看 | 亚洲成在人网站无码天堂 | 中文字幕乱码亚洲无线三区 | 暴力强奷在线播放无码 | 色欲久久久天天天综合网精品 | 亚洲人成无码网www | 国产人妖乱国产精品人妖 | 久久精品人人做人人综合试看 | 娇妻被黑人粗大高潮白浆 | 亚洲熟妇色xxxxx欧美老妇 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲欧美精品伊人久久 | 奇米影视888欧美在线观看 | 永久免费精品精品永久-夜色 | 天堂一区人妻无码 | 又湿又紧又大又爽a视频国产 | 一本久久a久久精品vr综合 | 99久久精品日本一区二区免费 | 99久久精品国产一区二区蜜芽 | 日韩亚洲欧美中文高清在线 | 欧美乱妇无乱码大黄a片 | 又大又硬又爽免费视频 | 欧洲美熟女乱又伦 | 日本饥渴人妻欲求不满 | 欧美阿v高清资源不卡在线播放 | 福利一区二区三区视频在线观看 | 男女猛烈xx00免费视频试看 | 久久久国产精品无码免费专区 | 国产又粗又硬又大爽黄老大爷视 | 乱人伦人妻中文字幕无码 | 亚洲综合另类小说色区 | 色 综合 欧美 亚洲 国产 | 久久久www成人免费毛片 | 久久午夜夜伦鲁鲁片无码免费 | 欧美 亚洲 国产 另类 | 精品成人av一区二区三区 | 国产电影无码午夜在线播放 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲娇小与黑人巨大交 | 国产免费无码一区二区视频 | 国产亚洲精品久久久久久久久动漫 | 国产国语老龄妇女a片 | 国产手机在线αⅴ片无码观看 | 亚洲国产欧美在线成人 | 欧美熟妇另类久久久久久不卡 | 日韩精品无码一区二区中文字幕 | 精品成人av一区二区三区 | 免费播放一区二区三区 | 久久亚洲日韩精品一区二区三区 | 无码精品人妻一区二区三区av | 国产极品美女高潮无套在线观看 | 欧美大屁股xxxxhd黑色 | 荫蒂被男人添的好舒服爽免费视频 | 国产极品美女高潮无套在线观看 | 装睡被陌生人摸出水好爽 | 台湾无码一区二区 | 真人与拘做受免费视频 | 国产一区二区三区影院 | 国产综合久久久久鬼色 | 国产精品久久久久影院嫩草 | 国产情侣作爱视频免费观看 | 中文字幕无线码免费人妻 | 双乳奶水饱满少妇呻吟 | 99久久久无码国产精品免费 | 午夜精品一区二区三区在线观看 | 亚洲色大成网站www | 一本久道久久综合狠狠爱 | 国产极品视觉盛宴 | 激情综合激情五月俺也去 | 久久亚洲中文字幕精品一区 | 在线а√天堂中文官网 | 精品乱子伦一区二区三区 | √天堂中文官网8在线 | 婷婷丁香五月天综合东京热 | 精品乱码久久久久久久 | 色窝窝无码一区二区三区色欲 | 久久天天躁夜夜躁狠狠 | 国产人妻人伦精品1国产丝袜 | 国产莉萝无码av在线播放 | 久久无码中文字幕免费影院蜜桃 | 亚洲精品久久久久久一区二区 | 欧美 日韩 人妻 高清 中文 | 999久久久国产精品消防器材 | 欧美 日韩 亚洲 在线 | 国产舌乚八伦偷品w中 | 丰满少妇弄高潮了www | 日日摸夜夜摸狠狠摸婷婷 | 国产偷国产偷精品高清尤物 | 精品水蜜桃久久久久久久 | 久久亚洲a片com人成 | 国产精品久久久久无码av色戒 | 无套内谢的新婚少妇国语播放 | 亚洲成色在线综合网站 | 装睡被陌生人摸出水好爽 | 中文字幕无码热在线视频 | 色欲综合久久中文字幕网 | 无码av免费一区二区三区试看 | 强奷人妻日本中文字幕 | 久久熟妇人妻午夜寂寞影院 | 日本熟妇大屁股人妻 | 十八禁真人啪啪免费网站 | av人摸人人人澡人人超碰下载 | 久久精品女人天堂av免费观看 | 久久久中文字幕日本无吗 | 51国偷自产一区二区三区 | 97人妻精品一区二区三区 | 亚洲国产av精品一区二区蜜芽 | 中文字幕乱码人妻二区三区 | 成人一在线视频日韩国产 | 国产国产精品人在线视 | 亚洲欧美日韩国产精品一区二区 | 国产乱人伦av在线无码 | 宝宝好涨水快流出来免费视频 | 久久99热只有频精品8 | 女人和拘做爰正片视频 | 中文字幕无码av激情不卡 | 欧美丰满少妇xxxx性 | 中文字幕无码热在线视频 | 未满小14洗澡无码视频网站 | 亚洲中文字幕av在天堂 | 性色欲情网站iwww九文堂 | 99精品无人区乱码1区2区3区 | 亚洲七七久久桃花影院 | 在线亚洲高清揄拍自拍一品区 | 正在播放东北夫妻内射 | 中文字幕精品av一区二区五区 | 亚洲日韩一区二区三区 | 国产精品高潮呻吟av久久4虎 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产精品亚洲五月天高清 | 久久精品女人的天堂av | 日韩视频 中文字幕 视频一区 | 国产真实夫妇视频 | 亚洲精品午夜国产va久久成人 | av无码电影一区二区三区 | 大肉大捧一进一出视频出来呀 | 国产精品第一区揄拍无码 | 中文字幕乱妇无码av在线 | 国产av无码专区亚洲awww | 国产精品福利视频导航 | 一本久道久久综合婷婷五月 | 正在播放东北夫妻内射 | 伊人色综合久久天天小片 | 国内揄拍国内精品少妇国语 | 久精品国产欧美亚洲色aⅴ大片 | 鲁大师影院在线观看 | 四虎4hu永久免费 | 曰韩无码二三区中文字幕 | 亚洲一区二区三区含羞草 | 在线观看国产午夜福利片 | 无码纯肉视频在线观看 | 亚洲理论电影在线观看 | 成人影院yy111111在线观看 | 日本肉体xxxx裸交 | 丰满诱人的人妻3 | 国产精品人人爽人人做我的可爱 | 成人无码影片精品久久久 | 亚洲男女内射在线播放 | 亚洲精品综合一区二区三区在线 | 欧美精品在线观看 | 精品国产麻豆免费人成网站 | 1000部夫妻午夜免费 | 亚洲一区av无码专区在线观看 | 久久久精品人妻久久影视 | 内射巨臀欧美在线视频 | 亚洲男人av天堂午夜在 | 亚洲色无码一区二区三区 | 国内精品九九久久久精品 | 国产精品99爱免费视频 | a在线亚洲男人的天堂 | 成年女人永久免费看片 | 亚洲中文字幕无码中文字在线 | 国产精品无码一区二区桃花视频 | 午夜精品一区二区三区在线观看 | 日本大乳高潮视频在线观看 | 中文亚洲成a人片在线观看 | 色欲人妻aaaaaaa无码 | 国产精品自产拍在线观看 | 国产午夜视频在线观看 | 国产在线无码精品电影网 | 一区二区传媒有限公司 | 久久久亚洲欧洲日产国码αv | 波多野结衣av在线观看 | 久久zyz资源站无码中文动漫 | 久久五月精品中文字幕 | 性欧美熟妇videofreesex | 国产亚洲视频中文字幕97精品 | 在线播放免费人成毛片乱码 | 精品久久久久香蕉网 | 午夜丰满少妇性开放视频 | 亚洲无人区一区二区三区 | 日韩少妇内射免费播放 | 久久综合九色综合97网 | 日本成熟视频免费视频 | 欧美自拍另类欧美综合图片区 | 学生妹亚洲一区二区 | 色综合久久88色综合天天 | 久久久av男人的天堂 | 熟妇女人妻丰满少妇中文字幕 | 国产乱人无码伦av在线a | 亚洲精品国偷拍自产在线麻豆 | 一本大道久久东京热无码av | 国产午夜亚洲精品不卡下载 | 国产精品久久久久7777 | 国产又粗又硬又大爽黄老大爷视 | 兔费看少妇性l交大片免费 | 天天拍夜夜添久久精品大 | 欧美真人作爱免费视频 | 久久久精品456亚洲影院 | 丰满诱人的人妻3 | 自拍偷自拍亚洲精品被多人伦好爽 | 性色av无码免费一区二区三区 | 人妻有码中文字幕在线 | 无码人妻出轨黑人中文字幕 | 国产亲子乱弄免费视频 | 精品一二三区久久aaa片 | 亚洲国精产品一二二线 | 牛和人交xxxx欧美 | 亚洲国产成人a精品不卡在线 | 久久国产精品偷任你爽任你 | 综合人妻久久一区二区精品 | 无码人妻av免费一区二区三区 | 午夜性刺激在线视频免费 | 国产精品办公室沙发 | 国产suv精品一区二区五 | 日本护士xxxxhd少妇 | 又大又硬又黄的免费视频 | 国产亲子乱弄免费视频 | 成 人 免费观看网站 | 国产人妻精品一区二区三区不卡 | 性欧美熟妇videofreesex | 欧美性生交活xxxxxdddd | 97人妻精品一区二区三区 | 中文字幕日韩精品一区二区三区 | av在线亚洲欧洲日产一区二区 | 亚洲欧美国产精品专区久久 | 久久久www成人免费毛片 | 免费人成网站视频在线观看 | 国内少妇偷人精品视频 | 2020久久超碰国产精品最新 | 国产精品爱久久久久久久 | 日本一区二区三区免费播放 | 久久综合激激的五月天 | 亚洲国产欧美日韩精品一区二区三区 | 国产精品美女久久久久av爽李琼 | a在线观看免费网站大全 | 桃花色综合影院 | 亚洲最大成人网站 | 国产精品高潮呻吟av久久4虎 | 国产精品视频免费播放 | 国产午夜福利100集发布 | 麻豆蜜桃av蜜臀av色欲av | 福利一区二区三区视频在线观看 | 综合激情五月综合激情五月激情1 | 国产一区二区三区日韩精品 | 国产精品第一国产精品 | 给我免费的视频在线观看 | 国产欧美亚洲精品a | 成年女人永久免费看片 | 国产色精品久久人妻 | 亚洲国产欧美国产综合一区 | 精品人妻人人做人人爽 | 亚洲欧美日韩国产精品一区二区 | 少妇愉情理伦片bd | 国产黄在线观看免费观看不卡 | 国产精品爱久久久久久久 | 荫蒂添的好舒服视频囗交 | 国产精品毛片一区二区 |