我正在尝试使用 Cesium javascript 库在 dart 中加载 WMS map 。我可以使用以下代码从 .html 文件加载正确的 map :
<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的所有属性都是null。有谁知道为什么没有创建 WMS 提供商?
正在创建Cesium Widget并加载 map ,它只是从默认的Bing Provider加载。
最佳答案
当您将 Map
、List
或类似 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})]);
关于javascript - 在 Dart 中创建 Cesium 图像提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524275/