在Dart中创建Cesium Imagery Provider

时间:2014-05-07 17:23:01

标签: javascript dart cesium

我正在尝试使用Cesium javascript库在dart中加载WMS地图。我可以使用以下代码从.html文件中加载正确的地图:

<script>
    var widget = new Cesium.CesiumWidget('cesiumContainer', {
        imageryProvider : new Cesium.WebMapServiceImageryProvider({    
            url: "http://10.1.10.74:8080/geoserver/wms",
            layers : 'planet_osm_roads,planet_osm_polygon,planet_osm_line,planet_osm_point'
        })
    });
</script>

但是,当我尝试从.dart文件中加载它时,CesiumWidget似乎回退并使用默认的BingMapsImageryProvider而不是WebMapService提供程序。这是我在.dart中使用的代码

void main() {
    final ces_widget = context['Cesium']['CesiumWidget'];
    final wms = context['Cesium']['WebMapServiceImageryProvider'];

    String url = "http://10.1.10.74:8080/geoserver/wms";
    var provider = new JsObject(wms, [url, 'planet_osm_roads,planet_osm_polygon,planet_osm_line,planet_osm_point']);  

    if(provider['ready'] == true) {
        var widget = new JsObject(ces_widget, ['cesiumContainer', {'imageryProvider' : provider}]);
    }
}

提供程序的所有属性都为null,但tileHeight,tileWidth和ready除外。有没有人知道为什么没有创建WMS提供程序?

正在创建Cesium Widget并正在加载地图,它只是从默认的Bing Provider加载。

2 个答案:

答案 0 :(得分:3)

当您将Dart中的MapList或类似JSON的结构传递给JS时,您必须使用new JsObject.jsify(json)。例如,您的提供者应该是:

var provider = new JsObject(wms, 
  [new JsObject.jsify({
    'url': url, 
    'layers': 'planet_osm_roads,planet_osm_polygon,planet_osm_line,planet_osm_point'
  })]);
//....
var widget = new JsObject(ces_widget, ['cesiumContainer', new JsObject.jsify({'imageryProvider' : provider})]);

答案 1 :(得分:0)

我不知道这个CesiumWidget是什么,并且对Dart-JS-Interop不起作用,但这看起来很奇怪:

在JS示例中,您传递了地图

{    
   url: "http://10.1.10.74:8080/geoserver/wms",
   layers : 'planet_osm_roads,planet_osm_polygon,planet_osm_line,planet_osm_point'
}
在Dart中你传递了两个参数。

我认为在Dart中应该看起来像

var provider = new JsObject(wms, 
  [{
    'url': url, 
    'layers': 'planet_osm_roads,planet_osm_polygon,planet_osm_line,planet_osm_point'
  }]);