我正在尝试使用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加载。
答案 0 :(得分:3)
当您将Dart中的Map
,List
或类似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'
}]);