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 ""
                }
            }
        }
    }
}
Solved! Go to Solution.
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 ""
                }
            }
        }
    }
}
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 ""
                }
            }
        }
    }
}
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.