0

我正在尝试使用 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}]);
    }
}

除了 tileHeight、tileWidth 和 ready 之外,provider 的所有属性都为空。有谁知道为什么没有创建 WMS 提供程序?

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

4

2 回答 2

3

当您将Map.jsonList或类似 JSON 的结构从 Dart 传递到 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})]);
于 2014-05-07T17:55:10.587 回答
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'
  }]);  
于 2014-05-07T17:36:03.497 回答