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.