Создание поставщика изображений Cesium в Dart

Я пытаюсь использовать библиотеку javascript Cesium для загрузки карты WMS в dart. Я могу загрузить правильную карту из файла .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. У кого-нибудь есть идеи, почему не создается WMS-провайдер?

Создается виджет Cesium и загружается карта, она просто загружается из поставщика Bing по умолчанию.


person user3613162    schedule 07.05.2014    source источник


Ответы (2)


Когда вы передаете 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})]);
person Alexandre Ardhuin    schedule 07.05.2014

Я понятия не имею, что это за 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'
  }]);  
person Günter Zöchbauer    schedule 07.05.2014