Интеграция OpenSeaMap в GWT OpenLayers

У меня возникли проблемы с интеграцией OpenSeaMap в приложение GWT. Я последовал их примеру и примеру GWT-OpenLayers TMS< /а>. Вот мой код:

private void initMap(MapView map) {
    TMSOptions seamarkOptions = new TMSOptions();
    seamarkOptions.setType("png");
    seamarkOptions.setGetURL(getMyUrl());
    seamarkOptions.setNumZoomLevels(18);
    seamarkOptions.setIsBaseLayer(false);
    seamarkOptions.setDisplayOutsideMaxExtent(true);

    map.addLayer(OSM.Mapnik("OpenStreetMap"));
    map.addLayer(new TMS("Seamark", "http://t1.openseamap.org/seamark/", seamarkOptions));
}

private static native JSObject getMyUrl() /*-{
    function get_my_url(bounds) {
        var res = this.map.getResolution();
        var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
        var y = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
        var z = this.map.getZoom();
        var limit = Math.pow(2, z);
        if (y < 0 || y >= limit) {
            return null;
        } else {
            x = ((x % limit) + limit) % limit;
            url = this.url;
            path= z + "/" + x + "/" + y + "." + this.type;
            if (url instanceof Array) {
                url = this.selectUrl(path, url);
            }
            return url+path;
        }
    }

    return get_my_url;
}-*/;

Это вообще не работает. Более того, по какой-то причине наложение «Морской знак» отключено в селекторе слоев. Также я попытался использовать следующую функцию JSNI в качестве getURL для уровня TMS:

public static native JSObject getTileURL() /*-{
    return $wnd.getTileURL;
}-*/;

Эта функция взята из http://map.openseamap.org/javascript/map_utils.js. Но тоже не повезло.

Любая помощь приветствуется.


person vitalidze    schedule 23.08.2014    source источник


Ответы (1)


Причиной этой проблемы было свойство null maxExtent объекта Map. Он был инициализирован следующим образом:

mapWidget = new MapWidget("100%", "100%", new MapOptions());

Я обновил до следующего:

MapOptions defaultMapOptions = new MapOptions();
defaultMapOptions.setMaxExtent(new Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34));

mapWidget = new MapWidget("100%", "100%", defaultMapOptions);

Теперь это работает.

person vitalidze    schedule 24.08.2014