2017-10-14 1 views
0

ich eine geosjon Quelle haben:Wie ein Polygon in 3d mit Cäsium zeigen und olcesium

"geometry": { 
      "type": "Polygon", 
      "coordinates": [ 
       [ 
        [ 
         12.671038571165692, 
         55.64399279138965, 
         85.8672 
        ], 
        [ 
         12.685366241531373, 
         55.63688636891217, 
         85.8672 
        ], 
... 

ich folgendes

beide versucht haben,
var ol3d = new olcs.OLCesium({ map: this.map}); // map is the ol.Map instance 
      var scene = ol3d.getCesiumScene(); 
      ol3d.setEnabled(true); 
      let datasources = ol3d.getDataSources(); 
      console.log(datasources); 
      let f = new ol.format.GeoJSON({ defaultDataProjection: "EPSG:4326", featureProjection: this.map.getView().getProjection() }); 
      for (let feature of this._limModel.visualizationSource.getFeatures()) { 
       feature.set("altitudeMode","relativeToGround"); 
      } 
      let geojson = JSON.parse(f.writeFeatures(this._limModel.visualizationSource.getFeatures())); 

      var dataSource = Cesium.GeoJsonDataSource.load(geojson, { clampToGround:false}).then(
       function (dataSource) { 
        var p = dataSource.entities.values; 
        for (var i = 0; i < p.length; i++) { 
         p[i].polygon.perPositionHeight = true; 

        } 
        datasources.add(dataSource); 


       } 
      ); 

aber die synchronisierten Vektor-Schicht, die olcesium aus konvertiert meine ol Karte und die GeoJSON Datenquelle wird auf der Ellipse/Masse drawed und nicht auf der Höhe des Z in der oben gezeigten GeoJSON Quelle koordinieren.

Was soll ich tun, um meine Polygon als eine Fläche in 3D zu zeigen.

Antwort

0

konnte ich einen Prototyp tun, die mit dem folgenden Code gearbeitet.

  var dataSource = new Cesium.CustomDataSource('myData'); 

      function addPolygon(coordinates) { 
       let flatten = [].concat.apply([], coordinates); 
       console.log([flatten.length, flatten]); 
       var orangePolygon = dataSource.entities.add({ 
        name: 'Orange polygon with per-position heights and outline', 
        polygon: { 
         hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(
          flatten), 
         extrudedHeight: 0, 
         perPositionHeight: true, 
         material: Cesium.Color.ORANGE.withAlpha(0.5), 
         outline: true, 
         outlineColor: Cesium.Color.BLACK 
        } 
       }); 
      } 
      for (let feature of this._limModel.visualizationSource.getFeatures()) { 
       let coordinates : Array < Array<number>>; 
       let geom = feature.getGeometry(); 
       if (geom instanceof ol.geom.Polygon) { 

        addPolygon(geom.getCoordinates()[0].map(c => ol.proj.toLonLat(c))); 

       } else if (geom instanceof ol.geom.MultiPolygon) { 


        for (let poly of geom.getCoordinates()) { 
         addPolygon(poly[0].map(c => ol.proj.toLonLat(c))); 
        } 
       } 


      } 
      datasources.add(dataSource); 

aber wäre schön, wenn dies nur in ol-Cäsium

arbeitet
Verwandte Themen