ImageTiledLayer in QML crashes on 100.8 and 100.9

551
2
Jump to solution
12-28-2020 08:47 AM
JustinSteventon
New Contributor II

Hi there,

I would like to have a blank base map for cases where I am offline, but users still want to see the points they have captured relative to one another.

To do this, I use the following (which works on 100.7 and below), but it crashes. What am I doing wrong?

Thanks!

 

 

import QtQuick 2.6
import QtQuick.Controls 2.2
import Esri.ArcGISRuntime 100.9 as Esri

ApplicationWindow {
    id: appWindow
    width: 800
    height: 600
    title: "ImageTiledLayer bug"

    Esri.MapView {
        anchors.fill: parent
        focus: true

        Esri.Map {
            Esri.ImageTiledLayer {
                fullExtent: Esri.Envelope { xMin: -20037508.34; yMin: -20037508.34; xMax: +20037508.34; yMax: +20037508.34; spatialReference: Esri.SpatialReference { wkid: 3857 } }
                noDataTileBehavior: Esri.Enums.NoDataTileBehaviorBlank
                tileInfo: Esri.TileInfo {
                    origin: Esri.Point { x: -20037508.34; y: +20037508.34; spatialReference: Esri.SpatialReference { wkid: 3857 } }
                    dpi: 96; tileWidth: 256; tileHeight: 256; spatialReference: Esri.SpatialReference { wkid: 3857 }
                    levelsOfDetail: [
                        Esri.LevelOfDetail {level: 0; resolution: 156543.03390624999884; scale: 591657527.50934994221}
                        , Esri.LevelOfDetail {level: 1; resolution: 78271.516953124999418; scale: 295828763.7546749711}
                        , Esri.LevelOfDetail {level: 2; resolution: 39135.758476562499709; scale: 147914381.87733748555}
                        , Esri.LevelOfDetail {level: 3; resolution: 19567.879238281249854; scale: 73957190.938668742776}
                        , Esri.LevelOfDetail {level: 4; resolution: 9783.9396191406249272; scale: 36978595.469334371388}
                        , Esri.LevelOfDetail {level: 5; resolution: 4891.9698095703124636; scale: 18489297.734667185694}
                        , Esri.LevelOfDetail {level: 6; resolution: 2445.9849047851562318; scale: 9244648.867333592847}
                        , Esri.LevelOfDetail {level: 7; resolution: 1222.9924523925781159; scale: 4622324.4336667964235}
                        , Esri.LevelOfDetail {level: 8; resolution: 611.49622619628905795; scale: 2311162.2168333982117}
                        , Esri.LevelOfDetail {level: 9; resolution: 305.74811309814452898; scale: 1155581.1084166991059}
                        , Esri.LevelOfDetail {level: 10; resolution: 152.87405654907226449; scale: 577790.55420834955294}
                        , Esri.LevelOfDetail {level: 11; resolution: 76.437028274536132244; scale: 288895.27710417477647}
                        , Esri.LevelOfDetail {level: 12; resolution: 38.218514137268066122; scale: 144447.63855208738823}
                        , Esri.LevelOfDetail {level: 13; resolution: 19.109257068634033061; scale: 72223.819276043694117}
                        , Esri.LevelOfDetail {level: 14; resolution: 9.5546285343170165305; scale: 36111.909638021847059}
                        , Esri.LevelOfDetail {level: 15; resolution: 4.7773142671585082653; scale: 18055.954819010923529}
                        , Esri.LevelOfDetail {level: 16; resolution: 2.3886571335792541326; scale: 9027.9774095054617646}
                        , Esri.LevelOfDetail {level: 17; resolution: 1.1943285667896270663; scale: 4513.9887047527308823}
                        , Esri.LevelOfDetail {level: 18; resolution: 0.59716428339481353316; scale: 2256.9943523763654412}
                        , Esri.LevelOfDetail {level: 19; resolution: 0.29858214169740676658; scale: 1128.4971761881827206}
                        , Esri.LevelOfDetail {level: 20; resolution: 0.14929107084870338329; scale: 564.24858809409136029}
                        , Esri.LevelOfDetail {level: 21; resolution: 0.074645535424351691645; scale: 282.12429404704568014}
                        , Esri.LevelOfDetail {level: 22; resolution: 0.037322767712175845822; scale: 141.06214702352284007}
                        , Esri.LevelOfDetail {level: 23; resolution: 0.018661383856087922911; scale: 70.531073511761420036}
                        , Esri.LevelOfDetail {level: 24; resolution: 0.0093306919280439614556; scale: 35.265536755880710018}
                    ]
                }
                tileCallback: function(level, row, column) {
                    return ""
                }
            }
        }
    }
}

 

 

 

0 Kudos
1 Solution

Accepted Solutions
LucasDanzinger
Esri Frequent Contributor

Thanks for reporting this. We've identified where this is going wrong. The crux of the problem is with the initialization order, where TileInfo assumes origin point is valid before it is. Here is some workaround code that works (although it is pretty ugly...)

 

import QtQuick 2.6
import QtQuick.Controls 2.2
import Esri.ArcGISRuntime 100.9 as Esri
ApplicationWindow {
    id: appWindow
    width: 800
    height: 600
    title: "ImageTiledLayer bug"
    function createOrigin() {
        return Esri.ArcGISRuntimeEnvironment.createObject("Point", { x: -20037508.34, y: +20037508.34, spatialReference: webMercator });
    }
    Esri.SpatialReference {
        id: webMercator
        wkid: 3857
    }
    function createLods() {
        let lods = [];
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 0, resolution: 156543.03390624999884,     scale: 591657527.50934994221}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 1,  resolution: 78271.516953124999418,    scale: 295828763.7546749711} ));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 2,  resolution: 39135.758476562499709,    scale: 147914381.87733748555}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 3,  resolution: 19567.879238281249854,    scale: 73957190.938668742776}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 4,  resolution: 9783.9396191406249272,    scale: 36978595.469334371388}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 5,  resolution: 4891.9698095703124636,    scale: 18489297.734667185694}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 6,  resolution: 2445.9849047851562318,    scale: 9244648.867333592847} ));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 7,  resolution: 1222.9924523925781159,    scale: 4622324.4336667964235}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 8,  resolution: 611.49622619628905795,    scale: 2311162.2168333982117}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 9,  resolution: 305.74811309814452898,    scale: 1155581.1084166991059}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 10, resolution: 152.87405654907226449,    scale: 577790.55420834955294}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 11, resolution: 76.437028274536132244,    scale: 288895.27710417477647}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 12, resolution: 38.218514137268066122,    scale: 144447.63855208738823}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 13, resolution: 19.109257068634033061,    scale: 72223.819276043694117}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 14, resolution: 9.5546285343170165305,    scale: 36111.909638021847059}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 15, resolution: 4.7773142671585082653,    scale: 18055.954819010923529}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 16, resolution: 2.3886571335792541326,    scale: 9027.9774095054617646}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 17, resolution: 1.1943285667896270663,    scale: 4513.9887047527308823}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 18, resolution: 0.59716428339481353316,   scale: 2256.9943523763654412}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 19, resolution: 0.29858214169740676658,   scale: 1128.4971761881827206}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 20, resolution: 0.14929107084870338329,   scale: 564.24858809409136029}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 21, resolution: 0.074645535424351691645,  scale: 282.12429404704568014}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 22, resolution: 0.037322767712175845822,  scale: 141.06214702352284007}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 23, resolution: 0.018661383856087922911,  scale: 70.531073511761420036}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 24, resolution: 0.0093306919280439614556, scale: 35.265536755880710018}));
        return lods;
    }
    function createTileInfo() {
        return Esri.ArcGISRuntimeEnvironment.createObject("TileInfo",
                                                         {
                                                             origin: createOrigin(),
                                                             dpi: 96,
                                                             tileWidth: 256,
                                                             tileHeight: 256,
                                                             spatialReference: webMercator,
                                                             levelsOfDetail: createLods()
                                                         });
    }
    Esri.MapView {
        anchors.fill: parent
        focus: true
        Esri.Map {
            Esri.ImageTiledLayer {
                fullExtent: Esri.Envelope { xMin: -20037508.34; yMin: -20037508.34; xMax: +20037508.34; yMax: +20037508.34; spatialReference: Esri.SpatialReference { wkid: 3857 } }
                noDataTileBehavior: Esri.Enums.NoDataTileBehaviorBlank
                tileInfo: createTileInfo()
                tileCallback: function(level, row, column) {
                    return ""
                }
            }
        }
    }
}

 

View solution in original post

0 Kudos
2 Replies
LucasDanzinger
Esri Frequent Contributor

Thanks for reporting this. We've identified where this is going wrong. The crux of the problem is with the initialization order, where TileInfo assumes origin point is valid before it is. Here is some workaround code that works (although it is pretty ugly...)

 

import QtQuick 2.6
import QtQuick.Controls 2.2
import Esri.ArcGISRuntime 100.9 as Esri
ApplicationWindow {
    id: appWindow
    width: 800
    height: 600
    title: "ImageTiledLayer bug"
    function createOrigin() {
        return Esri.ArcGISRuntimeEnvironment.createObject("Point", { x: -20037508.34, y: +20037508.34, spatialReference: webMercator });
    }
    Esri.SpatialReference {
        id: webMercator
        wkid: 3857
    }
    function createLods() {
        let lods = [];
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 0, resolution: 156543.03390624999884,     scale: 591657527.50934994221}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 1,  resolution: 78271.516953124999418,    scale: 295828763.7546749711} ));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 2,  resolution: 39135.758476562499709,    scale: 147914381.87733748555}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 3,  resolution: 19567.879238281249854,    scale: 73957190.938668742776}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 4,  resolution: 9783.9396191406249272,    scale: 36978595.469334371388}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 5,  resolution: 4891.9698095703124636,    scale: 18489297.734667185694}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 6,  resolution: 2445.9849047851562318,    scale: 9244648.867333592847} ));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 7,  resolution: 1222.9924523925781159,    scale: 4622324.4336667964235}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 8,  resolution: 611.49622619628905795,    scale: 2311162.2168333982117}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 9,  resolution: 305.74811309814452898,    scale: 1155581.1084166991059}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 10, resolution: 152.87405654907226449,    scale: 577790.55420834955294}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 11, resolution: 76.437028274536132244,    scale: 288895.27710417477647}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 12, resolution: 38.218514137268066122,    scale: 144447.63855208738823}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 13, resolution: 19.109257068634033061,    scale: 72223.819276043694117}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 14, resolution: 9.5546285343170165305,    scale: 36111.909638021847059}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 15, resolution: 4.7773142671585082653,    scale: 18055.954819010923529}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 16, resolution: 2.3886571335792541326,    scale: 9027.9774095054617646}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 17, resolution: 1.1943285667896270663,    scale: 4513.9887047527308823}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 18, resolution: 0.59716428339481353316,   scale: 2256.9943523763654412}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 19, resolution: 0.29858214169740676658,   scale: 1128.4971761881827206}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 20, resolution: 0.14929107084870338329,   scale: 564.24858809409136029}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 21, resolution: 0.074645535424351691645,  scale: 282.12429404704568014}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 22, resolution: 0.037322767712175845822,  scale: 141.06214702352284007}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 23, resolution: 0.018661383856087922911,  scale: 70.531073511761420036}));
        lods.push(Esri.ArcGISRuntimeEnvironment.createObject("LevelOfDetail", {level: 24, resolution: 0.0093306919280439614556, scale: 35.265536755880710018}));
        return lods;
    }
    function createTileInfo() {
        return Esri.ArcGISRuntimeEnvironment.createObject("TileInfo",
                                                         {
                                                             origin: createOrigin(),
                                                             dpi: 96,
                                                             tileWidth: 256,
                                                             tileHeight: 256,
                                                             spatialReference: webMercator,
                                                             levelsOfDetail: createLods()
                                                         });
    }
    Esri.MapView {
        anchors.fill: parent
        focus: true
        Esri.Map {
            Esri.ImageTiledLayer {
                fullExtent: Esri.Envelope { xMin: -20037508.34; yMin: -20037508.34; xMax: +20037508.34; yMax: +20037508.34; spatialReference: Esri.SpatialReference { wkid: 3857 } }
                noDataTileBehavior: Esri.Enums.NoDataTileBehaviorBlank
                tileInfo: createTileInfo()
                tileCallback: function(level, row, column) {
                    return ""
                }
            }
        }
    }
}

 

0 Kudos
JustinSteventon
New Contributor II

Thanks for the fast response, Lucas! My workaround involved a local web server, which is a whole other kind of clunky. I will look out for a permanent fix in an upcoming version.

0 Kudos