日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

开源三维地球GIS引擎Cesium常用功能的开发

發布時間:2023/12/29 综合教程 51 生活家
生活随笔 收集整理的這篇文章主要介紹了 开源三维地球GIS引擎Cesium常用功能的开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Cesium是一個非常優秀的三維地球GIS引擎(開源且免費)。能夠加載各種符合標準的地圖圖層,瓦片圖、矢量圖等都支持。支持3DMax等建模軟件生成的obj文件,支持通用的GIS計算;支持DEM高程圖。測試中的3D-Tiles分支還支持傾斜攝影生成的城市三維建筑群。國內許多三維GIS產品都基于Cesium進行封裝(包括一些大廠)。因為工作關系,我對Cesium的一些基本GIS功能進行了研究,特此記錄下來。

如上圖,這是一個給市政GISBIM管理平臺做的原型,GIS部分使用Cesium,BIM部分使用第三方商業引擎。GIS控制宏觀、BIM支持微觀(現在還沒有什么好的引擎能做到GISBIM的無縫切換)。

常用功能介紹:

衛星矢量地圖切換

我這里使用的是天地圖提供的服務,衛星地圖和矢量地圖分別調用不同的接口,衛星地圖顯示效果如上圖,矢量地圖顯示如下圖:

道路及基本標注

點“道路及基本標注”后,將路名等顯示并加載在原先的圖層上

加標記點

首先在地圖上點擊需要加點的位置,然后在彈出框內選取顏色,設置提示文字和顯示內容,點擊保存;可以添加多個標記。

繪制線段

連續點擊地圖兩次就可以繪制線段(可繪制折線)

繪制圓形

支持繪制多個圓形,每個圓形隨機顏色,能夠顯示園的半徑、面積等

繪制多邊形

連續點擊地圖上的點,再右鍵閉合,就可以繪制多邊形,能夠計算多邊形每一邊的邊長、總面積等

保存視角、跳轉視角

保存當前的視角;輸入經緯度,跳轉到指定位置

隱藏、加載模型

可以動態加載、隱藏三維模型(為了便于演示,所有的模型均放大了幾百倍);地圖上的繪制功能對所有模型都有效,包含在范圍內的模型會自動高亮并顯示;點選模型能自動居中并提示是否跳轉到BIM模型顯示(BIM模型也是基于三維WebGL的)

搜索

可以根據輸入的關鍵詞進行搜索,使用百度或者高德的API,或者使用天地圖的API,搜索后進行定位,只是百度、高德、天地圖等用的是不同的坐標系,轉換非常麻煩。

清除繪制

清除所有繪制的部分

以上功能只要再完善下,封裝下就可以成為一個很不錯的三維GIS項目基礎平臺了,附我們公司做的GIS+BIM的產品截圖,使用了3D-Tiles:)

附:示例程序的js部分代碼

  1     var bimEngine; var msgControl; var toolbar; var fileControl; var spaceControl; var domainControl; var propertyControl; var searchControl; var markControl;
  2     var storeyControl; var roamingControl; var bimevent;
  3     
  4     var viewer = new Cesium.Viewer("cesiumContainer", {
  5         animation: false, //是否顯示動畫控件
  6         baseLayerPicker: false, //是否顯示圖層選擇控件
  7         geocoder: true, //是否顯示地名查找控件
  8         timeline: false, //是否顯示時間線控件
  9         sceneModePicker: true, //是否顯示投影方式控件
 10         navigationHelpButton: false, //是否顯示幫助信息控件
 11         infoBox: true, //是否顯示點擊要素之后顯示的信息
 12         imageryProvider: new Cesium.WebMapTileServiceImageryProvider({
 13             url: "http://t0.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles",
 14             layer: "tdtBasicLayer",
 15             style: "default",
 16             format: "image/jpeg",
 17             tileMatrixSetID: "GoogleMapsCompatible",
 18             show: false
 19         })
 20     });
 21     var scene = viewer.scene;
 22     var pinBuilder = new Cesium.PinBuilder();
 23 
 24     var vecLayer = null, roadLayer = null, electricLayers = null;
 25     
 26     var getEnumPropertyNames = function(obj) {
 27         var props = [];
 28         for (prop in obj) {
 29             props.push(prop + ': ' + obj[prop]);
 30         }
 31         return props;
 32     }
 33 
 34     var models = new Array();
 35     models[0] = { id: 'house1', name: 'house1', url: '../SampleData/house/house1.gltf', lon: 121.41, lat: 31.22, height: 0, pid: '4e027d42-f033-4bab-87f1-e34c8860b90e' };
 36     models[1] = { id: 'house2', name: 'house2', url: '../SampleData/house/house2.gltf', lon: 121.42, lat: 31.21, height: 0, pid: '918dcfaa-4568-4468-ba03-e379deaa99b7' };
 37     models[2] = { id: 'house3', name: 'house3', url: '../SampleData/house/house3.gltf', lon: 121.43, lat: 31.20, height: 0, pid: '2071736b-0054-4041-ad34-34f2e7a975e5' };
 38     models[3] = { id: 'house4', name: 'house4', url: '../SampleData/house/house4.gltf', lon: 121.44, lat: 31.22, height: 0, pid: '4e027d42-f033-4bab-87f1-e34c8860b90e' };
 39     models[4] = { id: 'house5', name: 'house5', url: '../SampleData/house/house5.gltf', lon: 121.41, lat: 31.21, height: 0, pid: '918dcfaa-4568-4468-ba03-e379deaa99b7' };
 40     models[5] = { id: 'house6', name: 'house6', url: '../SampleData/house/house6.gltf', lon: 121.42, lat: 31.20, height: 0, pid: '2071736b-0054-4041-ad34-34f2e7a975e5' };
 41     models[6] = { id: 'house7', name: 'house7', url: '../SampleData/house/house7.gltf', lon: 121.43, lat: 31.22, height: 0, pid: '4e027d42-f033-4bab-87f1-e34c8860b90e' };
 42     models[7] = { id: 'house8', name: 'house8', url: '../SampleData/house/house8.gltf', lon: 121.44, lat: 31.21, height: 0, pid: '918dcfaa-4568-4468-ba03-e379deaa99b7' };
 43     models[8] = { id: 'house9', name: 'house9', url: '../SampleData/house/house9.gltf', lon: 121.45, lat: 31.20, height: 0, pid: '2071736b-0054-4041-ad34-34f2e7a975e5' };
 44     models[9] = { id: 'house10', name: 'house10', url: '../SampleData/house/house10.gltf', lon: 121.46, lat: 31.21, height: 0, pid: '918dcfaa-4568-4468-ba03-e379deaa99b7' };
 45     models[10] = { id: 'house11', name: 'house11', url: '../SampleData/house/house11.gltf', lon: 121.40, lat: 31.20, height: 0, pid: '4e027d42-f033-4bab-87f1-e34c8860b90e' };
 46     models[11] = { id: 'villa', name: 'villa', url: '../SampleData/house3/house3.gltf', lon: 121.45, lat: 31.22, height: 0, pid: '2071736b-0054-4041-ad34-34f2e7a975e5' };
 47 
 48     var loadedModels = [];
 49 
 50     var shapes = new Array();
 51     shapes[0] = { layer: '測試層', author: 'liu', date: '2017-06-18', ploy: [
 52         { name: 'A區', type: 'ploy', points: [] }
 53     ]};
 54 
 55     var tempPoints = [];
 56     var tempEntities = [];
 57     var tempPinEntities = [];
 58     var tempPinLon, tempPinLat;
 59 
 60     var handler = null;
 61 
 62     $(function() {
 63 
 64         /**初始化**/
 65         $("input[name='optionsRadios']").click(function() {
 66             if ($("input[name='optionsRadios']:eq(1)").prop("checked")) {
 67                 //viewer.imageryLayers.addImageryProvider(vecLayer);
 68                 vecLayer = viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
 69                     url: "http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles",
 70                     layer: "tdtVecBasicLayer",
 71                     style: "default",
 72                     format: "image/jpeg",
 73                     tileMatrixSetID: "GoogleMapsCompatible",
 74                     show: false
 75                 }));
 76             } else if ($("input[name='optionsRadios']:eq(0)").prop("checked")) {
 77                 if (viewer.imageryLayers.contains(vecLayer)) {
 78                     viewer.imageryLayers.remove(vecLayer);
 79                 }
 80             }
 81         });
 82         //標記層
 83         $("#cbxPinLayer").change(function() {
 84             if ($("#cbxPinLayer").prop("checked")) {
 85                 for (var i = 0; i < tempPinEntities.length; i++) {
 86                     viewer.entities.add(tempPinEntities[i]);
 87                 }
 88 
 89             } else {
 90                 for (var i = 0; i < tempPinEntities.length; i ++) {
 91                     viewer.entities.remove(tempPinEntities[i]);
 92                 }
 93             }
 94         });
 95         $("#pinColor").change(function() {
 96             $(this).css("background-color", $(this).val());
 97         });
 98 
 99         $("#cbxRoad").click(function() {
100             if ($(this).prop("checked")) {
101                 roadLayer = viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
102                     url: "http://t0.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles",
103                     layer: "tdtImgAnnoLayer",
104                     style: "default",
105                     format: "image/jpeg",
106                     tileMatrixSetID: "GoogleMapsCompatible",
107                     show: false
108                 }));
109             } else {
110                 viewer.imageryLayers.remove(roadLayer);
111             }
112         });
113         $("#cbxTestArc").click(function() {
114             if ($(this).prop("checked")) {
115                 electricLayers = viewer.imageryLayers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
116                     url: 'https://nationalmap.gov.au/proxy/http://services.ga.gov.au/site_3/rest/services/Electricity_Infrastructure/MapServer'
117                 }));
118                 viewer.camera.flyTo({
119                     destination: Cesium.Rectangle.fromDegrees(114.591, -45.837, 148.970, -5.730)
120                 });
121             } else {
122                 viewer.imageryLayers.remove(electricLayers);
123             }
124         });
125         $("#opts .btn").click(function () {
126             window.setTimeout(function() {
127                 if ($("input[name='opt']:eq(0)").prop("checked")) {
128                     clearEffects();
129                     setTips("");
130                 }
131                 else if ($("input[name='opt']:eq(1)").prop("checked")) {
132                     clearEffects();
133                     SetMode("addPin");
134                     setTips("首先在地圖上點擊需要加點的位置,然后在彈出框內選取顏色,設置提示文字和顯示內容,點擊保存");
135                 }
136                 else if ($("input[name='opt']:eq(2)").prop("checked")) {
137                     tempPoints = [];
138                     for (var i = 0; i < tempEntities.length; i++) {
139                         viewer.entities.remove(tempEntities[i]);
140                     }
141                     for (var i = 0; i < loadedModels.length; i++) {
142                         if (loadedModels[i].color == Cesium.Color.SPRINGGREEN) {
143                             loadedModels[i].color = {red:1,green:1, blue:1, alpha:1};
144                         }
145                     }
146                     clearEffects();
147                     setTips("繪制的圖形被清除,點選頁面標記可以刪除標記");
148                     SetMode("erase");
149                 }
150                 else if ($("input[name='opt']:eq(3)").prop("checked")) {
151                     clearEffects();
152                     SetMode("drawLine");
153                     setTips("在地圖上分別點擊,即可繪制多個線段,點右鍵結束繪制");
154                 }
155                 else if ($("input[name='opt']:eq(4)").prop("checked")) {
156                     clearEffects();
157                     SetMode("drawCircle");
158                     setTips("第一次點擊繪制圓心,第二次點擊根據和圓心的位置繪制半徑");
159                 }
160                 else if ($("input[name='opt']:eq(5)").prop("checked")) {
161                     clearEffects();
162                     SetMode("drawSquare");
163                     setTips("第一、二次點擊繪制長方形的一個邊,再次點擊根據點和邊的距離繪制方形");
164                 }
165                 else if ($("input[name='opt']:eq(6)").prop("checked")) {
166                     clearEffects();
167                     SetMode("drawPloy");
168                     setTips("如果需要繪制多邊形,在地圖上使用左鍵逐個點選地點,右擊閉合多邊形");
169                 }
170                 else if ($("input[name='opt']:eq(7)").prop("checked")) {
171                     clearEffects();
172                     SetMode("pickBuilding");
173                     setTips("點選建筑查看詳細的三維模型");
174                 }
175             },100);
176         });
177 
178         var homeView = {
179             destination: new Cesium.Cartesian3(-2852877.756667368, 4655857.919027944, 3288673.682311567),
180             orientation: {
181                 direction: new Cesium.Cartesian3(0.5437275903005284, -0.8386290220423197, -0.03258329225728158),
182                 up: new Cesium.Cartesian3(0.05520718287689969, -0.00299987805272847, 0.9984704140286108)
183             },
184             complete: function() { LoadModel(); },
185         };
186         
187         setTimeout(
188             function() {
189                 // scene.primitives.removeAll();
190                 //reset();
191                 viewer.camera.flyTo(homeView);
192                 
193                 //viewer.zoomTo(wyoming);
194             }, 3000);
195 
196         //var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
197         //Cesium.Cartesian3.fromDegrees(121.49, 31.22, 0.0));
198         //var model = scene.primitives.add(Cesium.Model.fromGltf({
199         //    url: '../SampleData/house/house1.gltf',
200         //    modelMatrix: modelMatrix,
201         //    scale: 20.0,
202         //    name: 'SampleHouse',
203         //    color: getColor('Red', 1)
204         //}));
205 
206         $("#poly-show").click(function () {
207             LoadModel();
208         });
209 
210         $("#poly-hide").click(function () {
211             HideModel();
212         });
213 
214         //alert(getEnumPropertyNames(model).join(''));
215 
216     });
217 
218     function LoadModel() {
219         for (var i = 0; i < models.length; i++) {
220             var hasLoaded = false;
221             for (var j = 0; j < loadedModels.length; j ++) {
222                 if (models[i].id == loadedModels[j].id) {
223                     hasLoaded = true;
224                 }
225             }
226             if (!hasLoaded) {
227                 var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
228                     Cesium.Cartesian3.fromDegrees(models[i].lon, models[i].lat, models[i].height));
229 
230                 var model = scene.primitives.add(
231                     Cesium.Model.fromGltf({
232                         url: models[i].url,
233                         modelMatrix: modelMatrix,
234                         scale: 20.0,
235                         name: models[i].name,
236                         id: models[i].id
237                     }));
238                 loadedModels.push(model);
239             }
240         }
241         //var cartesian = viewer.camera.pickEllipsoid(loadedModels[0].modelMatrix, scene.globe.ellipsoid);
242         //alert(getEnumPropertyNames(cartesian).join(''));
243         
244     }
245 
246     function HideModel() {
247         for (var i = 0; i < loadedModels.length; i++) {
248             scene.primitives.remove(loadedModels[i]);
249         }
250         loadedModels = [];
251     }
252 
253     function setTips(message, close) {
254         if ("" == message) {
255             $("#message").fadeOut();
256         } else {
257             if (close != undefined && close == true) {
258                 $("#message").html(message).fadeOut();
259             } else {
260                 $("#message").html(message).fadeIn();
261             }
262         }
263     }
264 
265     function clearEffects() {
266         if (handler != null) {
267             handler.destroy();
268         }
269     }
270 
271     //設置各種操作模式
272     function SetMode(mode) {
273         if (mode == "drawPloy")
274         {
275             tempPoints = [];
276             handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
277             handler.setInputAction(function (click) {
278                 var cartesian = viewer.camera.pickEllipsoid(click.position, scene.globe.ellipsoid);
279                 if (cartesian) {
280                     var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
281                     var longitudeString = Cesium.Math.toDegrees(cartographic.longitude);
282                     var latitudeString = Cesium.Math.toDegrees(cartographic.latitude);
283                     tempPoints.push({ lon: longitudeString, lat: latitudeString });
284                     var tempLength = tempPoints.length;
285                     drawPoint(tempPoints[tempPoints.length-1]);
286                     if (tempLength > 1) {
287                         drawLine(tempPoints[tempPoints.length - 2], tempPoints[tempPoints.length - 1], true);
288                     }
289                 } 
290             }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
291 
292             handler.setInputAction(function (click) {
293                 var cartesian = viewer.camera.pickEllipsoid(click.position, scene.globe.ellipsoid);
294                 if (cartesian) {
295                     var tempLength = tempPoints.length;
296                     if (tempLength < 3) {
297                         alert('請選擇3個以上的點再執行閉合操作命令');
298                     } else {
299                         drawLine(tempPoints[0], tempPoints[tempPoints.length - 1], true);
300                         drawPoly(tempPoints);
301                         highLightAssetsInArea(tempPoints);
302                         alert('多邊形面積' + SphericalPolygonAreaMeters(tempPoints) + '平方米');
303                         tempPoints = [];
304                     }
305 
306                 }
307             }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
308         }
309         else if (mode == "pickBuilding")
310         {
311             handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
312             handler.setInputAction(function(click) {
313                 var pick = scene.pick(click.position);
314                 if (Cesium.defined(pick) && Cesium.defined(pick.node) && Cesium.defined(pick.mesh)) {
315                     for (var i = 0; i < models.length; i ++) {
316                         if (models[i].id == pick.node._model.id) {
317                             var modelName = models[i].name;
318                             var modelId = models[i].id;
319                             var modelBimId = models[i].pid;
320                             highLigthModel(modelId);
321                             viewer.camera.flyTo({
322                                 destination: Cesium.Cartesian3.fromDegrees(models[i].lon, parseFloat(models[i].lat) - 0.01, 2000.0),
323                                 orientation: {
324                                     direction: new Cesium.Cartesian3(0.5437275903005284, -0.8386290220423197, -0.03258329225728158),
325                                     up: new Cesium.Cartesian3(0.05520718287689969, -0.00299987805272847, 0.9984704140286108)
326                                 },
327                                 complete: function() {
328                                     if (confirm("你選擇的是" + modelName + ",是否查看詳細模型?")) {
329                                         LoadBim(modelBimId);
330                                     }
331                                     unHighLightModel(modelId);
332                                 },
333                             });
334                         }
335                     }
336                 }
337             }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
338         }
339         else if ("addPin" == mode)
340         {
341             handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
342             handler.setInputAction(function (click) {
343                 var cartesian = viewer.camera.pickEllipsoid(click.position, scene.globe.ellipsoid);
344                 if (cartesian) {
345                     var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
346                     tempPinLon = Cesium.Math.toDegrees(cartographic.longitude);
347                     tempPinLat = Cesium.Math.toDegrees(cartographic.latitude);
348                     $('#addPinModal').modal('show');
349                 }
350             }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
351         }
352         else if ("erase" == mode)
353         {
354             handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
355             handler.setInputAction(function (click) {
356                 var pick = scene.pick(click.position);
357                 if (Cesium.defined(pick) && Cesium.defined(pick.id) && Cesium.defined(pick.id._id)) {
358                     for (var i = 0; i < models.length; i++) {
359                         if ( pick.id != undefined && tempPinEntities[i].id == pick.id._id) {
360                             removePoint(tempPinEntities[i]);
361                             tempPinEntities.splice(i, 1);
362                         }
363                     }
364                 }
365             }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
366         }
367         else if ("drawLine" == mode)
368         {
369             tempPoints = [];
370             handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
371             handler.setInputAction(function (click) {
372                 var cartesian = viewer.camera.pickEllipsoid(click.position, scene.globe.ellipsoid);
373                 if (cartesian) {
374                     var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
375                     var longitudeString = Cesium.Math.toDegrees(cartographic.longitude);
376                     var latitudeString = Cesium.Math.toDegrees(cartographic.latitude);
377                     tempPoints.push({ lon: longitudeString, lat: latitudeString });
378                     var tempLength = tempPoints.length;
379                     drawPoint(tempPoints[tempPoints.length - 1]);
380                     if (tempLength > 1) {
381                         drawLine(tempPoints[tempPoints.length - 2], tempPoints[tempPoints.length - 1], true);
382                     }
383                 }
384             }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
385             handler.setInputAction(function (click) {
386                 tempPoints = [];
387             }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
388         }
389         else if ("drawCircle" == mode)
390         {
391             tempPoints = [];
392             handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
393             handler.setInputAction(function (click) {
394                 var cartesian = viewer.camera.pickEllipsoid(click.position, scene.globe.ellipsoid);
395                 if (cartesian) {
396                     var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
397                     var longitudeString = Cesium.Math.toDegrees(cartographic.longitude);
398                     var latitudeString = Cesium.Math.toDegrees(cartographic.latitude);
399                     tempPoints.push({ lon: longitudeString, lat: latitudeString });
400                     var tempLength = tempPoints.length;
401                     if (tempLength == 1) {
402                         drawPoint(tempPoints[0]);
403                     }
404                     else if (tempLength == 2) {
405                         drawPoint(tempPoints[1]);
406                         drawLine(tempPoints[0], tempPoints[1], true);
407                         //算兩點間距離
408                         var distance = getFlatternDistance(tempPoints[0].lat, tempPoints[0].lon, tempPoints[1].lat, tempPoints[1].lon);
409 
410                         var entity =
411                         viewer.
412                         entities.add({
413                             position: Cesium.Cartesian3.fromDegrees(tempPoints[0].lon, tempPoints[0].lat),
414                             ellipse: {
415                                 semiMinorAxis: distance,
416                                 semiMajorAxis: distance,
417                                 height: 0,
418                                 material: Cesium.Color.fromRandom({ alpha: 0.8 })
419                             }
420                         });
421                         tempEntities.push(entity);
422 
423                         //高亮圈內模型
424                         for (var i = 0; i < loadedModels.length; i++) {
425                             for (var j = 0; j < models.length; j++) {
426                                 if (loadedModels[i].id == models[j].id && getFlatternDistance(models[j].lat, models[j].lon, tempPoints[0].lat, tempPoints[0].lon) <= distance) {
427                                     loadedModels[i].color = Cesium.Color.SPRINGGREEN;
428                                 }
429                             }
430                         }
431 
432                         //面積
433                         setTimeout(function () { alert("面積是 " + Math.PI * distance * distance + "平方米") },500);
434 
435                         tempPoints = [];
436                     }
437                 }
438             }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
439         }
440         else if ("drawSquare" == mode) {
441             tempPoints = [];
442             handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
443             handler.setInputAction(function (click) {
444                 var cartesian = viewer.camera.pickEllipsoid(click.position, scene.globe.ellipsoid);
445                 if (cartesian) {
446                     var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
447                     var longitudeString = Cesium.Math.toDegrees(cartographic.longitude);
448                     var latitudeString = Cesium.Math.toDegrees(cartographic.latitude);
449                     tempPoints.push({ lon: longitudeString, lat: latitudeString });
450                     var tempLength = tempPoints.length;
451                     if (tempLength == 1) {
452                         drawPoint(tempPoints[0]);
453                     }
454                     else if (tempLength == 2) {
455                         //算兩點間距離
456                         var distance = getFlatternDistance(tempPoints[0].lat, tempPoints[0].lon, tempPoints[1].lat, tempPoints[1].lon);
457 
458                         var entity =
459                         viewer.
460                         entities.add({
461                             position: Cesium.Cartesian3.fromDegrees(tempPoints[0].lon, tempPoints[0].lat),
462                             ellipse: {
463                                 semiMinorAxis: distance,
464                                 semiMajorAxis: distance,
465                                 height: 0,
466                                 material: Cesium.Color.fromRandom({ alpha: 0.8 })
467                             }
468                         });
469                         tempEntities.push(entity);
470 
471                         //高亮圈內模型
472                         for (var i = 0; i < loadedModels.length; i++) {
473                             for (var j = 0; j < models.length; j++) {
474                                 if (loadedModels[i].id == models[j].id && getFlatternDistance(models[j].lat, models[j].lon, tempPoints[0].lat, tempPoints[0].lon) <= distance) {
475                                     loadedModels[i].color = Cesium.Color.SPRINGGREEN;
476                                 }
477                             }
478                         }
479 
480                         tempPoints = [];
481                     }
482                 }
483             }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
484         }
485     }
486 
487     function drawPoint(point) {
488         var entity = 
489         viewer.entities.add({
490             position: Cesium.Cartesian3.fromDegrees(point.lon, point.lat),
491             point: {
492                 pixelSize: 10,
493                 color: Cesium.Color.CHARTREUSE
494             }
495         });
496         tempEntities.push(entity);
497     }
498 
499     function removePoint(entity) {
500         viewer.entities.remove(entity);
501     }
502 
503     function drawLine(point1, point2, showDistance) {
504         var entity =
505         viewer.entities.add({
506             polyline: {
507                 positions: [Cesium.Cartesian3.fromDegrees(point1.lon, point1.lat), Cesium.Cartesian3.fromDegrees(point2.lon, point2.lat)],
508                  10.0,
509                 material: new Cesium.PolylineGlowMaterialProperty({
510                     color: Cesium.Color.CHARTREUSE.withAlpha(.5)
511                 })
512             }
513         });
514         tempEntities.push(entity);
515         if (showDistance) {
516             var w = Math.abs(point1.lon - point2.lon);
517             var h = Math.abs(point1.lat - point2.lat);
518             var offsetV = w >= h ? 0.0005 : 0;
519             var offsetH = w < h ? 0.001 : 0;
520             var distance = getFlatternDistance(point1.lat, point1.lon, point2.lat, point2.lon);
521             entity =
522                 viewer.entities.add({
523                     position: Cesium.Cartesian3.fromDegrees(((point1.lon + point2.lon) / 2) + offsetH,
524                     ((point1.lat + point2.lat) / 2) + offsetV),
525                     label: {
526                         text: distance.toFixed(1) + 'm',
527                         font: '22px Helvetica',
528                         fillColor: Cesium.Color.WHITE
529                     }
530                 });
531             tempEntities.push(entity);
532         }
533     }
534 
535     function drawPoly(points) {
536         var pArray = [];
537         for (var i = 0; i < points.length; i ++) {
538             pArray.push(points[i].lon);
539             pArray.push(points[i].lat);
540         }
541         var entity =
542         viewer.entities.add({
543             polygon: {
544                 hierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(pArray)),
545                 material: Cesium.Color.CHARTREUSE.withAlpha(.5)
546             }
547         });
548         tempEntities.push(entity);
549     }
550 
551     function getColor(colorName, alpha) {
552         var color = Cesium.Color[colorName.toUpperCase()];
553         return Cesium.Color.fromAlpha(color, parseFloat(alpha));
554     }
555 
556     //判斷點是否在多邊形內
557     function PointInPoly(point, polyPoints) {
558         for (var c = false, i = -1, l = polyPoints.length, j = l - 1; ++i < l; j = i)
559             ((polyPoints[i].lat <= point.lat && point.lat < polyPoints[j].lat) || (polyPoints[j].lat <= point.lat && point.lat < polyPoints[i].lat))
560             && (point.lon < (polyPoints[j].lon - polyPoints[i].lon) * (point.lat - polyPoints[i].lat) / (polyPoints[j].lat - polyPoints[i].lat) + polyPoints[i].lon)
561             && (c = !c);
562         return c;
563     }
564 
565     //選區內模型高亮
566     function highLightAssetsInArea(points) {
567         
568         for (var i = 0; i < loadedModels.length; i++) {
569             for (var j = 0; j < models.length; j ++) {
570                 if (loadedModels[i].id == models[j].id && PointInPoly(models[j], points)) {
571                     loadedModels[i].color = Cesium.Color.SPRINGGREEN;
572                 }
573             }
574         }
575     }
576 
577     //高亮模型
578     function highLigthModel(modelId) {
579         for (var i = 0; i < loadedModels.length; i ++) {
580             if (loadedModels[i].id == modelId) {
581                 loadedModels[i].color = Cesium.Color.SPRINGGREEN;
582             }
583         }
584     }
585 
586     //取消高亮模型
587     function unHighLightModel(modelId) {
588         for (var i = 0; i < loadedModels.length; i++) {
589             if (loadedModels[i].id == modelId) {
590                 loadedModels[i].color = {
591                     red: 1,
592                     green: 1,
593                     blue: 1,
594                     alpha: 1
595                 };
596             }
597         }
598     }
599 
600     //定位
601     function goLocation() {
602         $('#flyToModal').modal('hide');
603         $('#flyToModal').on('hidden.bs.modal', function(e) {
604             viewer.camera.flyTo({
605                 destination: Cesium.Cartesian3.fromDegrees($("#jumpLon").val(), $("#jumpLat").val(), 1000.0)
606             });
607         });
608     }
609 
610     //加點
611     function addPin() {
612         $('#addPinModal').modal('hide');
613         var pin = viewer.entities.add({
614             name: $("#pinContent").val(),
615             position: Cesium.Cartesian3.fromDegrees(tempPinLon, tempPinLat),
616             billboard: {
617                 image: $("#pinLabel").val() == "" ? pinBuilder.fromColor(Cesium.Color[$("#pinColor").val().toUpperCase()], 48).toDataURL() :
618             pinBuilder.fromText($("#pinLabel").val(), Cesium.Color[$("#pinColor").val().toUpperCase()], 64).toDataURL(),
619                 verticalOrigin: Cesium.VerticalOrigin.BOTTOM
620             }
621         });
622         tempPinEntities.push(pin);
623         $("#pinLabel").val("");
624         $("#pinContent").val("");
625     }
626 
627     //計算兩點間距離
628     function getFlatternDistance(lat1, lng1, lat2, lng2) {
629         var EARTH_RADIUS = 6378137.0;    //單位M
630         var PI = Math.PI;
631 
632         function getRad(d) {
633             return d * PI / 180.0;
634         }
635         var f = getRad((lat1 + lat2) / 2);
636         var g = getRad((lat1 - lat2) / 2);
637         var l = getRad((lng1 - lng2) / 2);
638 
639         var sg = Math.sin(g);
640         var sl = Math.sin(l);
641         var sf = Math.sin(f);
642 
643         var s, c, w, r, d, h1, h2;
644         var a = EARTH_RADIUS;
645         var fl = 1 / 298.257;
646 
647         sg = sg * sg;
648         sl = sl * sl;
649         sf = sf * sf;
650 
651         s = sg * (1 - sl) + (1 - sf) * sl;
652         c = (1 - sg) * (1 - sl) + sf * sl;
653 
654         w = Math.atan(Math.sqrt(s / c));
655         r = Math.sqrt(s * c) / w;
656         d = 2 * w * a;
657         h1 = (3 * r - 1) / 2 / c;
658         h2 = (3 * r + 1) / 2 / s;
659 
660         return d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg));
661     }
662 
663     //計算多邊形面積
664     var earthRadiusMeters = 6371000.0;
665     var metersPerDegree = 2.0 * Math.PI * earthRadiusMeters / 360.0;
666     var radiansPerDegree = Math.PI / 180.0;
667     var degreesPerRadian = 180.0 / Math.PI;
668     var pointArr;
669     function SphericalPolygonAreaMeters(points) {
670         var totalAngle = 0;
671         for (var i = 0; i < points.length; i++) {
672             var j = (i + 1) % points.length;
673             var k = (i + 2) % points.length;
674             totalAngle += Angle(points[i], points[j], points[k]);
675         }
676         var planarTotalAngle = (points.length - 2) * 180.0;
677         var sphericalExcess = totalAngle - planarTotalAngle;
678         if (sphericalExcess > 420.0) {
679             totalAngle = points.length * 360.0 - totalAngle;
680             sphericalExcess = totalAngle - planarTotalAngle;
681         } else if (sphericalExcess > 300.0 && sphericalExcess < 420.0) {
682             sphericalExcess = Math.abs(360.0 - sphericalExcess);
683         }
684         return sphericalExcess * radiansPerDegree * earthRadiusMeters * earthRadiusMeters;
685     }
686 
687     /*角度*/
688     function Angle(p1, p2, p3) {
689         var bearing21 = Bearing(p2, p1);
690         var bearing23 = Bearing(p2, p3);
691         var angle = bearing21 - bearing23;
692         if (angle < 0) {
693             angle += 360;
694         }
695         return angle;
696     }
697     /*方向*/
698     function Bearing(from, to) {
699         var lat1 = from.lat * radiansPerDegree;
700         var lon1 = from.lon * radiansPerDegree;
701         var lat2 = to.lat * radiansPerDegree;
702         var lon2 = to.lon * radiansPerDegree;
703         var angle = -Math.atan2(Math.sin(lon1 - lon2) * Math.cos(lat2), Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2));
704         if (angle < 0) {
705             angle += Math.PI * 2.0;
706         }
707         angle = angle * degreesPerRadian;
708         return angle;
709     }
710 
711     function LoadBim(projId) {
712         //加載模型
713         $('#myTabs li:eq(1) a').tab('show');
714         
715     }

View Code

總結

以上是生活随笔為你收集整理的开源三维地球GIS引擎Cesium常用功能的开发的全部內容,希望文章能夠幫你解決所遇到的問題。

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

欧美坐爱视频 | 欧美a级一区二区 | 亚洲精色| 久久99精品久久久久蜜臀 | 欧美aⅴ在线观看 | 日韩免费在线观看视频 | 精品欧美一区二区三区久久久 | 婷婷爱五月天 | 日韩天堂在线观看 | 国产玖玖在线 | 久久99久久精品 | 欧美一级片在线免费观看 | 精品国产成人 | 日韩av中文在线观看 | 久久久www成人免费毛片 | 91在线免费视频观看 | av中文字幕在线播放 | 亚洲视频,欧洲视频 | av短片在线| 日韩精品1区2区 | 欧美一级裸体视频 | 一级免费黄色 | 99国产成+人+综合+亚洲 欧美 | 香蕉视频在线播放 | 精品一区 在线 | 日韩免费一级电影 | 日韩免费观看av | 午夜电影久久 | 久久久久国产一区二区三区 | 一区中文字幕 | 91精品啪在线观看国产线免费 | www.婷婷com | 精品久久久99| 婷婷六月丁香激情 | 激情综合网五月婷婷 | 欧美日韩国产免费视频 | 亚洲欧洲精品久久 | 午夜三级福利 | 成人在线播放网站 | 91精品久久久久久粉嫩 | 伊人国产视频 | 91禁在线看 | 国产精品久久久久久久久久久免费 | 天天伊人狠狠 | 久久亚洲福利 | 五月天综合网站 | 日韩三级.com | 久久精品九色 | 亚洲成人精品av | 午夜精品视频免费在线观看 | 精品一区二区av | a视频在线看| 免费一区在线 | 国产精品成久久久久三级 | 天天摸天天弄 | 69夜色精品国产69乱 | 国产精品乱码一区二三区 | 亚洲成人av在线播放 | 日韩大片在线免费观看 | 国产精品video爽爽爽爽 | 在线观看视频黄 | 草莓视频在线观看免费观看 | 久久综合久久综合久久 | 又黄又刺激又爽的视频 | 黄在线免费观看 | 色综合久久久久综合体桃花网 | 国产精品一区二区电影 | 天天鲁天天干天天射 | 久久高清免费视频 | 日韩性色 | 视频在线一区二区三区 | 日韩精品在线免费播放 | 国产日产精品久久久久快鸭 | 久久久久亚洲精品中文字幕 | 日韩av综合网站 | 丁香在线| 在线观看免费观看在线91 | 婷婷av色综合 | 有没有在线观看av | av在线一级 | 99欧美视频| 久久精品久久久久久久 | 欧美性黑人| 亚洲亚洲精品在线观看 | 中文字幕在线播放日韩 | 久久亚洲综合色 | 久久丁香网 | 九九一级片 | 久久精品男人的天堂 | 91一区二区在线 | 天天操天天操天天操天天操 | 一本一道波多野毛片中文在线 | 国产成人a v电影 | 久久97视频 | 精品久久久久久久久久久院品网 | 最近高清中文在线字幕在线观看 | 久久美女高清视频 | 亚洲在线网址 | 97超碰人人澡人人爱 | 免费观看久久 | 又湿又紧又大又爽a视频国产 | 亚洲一区免费在线 | 99精品免费久久久久久日本 | 人人射人人爽 | 中文字幕2021 | 国产区高清在线 | 国产成人香蕉 | 综合网在线视频 | 五月婷婷黄色网 | 中文字幕视频免费观看 | h视频在线看| www.黄色 | 久久久久久免费网 | 日韩av电影网站在线观看 | 涩涩网站免费 | 中午字幕在线 | a资源在线 | 国产偷v国产偷∨精品视频 在线草 | 欧美日韩精品免费观看视频 | 韩国一区二区三区在线观看 | 在线影院中文字幕 | 久久无码av一区二区三区电影网 | 四虎影视成人精品国库在线观看 | 91精品国产一区二区三区 | 国产在线观看 | 超级碰碰免费视频 | 又污又黄的网站 | 成 人 黄 色 视频免费播放 | 成人黄色小说在线观看 | 国产中文字幕视频在线观看 | 97在线看片 | 欧美一二三区在线观看 | 国产视频一二三 | 一区二区影视 | 黄色一及电影 | 亚洲黄色三级 | 日韩精品一区电影 | 六月丁香激情网 | 日本激情视频中文字幕 | 在线看av的网址 | 久久福利小视频 | 日本天天色| 99精品在线 | 美女视频黄是免费的 | 99免费看片 | 中文字幕乱码日本亚洲一区二区 | av大全在线看 | 久久久免费高清视频 | www.久艹 | 国产免费三级在线观看 | 久久视频在线观看中文字幕 | 天天操夜夜想 | 草在线视频| 亚洲成人精品 | 精品久久久久久久久久久院品网 | 日本电影久久 | 免费观看午夜视频 | 天天插综合网 | 国产精品久一 | 久久免费看av | 丁香六月激情 | 中文字幕一区二区三区四区视频 | 香蕉视频在线看 | 91九色视频国产 | av+在线播放在线播放 | 久久国产精品99久久人人澡 | 国产精品一区在线播放 | 国产精品夜夜夜一区二区三区尤 | 99精品在线播放 | 91免费网站在线观看 | 高清不卡一区二区在线 | 国产精品岛国久久久久久久久红粉 | 91九色最新地址 | 天天玩天天操天天射 | 亚洲国产精品va在线看黑人 | 国产亚洲精品日韩在线tv黄 | 中文区中文字幕免费看 | 色婷婷电影 | www夜夜操 | 国产这里只有精品 | 国产黄在线| 色天天久久 | 中文字幕乱偷在线 | 久久er99热精品一区二区 | 久久久久福利视频 | 国产一区观看 | 99热这里只有精品在线观看 | 三级黄免费看 | 中文字幕2021| 色综合久久久久久久久五月 | 亚洲高清视频在线播放 | 欧美综合在线观看 | 国产亚洲片 | 亚洲综合一区二区精品导航 | 欧美 日韩 国产 中文字幕 | 成全在线视频免费观看 | 国产精品成人自产拍在线观看 | 中文字幕色在线 | 激情网在线视频 | 日韩 精品 一区 国产 麻豆 | 久久激情五月激情 | 日韩在线视频线视频免费网站 | 夜夜摸夜夜爽 | 亚洲激情网站免费观看 | 国产精品va在线 | 欧美日韩国语 | 久久天堂网站 | 久久精品麻豆 | 草久久久 | 亚洲成成品网站 | 91av在线免费看 | 国产午夜三级一二三区 | 9999国产精品 | 天天操夜夜操 | 亚洲色五月| 久久伦理电影 | 蜜臀av.com| 中文字幕 欧美性 | 日本视频网 | 久久精品一区二区三 | 亚洲午夜精品久久久久久久久久久久 | 伊人久久在线观看 | 五月开心六月婷婷 | 日韩在线视 | 久久婷婷亚洲 | av电影在线不卡 | 色综合亚洲精品激情狠狠 | 九九热在线观看 | 在线三级中文 | 免费观看一级一片 | 免费毛片一区二区三区久久久 | 国产看片网站 | av三级在线免费观看 | 亚洲国产精久久久久久久 | 国产专区在线播放 | 福利视频午夜 | 精品国产色 | 国产精品免费麻豆入口 | 狠狠干美女 | 懂色av一区二区三区蜜臀 | 四季av综合网站 | 人人狠狠| 久久超| 91三级在线观看 | www国产亚洲精品久久网站 | 国产亚洲资源 | 久久九九久久精品 | 亚洲国产午夜 | 欧美色综合久久 | 草久视频在线观看 | 色婷婷狠狠五月综合天色拍 | 久久中文字幕导航 | 国产精品成人一区二区三区 | 国色天香第二季 | 午夜国产一区二区三区四区 | 亚洲综合五月 | 国产成人a v电影 | 国产在线观看,日本 | 国模一二三区 | adc在线观看 | 麻豆久久久 | 在线直播av | 国产一级黄色av | 欧美一级视频免费看 | 91av综合| 综合网伊人 | 在线观看视频一区二区三区 | 麻豆免费在线播放 | 波多野结衣精品在线 | 久久久国产99久久国产一 | www.91成人 | 99re8这里有精品热视频免费 | 久久国产福利 | 国产精品剧情在线亚洲 | 在线免费黄色av | 91丨九色丨蝌蚪丨老版 | 国产高清在线视频 | 国产精品国产毛片 | 夜色在线资源 | 国产黄色一级片在线 | 日韩一区二区三区高清免费看看 | 欧美国产91| 亚洲aⅴ一区二区三区 | 国产免费a | 国产伦精品一区二区三区无广告 | 欧美日韩国产网站 | 久久在线影院 | 国产一线二线三线在线观看 | 在线成人性视频 | 黄色的网站在线 | 欧美日韩国产在线 | 亚洲国产精久久久久久久 | 97精品视频在线播放 | 欧美a√大片 | 久久久久国产精品免费网站 | 欧美精品一区二区免费 | 国产在线精品一区二区三区 | 欧美大片大全 | 日日躁天天躁 | 一区二区不卡在线观看 | 九九日韩 | 精品自拍sae8—视频 | 亚洲精品在线二区 | 激情欧美一区二区免费视频 | 91精品办公室少妇高潮对白 | 在线激情影院一区 | 国产区网址 | 九九热在线精品 | .精品久久久麻豆国产精品 亚洲va欧美 | 欧美精品久久久久久久久久丰满 | 91热视频在线观看 | 丁香视频免费观看 | 亚洲伦理一区 | 国产视频一区在线 | 国产精品男女视频 | 一区二区在线不卡 | 成人影音在线 | www91在线 | 狠狠的干 | 精品免费国产一区二区三区四区 | 国产精品久久99综合免费观看尤物 | 91视频久久久久 | 999免费视频 | 亚洲精品视频网站在线观看 | 人人插人人射 | 国产精品一区二区白浆 | av黄色一级片 | 日本婷婷色 | 日韩在线第一 | 亚洲人久久久 | 国产免费不卡av | 久久av电影 | 波多野结衣电影一区 | 国产精品九九久久99视频 | 国产一区精品在线观看 | 中文字幕免费一区 | 日韩中文字幕第一页 | 在线观看免费高清视频大全追剧 | 最新一区二区三区 | 欧美一级性生活 | 成人黄色大片在线免费观看 | 国产精品久久久久久久久久久久午夜片 | 久久久久久久久久久影院 | 久草网在线视频 | 狠狠干中文字幕 | 天天色天天干天天 | 精品一区二区三区在线播放 | 在线免费视频 你懂得 | 国产激情免费 | 精品久久久久_ | 天天躁日日躁狠狠躁av麻豆 | 精品99999| 91超碰免费在线 | 天天视频色 | 久久五月婷婷丁香 | 日韩精品第一区 | 成年人视频免费在线播放 | 99产精品成人啪免费网站 | 激情五月六月婷婷 | 欧美乱熟臀69xxxxxx | 免费的国产精品 | 97韩国电影 | 国产精品99久久久久久久久久久久 | 国产精品黄色在线观看 | 久久久久9999亚洲精品 | 狠狠色丁香婷婷综合久久片 | 超碰av在线 | 人人躁 | 亚洲激情视频在线观看 | 99成人精品 | 天天看天天干 | 精品91在线 | 久热爱 | 色夜影院| 久久中文字幕视频 | 久久精品国产一区二区三区 | 欧美一区成人 | 婷婷视频在线观看 | 国产女人18毛片水真多18精品 | 日韩高清黄色 | 特级西西444www大精品视频免费看 | 欧美日韩国产精品一区 | 网站在线观看日韩 | 天天射天天搞 | 成人小视频在线免费观看 | 黄色毛片在线看 | 五月婷婷中文网 | 国产第一二区 | 天天色中文| 人人澡人人草 | 99精彩视频在线观看免费 | 九九热只有这里有精品 | 中文字幕资源在线 | 91av在线免费观看 | 日本精品久久久久 | 久久久av电影 | 成人va在线观看 | 808电影免费观看三年 | 国产999精品 | 免费视频一区 | 久久视频免费在线观看 | 丰满少妇一级片 | 国产伦理久久 | 国产精品美女毛片真酒店 | 在线久热| 亚洲精品久久久久久中文传媒 | 99亚洲精品视频 | 国产婷婷精品av在线 | 美女视频黄网站 | 探花在线观看 | 国产视频中文字幕 | 久久视频热 | 精品国产伦一区二区三区免费 | 色噜噜色噜噜 | 久久综合影音 | 国产黄色免费观看 | 日韩欧美视频在线观看免费 | 亚州av免费 | 国产日韩欧美在线 | 日韩欧美一区二区三区视频 | 国产精品中文久久久久久久 | 久久成人毛片 | 欧美先锋影音 | 中文字幕一区二区三区乱码在线 | 99久久毛片 | 99超碰在线播放 | 97免费 | 亚洲精品777 | 狠狠色丁香婷婷综合欧美 | 久草在线视频首页 | 色成人亚洲 | 久久久久女人精品毛片九一 | 免费a v在线| 久久夜色精品国产欧美乱极品 | 天天操·夜夜操 | 欧美在线日韩在线 | 亚洲欧美综合精品久久成人 | 一区二区三区在线视频观看58 | 九九九热精品 | 亚洲欧美成人综合 | 中文字幕你懂的 | 午夜影视剧场 | 日韩成人免费在线电影 | 成年人在线看视频 | 亚洲欧美日韩在线一区二区 | 成人一级视频在线观看 | 精品国产区 | 免费三级骚 | 久久电影日韩 | 五月婷婷丁香在线观看 | 在线观看国产v片 | 亚洲在线 | 永久免费毛片在线观看 | 视频二区 | 色99之美女主播在线视频 | 免费看的国产视频网站 | 久久网站最新地址 | 久久视屏网 | 国产在线精品观看 | 国产高清av免费在线观看 | 在线免费试看 | 成人手机在线视频 | 久久99免费 | 91在线中文字幕 | 欧美日韩国产在线一区 | 亚洲精品www久久久 www国产精品com | 就要干b| 在线免费观看黄色小说 | 成人免费在线观看入口 | 成人免费在线视频 | 国产成人一区二区三区在线观看 | 91视频免费视频 | 五月综合色婷婷 | 国产成人精品三级 | 国产系列在线观看 | 精品99在线观看 | 国产亚洲精品久久久久久无几年桃 | 成人毛片一区 | 日韩av电影免费在线观看 | 欧美视频网址 | 中文理论片 | 日韩色视频在线观看 | 免费观看黄色av | 国产人成精品一区二区三 | 免费三级影片 | 999国内精品永久免费视频 | 国产这里只有精品 | 久久久久国产视频 | 国产精品欧美久久久久天天影视 | 色av资源网| 日韩欧美国产激情在线播放 | 国产91精品高清一区二区三区 | 91在线观看欧美日韩 | 欧美成人亚洲 | 国外av在线| 一区二区三区播放 | av视屏在线播放 | 亚洲永久精品在线 | 97在线超碰 | 欧美91片 | 亚洲精品www. | 久久免费视频一区 | 日一日干一干 | 九九热久久免费视频 | 天天射网 | 国产超碰在线 | 91夫妻视频| 国产黑丝一区二区 | 欧美日韩精品在线一区二区 | 狠狠干天天色 | 干天天| 日日操操操 | 日日夜夜人人精品 | 51久久成人国产精品麻豆 | 免费精品国产va自在自线 | 国产超碰97 | 成 人 黄 色视频免费播放 | 亚洲久草网 | 一区二精品 | 欧美视频xxx | 婷婷成人亚洲综合国产xv88 | av网站在线观看免费 | 亚洲成人精品影院 | 男女啪啪免费网站 | 99精品国产一区二区三区麻豆 | 日日操夜夜操狠狠操 | 中文字幕在线看视频 | 亚州天堂 | 久久综合九色综合久久久精品综合 | 九九久久精品视频 | 豆豆色资源网xfplay | 色婷五月 | 在线看片中文字幕 | 亚洲欧美日韩在线一区二区 | 91精品久久久久久久久 | 国产美女免费观看 | 成人性生活大片 | 日韩aⅴ视频 | 国产 日韩 欧美 自拍 | 国产精品白丝jk白祙 | 成人国产精品久久久久久亚洲 | 久久夜色精品国产欧美一区麻豆 | 免费的黄色的网站 | 久久再线视频 | 99久久影院 | 黄色成人毛片 | 婷婷在线观看视频 | 成人动态视频 | 免费看国产黄色 | 超级碰碰免费视频 | 特黄特色特刺激视频免费播放 | 久久久福利影院 | 偷拍区另类综合在线 | a'aaa级片在线观看 | 一区二区av| 波多野结衣最新 | 91精品在线免费观看 | 在线观看黄污 | 三级黄在线 | av久久在线 | 日本久久电影网 | 亚洲精品国产精品久久99热 | 五月婷丁香网 | 久久久精品 一区二区三区 国产99视频在线观看 | 午夜在线观看影院 | 欧美日韩视频在线一区 | 91看片成人 | 久久丁香 | 五月开心网 | 国产999精品久久久久久麻豆 | 另类老妇性bbwbbw高清 | 99视 | 欧美男同视频网站 | 在线亚洲高清视频 | 99人成在线观看视频 | 色综合天天 | 亚洲欧洲日韩 | 在线中文字幕播放 | 最近中文字幕大全中文字幕免费 | 99热九九这里只有精品10 | 一区二区三区动漫 | 国产精彩视频一区 | 精品久久久99 | 天天射一射 | av在线网站观看 | 国产午夜精品一区 | 欧美成人在线网站 | 亚洲精品高清一区二区三区四区 | 成人av片免费看 | 成人午夜电影在线观看 | 超碰在线人人艹 | 国产精品福利av | 欧美-第1页-屁屁影院 | 操久久免费视频 | 中文字幕视频网站 | 黄色字幕网 | 一级片黄色片网站 | 手机成人av在线 | 国产成人免费精品 | 一本色道久久综合亚洲二区三区 | a天堂在线看 | 国产尤物在线观看 | 国产亲近乱来精品 | 在线观看的av | 色多多在线观看 | 91在线资源 | 色视频网站在线 | 在线观看91精品视频 | 丁香九月婷婷综合 | 天天干天天做天天爱 | 亚洲午夜久久久久久久久 | 免费看日韩 | 99爱国产精品 | 99久久久成人国产精品 | 国产成人精品日本亚洲999 | 成人蜜桃 | 在线观看你懂的网址 | 91九色综合 | 日韩av在线看 | 亚洲天堂精品视频在线观看 | 伊人五月天.com | 天堂av在线网站 | 天天综合网 天天综合色 | 国产在线观看中文字幕 | 一区二区三区日韩在线 | 992tv在线成人免费观看 | 黄a在线 | 日韩电影中文字幕在线 | 少妇bbbb搡bbbb桶 | 色视频网站在线 | 亚洲夜夜网 | 亚洲综合在线视频 | 亚av在线| 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 丁香在线观看完整电影视频 | 不卡中文字幕在线 | 天天插伊人 | 国产精品美女免费看 | 伊人婷婷在线 | 午夜视频在线观看网站 | 国产特级毛片aaaaaa | 免费高清男女打扑克视频 | 超碰免费成人 | 中文字幕在线观看的网站 | 久久久久久久久久久久国产精品 | 亚洲欧美国产精品va在线观看 | 欧美高清视频不卡网 | 又色又爽又激情的59视频 | 久久黄色片| www.com操| 欧美日韩另类在线 | 国产亚洲亚洲 | 少妇性aaaaaaaaa视频 | 97天堂网 | 日日夜夜av| 色综合久久网 | 久草视频免费 | 在线视频 你懂得 | 国外成人在线视频网站 | 国产日本亚洲高清 | 日本69hd | 久久久久久久久久久高潮一区二区 | 亚洲高清在线精品 | 五月综合色 | 亚洲电影第一页av | 国产精品第52页 | 久久99精品国产99久久 | 青草视频在线 | av中文字幕亚洲 | www.国产毛片 | 久久国内免费视频 | 亚洲欧美国产精品va在线观看 | 免费在线观看av网站 | 午夜精品导航 | 99热在线国产精品 | 黄色91在线 | 97国产小视频 | 国产区网址| 91精品国产综合久久婷婷香蕉 | 国产理论片在线观看 | 国产综合精品一区二区三区 | 天天插天天射 | 国产99自拍 | 日韩在线第一区 | 久久精品一 | 午夜久久影视 | 亚洲国产中文在线 | 欧美日韩调教 | 久久精品区 | 免费在线观看污 | 欧美一级片在线 | 中文字幕日韩精品有码视频 | 综合色中色 | 一区二区网 | 天天曰夜夜爽 | 日韩高清一二区 | 在线播放第一页 | 午夜精品一二三区 | 一本色道久久精品 | 午夜色婷婷 | 97av在线视频免费播放 | 日韩久久精品一区二区 | av网站免费线看精品 | 亚洲第一区在线播放 | 日韩免费中文字幕 | 久久www免费视频 | 91精品国产福利在线观看 | 韩国av免费在线观看 | 国产在线视频不卡 | 久草视频在 | 欧美一区二区三区四区夜夜大片 | 超碰97久久| 国产精彩视频一区二区 | av丝袜在线 | 久久伦理网 | 国产视频高清 | 国产美女被啪进深处喷白浆视频 | 国产手机在线视频 | 中文字幕丝袜一区二区 | 蜜臀av在线一区二区三区 | 丁香九月激情 | av中文国产| 亚洲成aⅴ人在线观看 | 国产精品久久久久毛片大屁完整版 | 日韩欧美一区二区三区视频 | 精产嫩模国品一二三区 | 国产成人精品一区二区三区福利 | 热re99久久精品国产99热 | 日韩久久久久久 | 日产乱码一二三区别在线 | 欧美一区二区视频97 | 99精品福利| 亚洲国产成人高清精品 | 波多野结衣亚洲一区二区 | 人人狠狠综合久久亚洲婷 | 一级免费观看 | 激情开心色 | 亚洲国产影院av久久久久 | 午夜美女网站 | 成人av电影免费在线观看 | 欧美日韩一区二区久久 | 在线日韩中文字幕 | 免费在线观看国产精品 | 91超级碰 | 久久男人中文字幕资源站 | 麻豆mv在线观看 | 中文字幕精品一区二区三区电影 | 国产香蕉视频在线播放 | 在线 国产 日韩 | 国语自产偷拍精品视频偷 | 香蕉久久久久久av成人 | 午夜国产福利视频 | 一区二区电影在线观看 | 亚洲九九九在线观看 | 免费网址在线播放 | 亚洲影视资源 | 中文字幕 二区 | 国产综合婷婷 | 国产亚洲精品久久久久久移动网络 | 国产午夜精品免费一区二区三区视频 | www免费 | 久草网视频 | 日韩精品一二三 | 国产精品美女久久久久久久久 | 精品免费观看视频 | 伊人精品在线 | 国产精品久久久久久久久久妇女 | 日韩欧美在线中文字幕 | 欧美日韩国产一二三区 | 97成人在线观看 | 亚洲经典视频在线观看 | 久久r精品| 久草色在线观看 | а天堂中文最新一区二区三区 | 在线免费观看麻豆视频 | 久草电影免费在线观看 | 久久久久久免费 | 国产视频观看 | av免费在线观 | 国产亚洲aⅴaaaaaa毛片 | 亚洲综合色丁香婷婷六月图片 | 国产成人精品亚洲日本在线观看 | 最新中文字幕视频 | 国产高清视频在线观看 | 狠狠色丁香久久婷婷综合_中 | 中文字幕之中文字幕 | 国产黄色片在线 | 国产999精品久久久久久绿帽 | 午夜精品一区二区三区免费视频 | 亚洲欧美日韩一级 | 天天色天天操天天爽 | 99免费在线播放99久久免费 | 国产又粗又硬又爽的视频 | 精品99久久 | 免费看国产黄色 | 亚洲精品午夜视频 | 最新国产精品拍自在线播放 | 天天激情站 | 黄色片视频在线观看 | 久久久久久久久网站 | 国产老太婆免费交性大片 | 国产不卡精品视频 | 精品国产一二三四区 | 精品国产_亚洲人成在线 | 91视频 - x99av | 91网址在线看 | 97视频免费 | 国产分类视频 | www.av免费观看 | 九九综合九九 | 国产资源在线视频 | 日韩电影中文字幕在线 | 欧美日韩一区二区三区在线免费观看 | 欧美日比视频 | 久久av中文字幕片 | 欧美精品在线观看免费 | 日韩高清成人在线 | 黄色小说视频网站 | 亚洲一区精品二人人爽久久 | 欧美永久视频 | 亚洲涩涩涩涩涩涩 | 成人9ⅰ免费影视网站 | 激情视频国产 | 人人草天天草 | 国产午夜av | 久久久久久久久久久久国产精品 | 久久在视频 | 中文字幕 国产视频 | 精品国内自产拍在线观看视频 | 视频国产一区二区三区 | 亚洲精品伦理在线 | 免费看片日韩 | 婷婷国产精品 | 天天曰夜夜爽 | 国产精品麻豆99久久久久久 | 国产一区私人高清影院 | 久久久久久久久久久综合 | 九九久久电影 | 日韩av播放在线 | 国产九色91| 久久久久久综合 | 97视频精品| a在线播放 | 亚洲国产成人高清精品 | 免费看污片 | 国产精在线 | 国产精品一区二区电影 | 国产日韩欧美在线一区 | 久久久久一区 | 国产精品女人久久久久久 | 亚洲欧美国产日韩在线观看 | 中文字幕精品视频 | 久久久久亚洲精品男人的天堂 | 日韩av黄| 伊人色综合久久天天 | 波多野结衣一区二区三区中文字幕 | 在线成人性视频 | 国产高清日韩 | 欧美精品一区二区三区四区在线 | 成人黄性视频 | 国产成人精品999在线观看 | 免费日韩一区二区三区 | 在线观看视频在线 | 91插插插免费视频 | 免费观看一区二区三区视频 | 天堂av最新网址 | 伊人影院av | 日韩,中文字幕 | 狂野欧美激情性xxxx | 日韩mv欧美mv国产精品 | 青草视频在线播放 | 成人免费视频网站 | 91精品国产91久久久久 | 亚洲精品网址在线观看 | 国产精品永久久久久久久www | 日本一区二区不卡高清 | a级国产乱理伦片在线观看 亚洲3级 | 久久九九国产视频 | www.久久婷婷 | 国产精品久久久久久久久久久久午夜 | 欧美不卡视频在线 | 免费日韩 精品中文字幕视频在线 | 亚a在线| 久久毛片网 | 午夜精品久久久久久99热明星 | 狠狠操.com | 亚洲成熟女人毛片在线 | 天天干天天干天天射 | 亚洲综合色播 | 天天色天天干天天色 | 一区二区三区日韩在线 | 亚洲免费黄色 | 婷婷资源站 | 日本天天操 | 国产精品视频线看 | av成人在线电影 | 精品久久久久久亚洲综合网站 | 午夜18视频在线观看 | 中文字幕一区二 | 国产又黄又硬又爽 | www.xxx.性狂虐| 日韩在线在线 | 国产精品原创 | 在线观看国产亚洲 | 精品视频资源站 | 国产在线不卡精品 | 日韩免费视频一区二区 | 看国产黄色大片 | 在线观看日韩专区 | 在线免费精品视频 | 美女久久99 | 色婷婷狠狠五月综合天色拍 | 伊人久久电影网 | 国产一级高清视频 | 免费看的黄色网 | 综合激情网| 日韩欧美第二页 | 在线播放日韩av | 欧美人牲 | 色六月婷婷| 日日干综合 | 国产亚洲精品久久久久久久久久 | 丝袜美女视频网站 | 日韩精品一区二区在线观看视频 | 亚洲三级黄色 | 99av国产精品欲麻豆 | 免费高清在线视频一区· | 99re在线视频观看 | 国产精品一区二区麻豆 | 天天操天天干天天 | 久草电影免费在线观看 | 精品中文字幕在线播放 | 视频国产| 国产成人久久精品77777综合 | 中文字幕在线专区 | 手机在线永久免费观看av片 | 美女视频黄免费的久久 | 国产精品国产三级国产不产一地 | www.天天干.com | 国产视频69 | 亚洲欧洲中文日韩久久av乱码 | 日韩久久精品一区二区三区下载 | 午夜视频日本 | 国产精品va在线 | 亚洲精品在线观 | 亚洲精品在线视频播放 | 国产精品美女久久久久久 | 麻豆视频免费网站 | 久久国产精品99国产精 | 黄色成人免费电影 | 午夜精品中文字幕 | 国产综合精品久久 | 国产精品一区专区欧美日韩 | 国产在线污 | 日韩电影在线观看中文字幕 | 青春草免费在线视频 | 国产免费一区二区三区最新 | 欧美日韩在线观看不卡 | 亚洲精品国产片 | 久久久久亚洲精品男人的天堂 | 国产午夜精品一区二区三区嫩草 | 中文字幕视频观看 | 在线久草视频 | 亚洲精品美女在线观看 | 一本一本久久a久久精品牛牛影视 | 一区二区电影网 | av在线永久免费观看 | 国产精品久久久久一区二区国产 | 在线免费看黄网站 | av高清免费在线 | 麻豆影视在线观看 | 久久免费99 | 色资源二区在线视频 | 国产精品中文久久久久久久 | 77国产精品 | 久久影视中文字幕 | 日韩高清不卡在线 | 国产精品99久久久久久有的能看 | 国产在线超碰 | 免费在线观看av网站 | 香蕉视频在线视频 | 久久资源总站 | 国产一区欧美日韩 | 国产在线精品一区二区不卡了 | 亚洲国产精品传媒在线观看 | 97超碰.com| 日韩免费小视频 | 国产黄色免费在线观看 | 精品在线观看免费 | 色在线亚洲 | 91视频91色 | 免费久草视频 | 六月丁香婷婷久久 | 欧美a级在线播放 | 免费观看丰满少妇做爰 | 亚洲欧美日本国产 | 免费视频成人 | 在线观看国产成人av片 |