国产久_亚欧精品一区_久久亚洲美女_99精品在线观看_日韩成人三级_久久精品久久久久

顯示源代碼
可視域分析
 開發(fā)文檔
            <!DOCTYPE html>

<html>
<head>
    <meta charset='UTF-8'/>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no'/>
    <link  rel='stylesheet'/>
    <script src='http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js'></script>
    <style>
        body {
            margin: 0;
            padding: 0;
        }
        #container {
            position: absolute;
            top: 0;
            bottom: 0;
            width: 100%;
        }
        .info{
            position: absolute;
            top:0;
            left: 0;
            right: 0;
            z-index: 9;
            text-align: center;
            height: 30px;
            line-height: 30px;
            color: #909399;
            background: #f4f4f5;
        }
    </style>
    <title>part_test</title>
</head>
<body>
    <div class="info">
    點擊地圖可以獲取當(dāng)前位置的可視域分析(藍色表示可見,紅色不為可見)
</div>
<div id='container'></div>
<script>
    bmgl.Config.HTTP_URL = 'http://ua.bigemap.com:30081/bmsdk/';
    var viewer = new bmgl.Viewer('container', {mapId: 'bigemap.dc-tian-w-satellite',requestRenderMode:false,terrainId: 'bigemap.dc-terrain'});
    //設(shè)置初始位置
    viewer.camera.setView({
        destination: bmgl.Cartesian3.fromDegrees(103.59526245619938,30.9814012061604,3837.4144546),
        orientation: {"heading":6.282150327905171,"roll":6.279635689524259,"pitch":-0.6993902253931052}
    });
    //當(dāng)前的視點坐標
    var startPoint={
        lng:103.5898409037154,
        lat:31.012823472619534
    };
    var clickAble=true;
    viewer.screenSpaceEventHandler.setInputAction(function (e) {
        var ray=viewer.camera.getPickRay(e.position);
        var c=viewer.scene.globe.pick(ray,viewer.scene);
        if (!clickAble||!bmgl.defined(c))return;
        clickAble=false;
        setTimeout(()=>{
            clickAble=true;
        },1000);
        c=bmgl.Cartographic.fromCartesian(c);
        startPoint.lng=bmgl.Math.toDegrees(c.longitude)
        startPoint.lat=bmgl.Math.toDegrees(c.latitude);
        drawLine();
    },bmgl.ScreenSpaceEventType.LEFT_CLICK);
    var pointArr=[];
    viewer.scene.globe.depthTestAgainstTerrain=true;
    setTimeout(function () {
        //1秒后開始畫視角
        drawLine();
    },1000);
    function drawLine() {
        pointArr.map(v=>v.remove());
        pointArr.length=0;
        var viewHeight = 1.5;//視角高度
        var cartographicCenter = bmgl.Cartographic.fromDegrees(startPoint.lng, startPoint.lat);
        var cartesianCenterH0 = bmgl.Cartesian3.fromRadians(cartographicCenter.longitude, cartographicCenter.latitude);
        var cartesianPointH0 = bmgl.Cartesian3.fromDegrees(startPoint.lng+0.02, startPoint.lat+0.01);
        var ab = bmgl.Cartesian3.distance(cartesianCenterH0, cartesianPointH0);
        var eopt = {};
        eopt.semiMinorAxis = ab;
        eopt.semiMajorAxis = ab;
        eopt.rotation = 0;
        eopt.center = cartesianCenterH0;
        eopt.granularity = Math.PI / 20;//間隔
        var ellipse = computeEllipseEdgePositions(eopt);
        for (var i = 0; i < ellipse.outerPositions.length; i += 3) {
            //逐條計算可視域
            var cartesian = new bmgl.Cartesian3(ellipse.outerPositions[i], ellipse.outerPositions[i + 1], ellipse.outerPositions[i + 2]);
            var cartographic = bmgl.Cartographic.fromCartesian(cartesian);
            var deltaRadian = 0.00005 * Math.PI / 180.0;
            var cartographicArr = InterpolateLineCartographic(cartographicCenter, cartographic, deltaRadian);
            getTerrain(cartographicArr,terrainData=>{
                try {
                    if (terrainData.length > 0) {
                        var preVisible = true;
                        var cartesiansLine = [];
                        var colors = [];
                        for (var j = 1; j < terrainData.length; j++) {
                            //逐點計算可見性
                            var visible = true;//該點可見性
                            if (j > 1) {
                                var cartographicCenterHV = new bmgl.Cartographic(terrainData[0].longitude, terrainData[0].latitude, terrainData[0].height + viewHeight);
                                //
                                if (preVisible) {
                                    //
                                    var curPoint = InterpolateIndexLineHeightCartographic(cartographicCenterHV, terrainData[j], j, j - 1);
                                    if (curPoint.height >= terrainData[j - 1].height) {
                                        preVisible = true;
                                        visible = true;
                                    } else {
                                        preVisible = false;
                                        visible = false;
                                    }
                                } else {
                                    //插值到當(dāng)前
                                    var curPointArr = Interpolate2IndexLineHeightCartographic(cartographicCenterHV, terrainData[j], j, j - 1);
                                    for (var k = 0; k < curPointArr.length; k++) {
                                        if (curPointArr[k].height >= terrainData[k].height) {
                                            preVisible = true;
                                            visible = true;
                                        } else {
                                            preVisible = false;
                                            visible = false;
                                            break;
                                        }
                                    }
                                }
                            }
                            var cartesianTemp = bmgl.Cartesian3.fromRadians(terrainData[j].longitude, terrainData[j].latitude, terrainData[j].height + 0.10);
                            cartesiansLine.push(cartesianTemp);
                            //繪制點
                            if (visible) {
                                colors.push(0);
                                colors.push(0);
                                colors.push(1);
                                colors.push(1);
                            } else {
                                colors.push(1);
                                colors.push(0);
                                colors.push(0);
                                colors.push(1);
                            }
                        }
                        //繪制結(jié)果
                        var pointsKSY = new PrimitivePoints({ 'viewer': viewer, 'Cartesians': cartesiansLine, 'Colors': colors });
                        pointArr.push(pointsKSY);
                    } else {
                        console.log("高程異常!");
                    }
                }catch (e) {
                    console.log(e);
                }
            })
        }
    }


    function getTerrain(arr,callback) {
        bmgl.sampleTerrainMostDetailed(viewer.terrainProvider,arr).then(data=>{
            callback(data);
        })
    }

    /**
     * options.semiMinorAxis:短半軸
     * options.semiMajorAxis:長半軸
     * options.rotation:旋轉(zhuǎn)角度 弧度
     * options.center:中心點 笛卡爾坐標
     * options.granularity:粒度 弧度
     * Returns an array of positions that make up the ellipse.
     * @private
     */
    function  computeEllipseEdgePositions(options) {
        var unitPosScratch = new bmgl.Cartesian3();
        var eastVecScratch = new bmgl.Cartesian3();
        var northVecScratch = new bmgl.Cartesian3();
        var scratchCartesian1 = new bmgl.Cartesian3();
        var semiMinorAxis = options.semiMinorAxis;
        var semiMajorAxis = options.semiMajorAxis;
        var rotation = options.rotation;//法線
        var center = options.center;
        var granularity = options.granularity && (typeof options.granularity === "number") ? options.granularity : (Math.PI / 180.0);// 角度間隔
        if (granularity > Math.PI / 12.0) { granularity = Math.PI / 12.0; }//最小分24
        if (granularity < Math.PI / 180.0) { granularity = Math.PI / 180.0; }//最大分360
        var aSqr = semiMinorAxis * semiMinorAxis;
        var bSqr = semiMajorAxis * semiMajorAxis;
        var ab = semiMajorAxis * semiMinorAxis;
        var mag = bmgl.Cartesian3.magnitude(center);//
        var unitPos = bmgl.Cartesian3.normalize(center, unitPosScratch);
        var eastVec = bmgl.Cartesian3.cross(bmgl.Cartesian3.UNIT_Z, center, eastVecScratch);
        eastVec = bmgl.Cartesian3.normalize(eastVec, eastVec);
        var northVec = bmgl.Cartesian3.cross(unitPos, eastVec, northVecScratch);
        var numPts = Math.ceil(bmgl.Math.PI*2 / granularity);
        var deltaTheta = granularity;
        var theta = 0;

        var position = scratchCartesian1;
        var i;
        var outerIndex = 0;
        var outerPositions = [];
        for (i = 0; i < numPts; i++) {
            theta = i * deltaTheta;
            position = pointOnEllipsoid(theta, rotation, northVec, eastVec, aSqr, ab, bSqr, mag, unitPos, position);

            outerPositions[outerIndex++] = position.x;
            outerPositions[outerIndex++] = position.y;
            outerPositions[outerIndex++] = position.z;
        }

        var r = {};
        r.numPts = numPts;
        r.outerPositions = outerPositions;
        return r;
    };
    /*
        線段插值
        經(jīng)緯度坐標插值
        Cartographic start.longitude start.latitude 單位:弧度
        return [Cartographic,...]
        */
     function InterpolateLineCartographic(start, end, _Delta) {
        if (start && end) { } else { return null; }
        if (start.longitude && start.latitude && end.longitude && end.latitude) { } else { return null; }
        var result = [];
        //開始點
        result.push(new bmgl.Cartographic(start.longitude, start.latitude));
        var interval = Math.sqrt(Math.pow((end.longitude - start.longitude), 2) + Math.pow((end.latitude - start.latitude), 2));
        var delta = _Delta && (typeof _Delta === 'number') ? _Delta : DeltaRadian;
        if (interval <= delta) {
            //小于最小間隔
            result.push(new bmgl.Cartographic(end.longitude, end.latitude));
            return result;
        } else {
            var num = interval / delta;
            var stepLon = (end.longitude - start.longitude) / num;
            var stepLat = (end.latitude - start.latitude) / num;
            for (var i = 0; i < num; i++) {
                var lon = start.longitude + (i + 1) * stepLon;
                var lat = start.latitude + (i + 1) * stepLat;
                result.push(new bmgl.Cartographic(lon, lat));//與最后一個點有偏差
            }
            result.push(new bmgl.Cartographic(end.longitude, end.latitude, end.height));
        }
        return result;
    }
    function InterpolateIndexLineHeightCartographic(start, end, num, index) {
        if (start && end) { } else { return null; }
        if (start.longitude && start.latitude && end.longitude && end.latitude) { } else { return null; }
        //var delta = _Delta && (typeof _Delta === 'number') ? _Delta : DeltaRadian;
        var stepLon = (end.longitude - start.longitude) / num;
        var stepLat = (end.latitude - start.latitude) / num;
        var stepHeight = (end.height - start.height) / num;
        var lon = start.longitude + index * stepLon;
        var lat = start.latitude + index * stepLat;
        var hieght = start.height + index * stepHeight;
        var result = new bmgl.Cartographic(lon, lat, hieght);
        return result;
    }
    
    /*
       線段插值
       經(jīng)緯度高程插值
       Cartographic start.longitude start.latitude 單位:弧度 start.height 高程單位m
       num:分總段數(shù)  傳入數(shù)組長度-1
       index:獲取到第index點的所有插值 0點是開始點
       return [Cartographic,...]
       */
    function Interpolate2IndexLineHeightCartographic(start, end, num, curIndex) {
        if (start && end) { } else { return null; }
        if (start.longitude && start.latitude && end.longitude && end.latitude) { } else { return null; }
        var result = [];
        result.push(new bmgl.Cartographic(start.longitude, start.latitude, start.height));
        var stepLon = (end.longitude - start.longitude) / num;
        var stepLat = (end.latitude - start.latitude) / num;
        var stepHeight = (end.height - start.height) / num;
        for (var i = 0; i < curIndex; i++) {
            var lon = start.longitude + (i + 1) * stepLon;
            var lat = start.latitude + (i + 1) * stepLat;
            var hieght = start.height + (i + 1) * stepHeight;
            result.push(new bmgl.Cartographic(lon, lat, hieght));
        }
        //result.push(new bmgl.Cartographic(end.longitude, end.latitude, end.height));
        return result;
    }
    function pointOnEllipsoid(theta, rotation, northVec, eastVec, aSqr, ab, bSqr, mag, unitPos, result) {
        var rotAxis = new bmgl.Cartesian3();
        var tempVec = new bmgl.Cartesian3();
        var unitQuat = new bmgl.Quaternion();
        var rotMtx = new bmgl.Matrix3();

        var azimuth = theta + rotation;

        bmgl.Cartesian3.multiplyByScalar(eastVec, Math.cos(azimuth), rotAxis);
        bmgl.Cartesian3.multiplyByScalar(northVec, Math.sin(azimuth), tempVec);
        bmgl.Cartesian3.add(rotAxis, tempVec, rotAxis);

        var cosThetaSquared = Math.cos(theta);
        cosThetaSquared = cosThetaSquared * cosThetaSquared;

        var sinThetaSquared = Math.sin(theta);
        sinThetaSquared = sinThetaSquared * sinThetaSquared;

        var radius = ab / Math.sqrt(bSqr * cosThetaSquared + aSqr * sinThetaSquared);
        var angle = radius / mag;

        // Create the quaternion to rotate the position vector to the boundary of the ellipse.
        bmgl.Quaternion.fromAxisAngle(rotAxis, angle, unitQuat);
        bmgl.Matrix3.fromQuaternion(unitQuat, rotMtx);

        bmgl.Matrix3.multiplyByVector(rotMtx, unitPos, result);
        bmgl.Cartesian3.normalize(result, result);
        bmgl.Cartesian3.multiplyByScalar(result, mag, result);
        return result;
    }

    var PrimitivePoints = (
        function () {
            var vertexShader;
            var fragmentShader;
            var geometry;
            var appearance;
            var viewer;
            function _(options) {
                viewer = options.viewer;
                vertexShader = VSPolylie();
                fragmentShader = FSPolyline();
                if (options.Cartesians && options.Cartesians.length >= 2) {
                    var postionsTemp = [];
                    var colorsTemp = [];
                    var indicesTesm = [];
                    if (options.Colors && options.Colors.length === options.Cartesians.length * 4) {
                        for (var i = 0; i < options.Cartesians.length; i++) {
                            postionsTemp.push(options.Cartesians[i].x);
                            postionsTemp.push(options.Cartesians[i].y);
                            postionsTemp.push(options.Cartesians[i].z);
                        }
                        colorsTemp = options.Colors;
                    } else {
                        for (var i = 0; i < options.Cartesians.length; i++) {
                            postionsTemp.push(options.Cartesians[i].x);
                            postionsTemp.push(options.Cartesians[i].y);
                            postionsTemp.push(options.Cartesians[i].z);
                            //
                            colorsTemp.push(0.0);
                            colorsTemp.push(0.0);
                            colorsTemp.push(1.0);
                            colorsTemp.push(1.0);
                        }
                    }
                    for (var i = 0; i < options.Cartesians.length; i++) {
                        indicesTesm.push(i);
                    }
                    this.positionArr = new Float64Array(postionsTemp);
                    this.colorArr = new Float32Array(colorsTemp);
                    this.indiceArr = new Uint16Array(indicesTesm);

                } else { // if (options.Cartesians && options.Cartesians.length >= 2) {
                    var p1 = bmgl.Cartesian3.fromDegrees(0, 0, -10);
                    var p2 = bmgl.Cartesian3.fromDegrees(0, 0.001, -10);
                    this.positionArr = new Float64Array([
                        p1.x, p1.y, p1.z,
                        p2.x, p2.y, p2.z
                    ]);
                    //默認藍色
                    this.colorArr = new Float32Array([
                        0.0, 0.0, 1.0, 1.0,
                        0.0, 0.0, 1.0, 1.0
                    ]);
                    this.indiceArr = new Uint16Array([0, 1]);
                }

                geometry = CreateGeometry(this.positionArr, this.colorArr, this.indiceArr);
                appearance = CreateAppearence(fragmentShader, vertexShader);

                this.primitive = viewer.scene.primitives.add(new bmgl.Primitive({
                    geometryInstances: new bmgl.GeometryInstance({
                        geometry: geometry
                    }),
                    appearance: appearance,
                    asynchronous: false
                }));
            }

            function CreateGeometry(positions, colors, indices) {
                return new bmgl.Geometry({
                    attributes: {
                        position: new bmgl.GeometryAttribute({
                            componentDatatype: bmgl.ComponentDatatype.DOUBLE,
                            componentsPerAttribute: 3,
                            values: positions
                        }),
                        color: new bmgl.GeometryAttribute({
                            componentDatatype: bmgl.ComponentDatatype.FLOAT,
                            componentsPerAttribute: 4,
                            values: colors
                        })
                    },
                    indices: indices,
                    primitiveType: bmgl.PrimitiveType.POINTS,
                    boundingSphere: bmgl.BoundingSphere.fromVertices(positions)
                });
            }

            function CreateAppearence(fs, vs) {
                return new bmgl.Appearance({
                    renderState: {
                        blending: bmgl.BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,
                        depthTest: { enabled: true },
                        depthMask: true
                    },
                    fragmentShaderSource: fs,
                    vertexShaderSource: vs
                });
            }

            function VSPolylie() {
                return "attribute vec3 position3DHigh;\
                        attribute vec3 position3DLow;\
                        attribute vec4 color;\
                        varying vec4 v_color;\
                        attribute float batchId;\
                        void main()\
                        {\
                            vec4 p = czm_computePosition();\
                            v_color =color;\
                            p = czm_modelViewProjectionRelativeToEye * p;\
                            gl_Position = p;\
                            gl_PointSize=4.0;\
                        }\
                        ";
            }

            function FSPolyline() {
                return "varying vec4 v_color;\
            void main()\
            {\
                 float d = distance(gl_PointCoord, vec2(0.5,0.5));\
                 if(d < 0.5){\
                    gl_FragColor = v_color;\
                 }else{\
                    discard;\
                 }\
            }\
            ";
            }

            _.prototype.remove = function () {
                if (this.primitive != null) {
                    viewer.scene.primitives.remove(this.primitive);
                    this.primitive = null;
                }
            }
            _.prototype.updateCartesianPosition = function (cartesians) {
                if (this.primitive != null) {
                    viewer.scene.primitives.remove(this.primitive);
                    if (cartesians && cartesians.length < 2) { return; }
                    if (cartesians.length === this.positionArr.length / 3) {
                        var p1 = cartesians[0];
                        var p2 = cartesians[1];
                        this.positionArr = new Float64Array([
                            p1.x, p1.y, p1.z,
                            p2.x, p2.y, p2.z
                        ]);
                        geometry = CreateGeometry(this.positionArr, this.colorArr, this.indiceArr);
                    } else {
                        //默認藍色
                        var postionsTemp = [];
                        var colorsTemp = [];
                        var indicesTesm = [];
                        for (var i = 0; i < cartesians.length; i++) {
                            postionsTemp.push(cartesians[i].x);
                            postionsTemp.push(cartesians[i].y);
                            postionsTemp.push(cartesians[i].z);

                            colorsTemp.push(0.0);
                            colorsTemp.push(0.0);
                            colorsTemp.push(1.0);
                            colorsTemp.push(1.0);
                        }
                        for (var i = 0; i < cartesians.length; i++) {
                            indicesTesm.push(i);
                        }
                        this.positionArr = new Float64Array(postionsTemp);
                        this.colorArr = new Float32Array(colorsTemp);
                        this.indiceArr = new Uint16Array(indicesTesm);

                        geometry = CreateGeometry(this.positionArr, this.colorArr, this.indiceArr);
                        appearance = CreateAppearence(fragmentShader, vertexShader);
                    }

                    this.primitive = viewer.scene.primitives.add(new bmgl.Primitive({
                        geometryInstances: new bmgl.GeometryInstance({
                            geometry: geometry
                        }),
                        appearance: appearance,
                        asynchronous: false
                    }));
                } else { return; }
            }
            _.prototype.updateCartesianPositionColor = function (cartesians, colors) {
                if (colors.length === cartesians.length * 4) { } else { return; }
                if (this.primitive != null) {
                    viewer.scene.primitives.remove(this.primitive);
                    if (cartesians && cartesians.length < 2) { return; }
                    if (cartesians.length === this.positionArr.length / 3) {
                        var p1 = cartesians[0];
                        var p2 = cartesians[1];
                        this.positionArr = new Float64Array([
                            p1.x, p1.y, p1.z,
                            p2.x, p2.y, p2.z
                        ]);

                        this.colorArr = new Float32Array(colors);

                        geometry = CreateGeometry(this.positionArr, this.colorArr, this.indiceArr);
                    } else {
                        var postionsTemp = [];
                        var indicesTesm = [];

                        for (var i = 0; i < cartesians.length; i++) {
                            postionsTemp.push(cartesians[i].x);
                            postionsTemp.push(cartesians[i].y);
                            postionsTemp.push(cartesians[i].z);
                        }
                        for (var i = 0; i < cartesians.length; i++) {
                            indicesTesm.push(i);
                        }
                        this.positionArr = new Float64Array(postionsTemp);
                        this.colorArr = new Float32Array(colors);
                        this.indiceArr = new Uint16Array(indicesTesm);

                        geometry = CreateGeometry(this.positionArr, this.colorArr, this.indiceArr);
                        appearance = CreateAppearence(fragmentShader, vertexShader);
                    }

                    this.primitive = viewer.scene.primitives.add(new bmgl.Primitive({
                        geometryInstances: new bmgl.GeometryInstance({
                            geometry: geometry
                        }),
                        appearance: appearance,
                        asynchronous: false
                    }));
                } else { return; }
            }
            return _;
        })();
</script>
</body>
</html>
                                                                                                                                                                                            
国产久_亚欧精品一区_久久亚洲美女_99精品在线观看_日韩成人三级_久久精品久久久久
<code id="kseui"><acronym id="kseui"></acronym></code>
  • <abbr id="kseui"><tbody id="kseui"></tbody></abbr>
  • <button id="kseui"></button>
  • 激情一区二区三区| 国产一区再线| 97久久人人超碰caoprom欧美| 欧美一区2区三区4区公司二百| 国产精品v欧美精品v日韩| 亚洲性图久久| 一区二区精品在线| 少妇免费毛片久久久久久久久| 99免费在线视频观看| 亚洲精品在线二区| 18成人免费观看视频| 伊人久久大香线蕉午夜av| 欧美午夜免费| 免费99视频| 久久精品中文字幕一区二区三区| 久久精品一二三区| 美女91精品| 久久综合给合久久狠狠色| 另类图片国产| **亚洲第一综合导航网站 | 亚洲欧美日韩另类精品一区二区三区| 欧美高清日韩| 欧美激情视频一区二区三区免费| 日韩精品一线二线三线| 日本视频精品一区| 水蜜桃一区二区| 亚洲在线视频一区二区| 亚洲精品久久区二区三区蜜桃臀| 亚洲国产一区二区精品视频 | 日产精品久久久一区二区| 欧美久久在线| 亚洲天堂电影网| 国模大胆一区二区三区| 1024成人| 国产精品午夜av在线| 久久久久中文| 精品一区二区三区国产| 欧美区高清在线| 欧美在线影院| 国产精品久久久久久久免费软件 | 久久久久综合| 久久久7777| 正在播放国产精品| 91久久在线| 国产农村妇女精品一二区| 99精品国产高清在线观看| 久久久久久久久一区二区| 亚洲午夜激情| 一区二区三区四区五区精品视频| 久久久久久久久久码影片| 超碰在线97av| 天堂av一区二区| 日韩亚洲欧美精品| 国产一区二区精品免费| 亚洲三区在线观看| 国产美女精品| 欧美在线3区| av成人国产| 精品乱子伦一区二区三区| 一区二区不卡在线视频 午夜欧美不卡'| 欧美va亚洲va日韩∨a综合色| 日韩午夜在线电影| 蜜桃成人免费视频| 激情久久久久久| 国产精品一区二区不卡视频| 亚洲成人蜜桃| 羞羞视频在线观看欧美| 久久精品国产一区二区三区日韩| 中文字幕日韩精品一区二区| 久久午夜影视| 一本色道久久99精品综合| 国产欧美日韩一区| 日本一区二区精品视频| 国产区日韩欧美| 水蜜桃亚洲精品| 久久午夜激情| 欧美另类视频| 美女黄毛**国产精品啪啪| 国产精品久久久免费| 亚洲图片欧洲图片日韩av| 97se视频在线观看| 亚洲三级毛片| 欧美一级爱爱| 91九色蝌蚪成人| 亚洲国产国产亚洲一二三| 日本高清一区| 国产精品国产精品| 国产精品一区在线播放| 欧美区高清在线| 日本视频一区二区在线观看| 成人欧美一区二区三区视频xxx| 国内精品福利| 伊人久久大香线蕉精品| 久久久精品国产一区二区三区| 一本色道久久综合亚洲二区三区| 日本黄网免费一区二区精品| 97伦理在线四区| 亚洲一区区二区| 国产综合精品一区| 亚洲一区二区三区涩| 欧美精品在线一区| 国产午夜精品一区| 91视频免费在线观看| 亚洲一区二区网站| 99视频精品| 日韩亚洲不卡在线| 亚洲三级色网| 亚洲成色精品| 亚洲精品人人| 亚洲日本视频| 99综合在线| 国产精品区一区| 国产欧美日韩一级| 国产精品一区二区三区四区五区| 亚洲经典自拍| 国产欧美日韩综合精品二区| 精品不卡一区二区三区| 在线国产精品一区| 亚洲午夜av| 99精品国产在热久久婷婷| 日韩一区二区久久| 99视频精品免费观看| 一本久道久久综合狠狠爱| 亚洲美女黄网| 每日更新成人在线视频| 91手机在线视频| 国产精品二区三区四区| 国产一区二区三区高清视频| 国产伦精品一区二区三区视频孕妇| 99re热精品| 欧美大香线蕉线伊人久久国产精品| 麻豆亚洲一区| 午夜视频精品| 9色国产精品| 成人片在线免费看| 精品日本一区二区三区| 日韩在线三级| 久久av免费观看| 秋霞在线观看一区二区三区| 亚洲 国产 欧美一区| 欧美日韩国产一区精品一区| 亚洲性感美女99在线| 午夜亚洲性色福利视频| 国产精品香蕉视屏| 亚洲成人在线视频网站| 亚洲大胆av| 国产精品一区二区免费看| 欧美日韩精品免费观看| 国产精品www.| 成人三级视频在线观看一区二区| 欧美第一黄网| 亚洲黄色在线| 高清av免费一区中文字幕| 日韩免费av电影| 黄色精品免费| 成人午夜电影免费在线观看| 日韩精品久久久| 国产精品日本一区二区| 久久国产精品久久| 伊人久久亚洲美女图片| yy111111少妇影院日韩夜片| 日韩一区二区电影在线观看| 亚洲看片一区| 日本精品免费| 亚洲免费成人| 欧美国产二区| 日韩香蕉视频| 亚洲va久久久噜噜噜久久狠狠| 99亚洲精品| 亚洲va韩国va欧美va精四季| 亚洲理论在线| 水蜜桃一区二区三区| 香蕉成人久久| 欧美日本中文| 久久综合九色欧美狠狠| 国产亚洲欧美另类一区二区三区| 蜜桃999成人看片在线观看| 在线亚洲伦理| 欧美一区亚洲二区| 久久久久九九九| 奶水喷射视频一区| 欧美人成在线| 日韩经典在线视频| 1卡2卡3卡精品视频| 国产精品xvideos88| 另类欧美小说| 成人欧美一区二区| 一区二区三区四区五区视频| 日本午夜精品一区二区| 147欧美人体大胆444| 亚洲国产美女 | 亚洲一区二区免费视频软件合集| 超碰97在线资源| 99riav1国产精品视频| 欧美在线国产| 亚洲国产日韩综合一区| 精品视频第一区| 国产精品初高中精品久久 | 一区二区视频在线播放| 乱一区二区三区在线播放|