We are struggling with something. We have a Qt runtime app loading various layers and all point features stopped rendering. Our point features use "character marker" symbols. If we publish any other test layers with simple marker or picture marker symbols they render fine. Only character marker symbols are not displaying. On top of that, if we load the layers using the ArcGIS Online Map Viewer they still render fine. It is only when we try to load them in our runtime app, they don't render. We have created separate test runtime apps, as basic as they can get just using the ESRI template and loading one layer, and still the same thing. We just wanted to make sure it wasn't our existing app. Plus our existing production version of the app also stopped rendering the character marker symbols. The production app uses 100.4 and our development app uses 100.5 and we are seeing the same thing on both. They were previously rendering fine since 2018 then suddenly about 1-2 weeks ago they just stopped. Any thoughts on this? How do we troubleshoot this? Is there something on our ArcGIS servers that could have been nuked? If it is a server side issue, seems odd that they render ok when we display the layers using ArcGIS Online Map Viewer but on the other hand, multiple versions our app, different runtime versions, and even completely different apps all exhibit the same issue so seems odd that it would be a client side issue too. We are kind of out of ideas and further diagnostic tests and wondered if anyone had suggestions. Thanks.
Hey Jeremy-
Strange that things stopped working with your production and test apps at the same time - I think this suggests a possible issue in either the publishing process or server side. Can you post some images to show the differences between AGOL and Runtime?
Character Marker Symbols are font based, so when you render these in ArcMap or Pro, the symbol is generated from the fonts that are installed on your system (ArcMap and Pro install several Esri fonts). When you publish those as feature services, 2 things happen:
1. These font based symbols are converted to picture marker symbols under the hood so that they can be rendered by any client. Many/most systems that consume this service won't have the font installed, but they can easily render an image. In ArcGIS Online's case, they request these symbols and display those on the map. Runtime has a flag for this as well so we can optionally simply display the symbols as images. This workflow makes it really flexible to work anywhere sine we don't rely on any fonts and simply need to render an image, but it has limitations in that you can no longer change the symbol client side (since it is an image) and it doesn't scale well, as it is pre-baked at a certain size, and that might not look great on certain screens.
2. These font based symbols are vectorized into geometries and an alternative endpoint on the feature service becomes available so that you can render these vectorized symbols instead of the picture marker symbols. This is much more flexible, allows client side edits, and scales well, but it is a much more advanced rendering pipeline. This is supported by Runtime and Pro (and is the default for both), but not supported in Online yet.
My theory is that everything looks fine in Online because it is using its default rendering of picture markers, and Runtime looks different because it is using its default of "advanced symbols". One thing you could do to verify this is happening is to look at the requests for Online vs Runtime and in Runtime you will likely see &advancedSymbology=true as a parameter in the request for features.
Couple of suggestions:
1) Force Runtime to render with the simple picture marker version of the symbols. You can do this by creating a LoadSettings object and setting it on the Map. Set the useAdvancedSymbology variable to false. This must be set prior to loading the map. More on that here - https://developers.arcgis.com/qt/latest/qml/api-reference/qml-esri-arcgisruntime-loadsettings.html. I think this should work around the issue, but it could have some unintended consequences in rendering, so be sure to test out if you notice any regressions.
Map {
initUrl: "..."
loadSettings: LoadSettings {
useAdvancedSymbology: false
}
}
2) Dig a bit deeper and verify the issue is indeed related to "simple" vs "advanced" symbols. If you use suggestion 1, this should work around the issue, but advanced symbols should work just fine as well. If you can share any data that showcases the issue, I can take a quick look. Also, I'd suggest you consider if anything else in your stack has changed, such as ArcMap/Pro versions, Enterprise versions, etc? If this used to work on your released client app and it broke out of the blue, it seems likely to be a chance in the service causing the rendering difference.
Hi Lucas,
Yes! The loadSettings with useAdvancedSymbology: false worked. The symbols then started rendering. I did try printing out the request URLs but did not see any difference between using advanced symbology or not. I am printing these out though in main.cpp where we have overloaded QNetworkProxyQuery and I'm printing out query.url(). If there is a better place to print out both request and responses, let me know. I have sometimes wished I could print both but wasn't sure where to do that. In either case though (using advanced symbology or not), I do not see anything listed on the request for advancedSymbology. Here is a sample request URL...
QUrl("https://waldo.test.mycompany.com/arcgis/rest/services/WALDO/WALDO_FACILITIES_GEO/FeatureServer/441/query?f=json&geometry=%7B%22xmin%22%3A-13605594.572527144%2C%22ymin%22%3A4588946.9794602823%2C%22xmax%22%3A-13605155.765008368%2C%22ymax%22%3A4589279.7948248759%7D&geometryType=esriGeometryEnvelope&inSR=3857&maxAllowableOffset=0.000000&outFields=DISPLAY_LABEL%2CDISPLAY_TYPE%2COBJECTID%2COSP_FID%2CPLACEMENT%2CWC_ID&outSR=3857&returnDistinctValues=false&returnGeometry=true&returnM=false&returnZ=true&spatialRel=esriSpatialRelEnvelopeIntersects")
While it is nice that this work around solved the problem, kind of a bummer that we have to make a new build and deploy this work around to thousands of machines and until that propagates out, they can't see their point features. For those using iPads, this could takes weeks. I wish we could figure out what change started causing this. According to my backend team, there isn't anything changed that they are aware of.
Do you happen to know if there is a public service out there somewhere that uses character marker symbols (ESRI or any other)? I could load that and see if it exhibits the same issue. This would at least prove it is something on our servers rather than something in runtime or our app.
Is there some way to also view requests and responses on the server side to see what it is doing? Not too long ago our company started pushing Windows server patches to our machines. Could one of those trashed something with these character marker symbols?
I have included the sample app I'm using to do these tests. It's super basic, just the default ESRI template and adding in one layer.
Thanks.
// Copyright 2019 ESRI
//
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
//
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
//
// See the Sample code usage restrictions document for further information.
//
import QtQuick 2.6
import QtQuick.Controls 2.2
import Esri.ArcGISRuntime 100.5
ApplicationWindow {
id: appWindow
width: 800
height: 600
title: "Point Features Test"
ViewpointCenter {
id: viewpointStart
center: Point {
x: -13163498.318208007
y: 4034290.4626104347
spatialReference: SpatialReference { wkid: 102100 }
}
targetScale: 20000
}
// add a mapView component
MapView {
id: mapView
anchors.fill: parent
focus: true
// onMousePositionChanged: {
// console.log('x:'+mouse.x+', y:'+mouse.y);
// var centerX = mapView.currentViewpointCenter.center.x;
// var centerY = mapView.currentViewpointCenter.center.y;
// console.log('centerX:'+centerX+', centerY:'+centerY);
// }
Map {
id: map
BasemapTopographic {}
initialViewpoint: viewpointStart
// loadSettings: LoadSettings {
// useAdvancedSymbology: false
// }
FeatureLayer {
ServiceFeatureTable {
url: "https://waldo.test.mycompany.com/arcgis/rest/services/WALDO/WALDO_FACILITIES_GEO/FeatureServer/441"
onLoadStatusChanged: {
if(loadStatus === Enums.LoadStatusLoading) {
console.log('LOAD IN PROGRESS');
} else if(loadStatus === Enums.LoadStatusLoaded) {
console.log('LOADED');
} else if(loadStatus === Enums.LoadStatusFailedToLoad) {
console.log('LOAD FAILED');
}
}
}
}
}
}
}
Hey Jeremy-
I'm not aware of any public services that uses character marker symbols, although there certainly could be some out there. I'm not sure what happened. It might be worth while to contact Esri Support to troubleshoot to see what changed, but I feel confident in predicting that something on the data/service side has changed since your app was rendering the data fine and it broke with the released version out of the blue.
To capture requests and responses, you could also use Fiddler or Charles and view the traffic there. If you can reproduce the issue on a desktop machine it might be easier to do this than with a mobile device.
Just to give you an idea (might help aid in troubleshooting), here is an example of a feature service that was published with a character marker symbol. I requested this by appending &returnAdvancedSymbols=true to the URL (e.g. http://testserver:6080/arcgis/rest/services/fc_test_13/FeatureServer/0?f=pjson&returnAdvancedSymbols...)
Default JSON (character makers converted to picture marker symbols - AGOL only supports this)
"drawingInfo":{
"renderer":{
"type":"uniqueValue",
"field1":"COUNT",
"field2":null,
"field3":null,
"fieldDelimiter":", ",
"defaultSymbol":null,
"defaultLabel":null,
"uniqueValueInfos":[
{
"symbol":{
"type":"esriPMS",
"url":"6c9d23f3df51f1b4eb320bffdebfb0a4",
"imageData":"iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAZNJREFUOI2tlLFx5DAMRV/gGQbMkK3a4JVhtSGXcboyvG1IbagNKfsZA2QXLChr5Z21PWNEHBD8+AA++MIv2ssX9x1QUkol5zwBSFp+CtYDFzNbgFXS5O4dUCIBwPQdsAHYgKukHiCl1Lv7xcyukhYzK7XW0d3HZ2ADcG3BOedJ0uLurcQOGCTNwNjiH4H1wGZmRVIBRnc/s17j8WBmi6Q54pcz2AW41lrHyPrMrpLegTdJr8AdWBfNLsB0YjQE6+lYEvB2YNgBawMr3KZWgPlU+nucXxurw/0maWvvG9hF0tScLTKlVE4s+xPYJeLLXuaB6sZNRytAznly97/HXnFvG7cWrZJuYDGNPpw7u9DUH0klEu7qjykCPJxmAx04qDt8SzzcrdbaA2OArp/A4uJfSumTuk82uPsS8R0naQBMTWPuPqaU9g04Jqu19s0f67ZXcccs2AzA7O5jzrkAQ0ppX+6Dv2+MHoKFtd1svZvdfQU6dy9m1nb0W7/G3vTDt1PMbOUm7OXM6CnYwVY+ZPJFKPwHJC4TY8MDJ9oAAAAASUVORK5CYII=",
"contentType":"image/png",
"width":14,
"height":14,
"angle":0,
"xoffset":0,
"yoffset":0
},
"value":"2",
"label":"Multipart Feature has 50-100 features",
"description":""
},
{
"symbol":{
"type":"esriSMS",
"style":"esriSMSDiamond",
"color":[
0,
0,
0,
255
],
"size":25,
"angle":0,
"xoffset":0,
"yoffset":5,
"outline":null
},
"value":"1",
"label":"Multipart Feature has less than 50 features",
"description":""
},
{
"symbol":{
"type":"esriSMS",
"style":"esriSMSX",
"color":[
0,
0,
0,
255
],
"size":25,
"angle":100,
"xoffset":0,
"yoffset":7,
"outline":{
"color":[
0,
0,
0,
255
],
"width":6.432937632884479
}
},
"value":"3",
"label":"Multipart Feature has more than 100 features",
"description":""
}
]
},
"transparency":0,
"labelingInfo":null
},
and here is the advanced version (what Runtime requests by default):
"drawingInfo":{
"renderer":{
"type":"uniqueValue",
"field1":"COUNT",
"field2":null,
"field3":null,
"fieldDelimiter":", ",
"defaultSymbol":null,
"defaultLabel":null,
"uniqueValueInfos":[
{
"symbol":{
"type":"CIMSymbolReference",
"symbol":{
"type":"CIMPointSymbol",
"symbolLayers":[
{
"type":"CIMVectorMarker",
"enable":true,
"colorLocked":false,
"anchorPointUnits":"Relative",
"scaleStrokesAndFills":true,
"size":12,
"dominantSizeAxis3D":"Z",
"frame":{
"xmin":0,
"ymin":0,
"xmax":531.0147783251231,
"ymax":533.9892692307692
},
"markerGraphics":[
{
"type":"CIMMarkerGraphic",
"geometry":{
"x":0,
"y":0
},
"symbol":{
"type":"CIMPointSymbol",
"symbolLayers":[
{
"type":"CIMVectorMarker",
"enable":true,
"colorLocked":true,
"anchorPoint":{
"x":0,
"y":0
},
"anchorPointUnits":"Points",
"offsetX":265.50738916256154,
"offsetY":266.9946346153846,
"size":533.9892692307692,
"dominantSizeAxis3D":"Z",
"frame":{
"xmin":0,
"ymin":0,
"xmax":531.0147783251231,
"ymax":533.9892692307692
},
"markerGraphics":[
{
"type":"CIMMarkerGraphic",
"geometry":{
"rings":[
[
[
266,
1
],
[
212,
5
],
[
163,
20
],
[
118,
44
],
[
77,
78
],
[
44,
119
],
[
20,
164
],
[
5,
213
],
[
0,
267
],
[
5,
321
],
[
20,
371
],
[
44,
416
],
[
77,
456
],
[
118,
490
],
[
162,
514
],
[
212,
529
],
[
266,
533
],
[
319,
529
],
[
368,
514
],
[
413,
490
],
[
454,
456
],
[
488,
415
],
[
512,
370
],
[
526,
321
],
[
531,
267
],
[
526,
213
],
[
512,
164
],
[
488,
118
],
[
454,
78
],
[
414,
44
],
[
369,
20
],
[
319,
5
],
[
266,
1
]
],
[
[
266,
520
],
[
215,
516
],
[
168,
502
],
[
125,
479
],
[
86,
447
],
[
54,
408
],
[
31,
365
],
[
17,
318
],
[
12,
267
],
[
17,
216
],
[
31,
169
],
[
54,
126
],
[
86,
87
],
[
125,
55
],
[
168,
32
],
[
215,
18
],
[
266,
14
],
[
317,
18
],
[
364,
32
],
[
407,
55
],
[
445,
87
],
[
478,
126
],
[
501,
169
],
[
514,
216
],
[
519,
267
],
[
514,
318
],
[
501,
365
],
[
478,
408
],
[
445,
447
],
[
407,
479
],
[
364,
502
],
[
317,
516
],
[
266,
520
]
],
[
[
269,
64
],
[
227,
67
],
[
189,
78
],
[
154,
97
],
[
123,
123
],
[
97,
154
],
[
78,
189
],
[
67,
227
],
[
63,
268
],
[
67,
310
],
[
78,
348
],
[
97,
383
],
[
123,
414
],
[
154,
440
],
[
189,
458
],
[
227,
469
],
[
269,
473
],
[
310,
469
],
[
348,
458
],
[
382,
440
],
[
414,
414
],
[
440,
382
],
[
458,
348
],
[
469,
310
],
[
473,
268
],
[
469,
227
],
[
458,
189
],
[
440,
154
],
[
414,
123
],
[
383,
97
],
[
348,
78
],
[
310,
67
],
[
269,
64
]
],
[
[
460,
267
],
[
456,
306
],
[
446,
341
],
[
429,
374
],
[
404,
403
],
[
375,
427
],
[
343,
445
],
[
307,
455
],
[
269,
459
],
[
230,
455
],
[
195,
445
],
[
162,
428
],
[
133,
403
],
[
109,
374
],
[
92,
342
],
[
81,
306
],
[
78,
267
],
[
81,
229
],
[
92,
194
],
[
109,
161
],
[
133,
132
],
[
163,
108
],
[
195,
91
],
[
230,
80
],
[
269,
77
],
[
307,
80
],
[
343,
91
],
[
375,
108
],
[
404,
132
],
[
429,
161
],
[
446,
194
],
[
456,
229
],
[
460,
267
]
],
[
[
268,
196
],
[
239,
202
],
[
215,
217
],
[
199,
241
],
[
193,
270
],
[
199,
298
],
[
215,
322
],
[
239,
338
],
[
268,
343
],
[
296,
338
],
[
320,
322
],
[
336,
298
],
[
342,
270
],
[
336,
241
],
[
320,
217
],
[
296,
202
],
[
268,
196
]
]
],
"spatialReference":{
"wkid":null
}
},
"symbol":{
"type":"CIMPolygonSymbol",
"symbolLayers":[
{
"type":"CIMFill",
"enable":true,
"colorLocked":true,
"pattern":{
"type":"CIMSolidPattern",
"color":[
0,
0,
0,
255
]
}
}
]
}
}
]
}
],
"anchorPointUnits":"Points",
"scaleX":1
}
}
]
}
],
"anchorPointUnits":"Relative",
"scaleX":1
},
"symbolName":"Symbol_91"
},
"value":"2",
"label":"Multipart Feature has 50-100 features",
"description":""
},
{
"symbol":{
"type":"CIMSymbolReference",
"symbol":{
"type":"CIMPointSymbol",
"symbolLayers":[
{
"type":"CIMVectorMarker",
"enable":true,
"colorLocked":false,
"anchorPointUnits":"Relative",
"offsetY":5,
"scaleStrokesAndFills":true,
"size":25,
"dominantSizeAxis3D":"Z",
"frame":{
"xmin":0,
"ymin":0,
"xmax":320.0033070882417,
"ymax":320.0034015774816
},
"markerGraphics":[
{
"type":"CIMMarkerGraphic",
"geometry":{
"rings":[
[
[
160.6,
217
],
[
180.2,
194.8
],
[
180.2,
296
],
[
173.8,
296
],
[
173.8,
210.7
],
[
154.5,
234.9
],
[
154.8,
164.9
],
[
160.6,
164.6
],
[
160.6,
217
]
],
[
[
157.9,
29.6
],
[
144.9,
30.7
],
[
132.9,
34.3
],
[
122,
40.1
],
[
112.1,
48.3
],
[
103.9,
58.2
],
[
98.1,
69.2
],
[
94.6,
81.2
],
[
93.4,
94.2
],
[
94.6,
107.4
],
[
98.1,
119.5
],
[
103.9,
130.5
],
[
112,
140.4
],
[
121.8,
148.6
],
[
132.7,
154.5
],
[
144.8,
158
],
[
157.9,
159.2
],
[
171.1,
158
],
[
183.1,
154.5
],
[
194,
148.6
],
[
203.9,
140.4
],
[
212,
130.5
],
[
217.8,
119.5
],
[
221.3,
107.4
],
[
222.4,
94.2
],
[
221.3,
81.2
],
[
217.7,
69.2
],
[
211.9,
58.2
],
[
203.7,
48.3
],
[
193.8,
40.1
],
[
182.9,
34.3
],
[
170.9,
30.7
],
[
157.9,
29.6
]
],
[
[
157.9,
24.2
],
[
172.1,
25.4
],
[
185.2,
29.2
],
[
197,
35.5
],
[
207.7,
44.3
],
[
216.5,
55
],
[
222.8,
66.9
],
[
226.6,
80
],
[
227.8,
94.2
],
[
226.5,
108.4
],
[
222.7,
121.4
],
[
216.4,
133.3
],
[
207.5,
144.1
],
[
196.8,
153.1
],
[
185,
159.5
],
[
172,
163.3
],
[
157.9,
164.6
],
[
143.7,
163.3
],
[
130.6,
159.5
],
[
118.8,
153.2
],
[
108.2,
144.3
],
[
99.3,
133.5
],
[
93,
121.6
],
[
89.3,
108.5
],
[
88,
94.2
],
[
89.3,
80.1
],
[
93.1,
67.1
],
[
99.4,
55.2
],
[
108.3,
44.5
],
[
119,
35.6
],
[
130.8,
29.3
],
[
143.8,
25.5
],
[
157.9,
24.2
]
]
],
"spatialReference":{
"wkid":null
}
},
"symbol":{
"type":"CIMPolygonSymbol",
"symbolLayers":[
{
"type":"CIMFill",
"enable":true,
"colorLocked":true,
"pattern":{
"type":"CIMSolidPattern",
"color":[
0,
0,
0,
255
]
}
}
]
}
},
{
"type":"CIMMarkerGraphic",
"geometry":{
"rings":[
[
[
173.8,
64
],
[
173.8,
71.4
],
[
142.8,
71.4
],
[
142.8,
127
],
[
134.5,
127
],
[
134.5,
64
],
[
173.8,
64
]
]
],
"spatialReference":{
"wkid":null
}
},
"symbol":{
"type":"CIMPolygonSymbol",
"symbolLayers":[
{
"type":"CIMFill",
"enable":true,
"colorLocked":true,
"pattern":{
"type":"CIMSolidPattern",
"color":[
0,
0,
0,
255
]
}
}
]
}
},
{
"type":"CIMMarkerGraphic",
"geometry":{
"rings":[
[
[
134.5,
64
],
[
134.5,
127
],
[
142.8,
127
],
[
142.8,
71.4
],
[
173.8,
71.4
],
[
173.8,
64
],
[
134.5,
64
]
]
],
"spatialReference":{
"wkid":null
}
},
"symbol":{
"type":"CIMPolygonSymbol",
"symbolLayers":[
{
"type":"CIMFilledStroke",
"enable":true,
"colorLocked":true,
"capStyle":"Butt",
"pattern":{
"type":"CIMSolidPattern",
"color":[
0,
0,
0,
255
]
},
"width":0.7937632884479093,
"lineStyle3D":"Strip",
"alignment":"Center",
"joinStyle":"Miter",
"miterLimit":112,
"patternFollowsStroke":false
}
]
}
}
]
}
],
"anchorPointUnits":"Relative",
"scaleX":1
},
"symbolName":"Symbol_92"
},
"value":"1",
"label":"Multipart Feature has less than 50 features",
"description":""
},
{
"symbol":{
"type":"CIMSymbolReference",
"symbol":{
"type":"CIMPointSymbol",
"symbolLayers":[
{
"type":"CIMVectorMarker",
"enable":true,
"colorLocked":false,
"anchorPointUnits":"Relative",
"offsetY":7,
"rotation":100,
"scaleStrokesAndFills":true,
"size":25,
"dominantSizeAxis3D":"Z",
"frame":{
"xmin":0,
"ymin":0,
"xmax":515.3673913043478,
"ymax":515.3673913043478
},
"markerGraphics":[
{
"type":"CIMMarkerGraphic",
"geometry":{
"paths":[
[
[
64,
129
],
[
129,
193
],
[
193,
129
],
[
258,
193
],
[
322,
129
],
[
386,
193
],
[
451,
129
]
]
],
"spatialReference":{
"wkid":null
}
},
"symbol":{
"type":"CIMPolygonSymbol",
"symbolLayers":[
{
"type":"CIMFilledStroke",
"enable":true,
"colorLocked":true,
"capStyle":"Square",
"pattern":{
"type":"CIMSolidPattern",
"color":[
0,
0,
0,
255
]
},
"width":12.865875265768958,
"lineStyle3D":"Strip",
"alignment":"Center",
"joinStyle":"Miter",
"miterLimit":112,
"patternFollowsStroke":false
}
]
}
},
{
"type":"CIMMarkerGraphic",
"geometry":{
"rings":[
[
[
360.5,
167.7
],
[
154.5,
373.7
],
[
154.5,
270.7
],
[
244.6,
180.6
],
[
257.5,
193.4
],
[
321.9,
129.1
],
[
360.5,
167.7
]
]
],
"spatialReference":{
"wkid":null
}
},
"symbol":{
"type":"CIMPolygonSymbol",
"symbolLayers":[
{
"type":"CIMFill",
"enable":true,
"colorLocked":true,
"pattern":{
"type":"CIMSolidPattern",
"color":[
0,
0,
0,
255
]
}
}
]
}
},
{
"type":"CIMMarkerGraphic",
"geometry":{
"rings":[
[
[
244.6,
180.6
],
[
154.5,
270.7
],
[
154.5,
373.7
],
[
360.5,
167.7
],
[
321.9,
129.1
],
[
257.5,
193.4
],
[
244.6,
180.6
]
]
],
"spatialReference":{
"wkid":null
}
},
"symbol":{
"type":"CIMPolygonSymbol",
"symbolLayers":[
{
"type":"CIMFilledStroke",
"enable":true,
"colorLocked":true,
"capStyle":"Butt",
"pattern":{
"type":"CIMSolidPattern",
"color":[
0,
0,
0,
255
]
},
"width":6.432937632884479,
"lineStyle3D":"Strip",
"alignment":"Center",
"joinStyle":"Miter",
"miterLimit":112,
"patternFollowsStroke":false
}
]
}
},
{
"type":"CIMMarkerGraphic",
"geometry":{
"paths":[
[
[
270.4,
257.8
],
[
412,
399.5
]
]
],
"spatialReference":{
"wkid":null
}
},
"symbol":{
"type":"CIMPolygonSymbol",
"symbolLayers":[
{
"type":"CIMFilledStroke",
"enable":true,
"colorLocked":true,
"capStyle":"Butt",
"pattern":{
"type":"CIMSolidPattern",
"color":[
0,
0,
0,
255
]
},
"width":12.865875265768958,
"lineStyle3D":"Strip",
"alignment":"Center",
"joinStyle":"Miter",
"miterLimit":112,
"patternFollowsStroke":false
}
]
}
}
]
}
],
"anchorPointUnits":"Relative",
"scaleX":1
},
"symbolName":"Symbol_93"
},
"value":"3",
"label":"Multipart Feature has more than 100 features",
"description":""
}
]
},
"transparency":0,
"labelingInfo":null
},
Hi Lucas,
In my sample app, loadSettings was working fine as a work around. But when I went to apply that to my primary app, it did not. I now see that in our primary app we are having to do lazy loading of a bunch of layers and we are doing a layer.load() first and then subsequently doing map.operationalLayers.insert. We are doing this so that we can insert them at specific indices so that the layer stacking is per our clients requirements. Whenever I do that though, the loadSettings seems to be ignored. Any idea on why this is doing this or a way around this? Below is a sample that loads the layer at a specific index upon a button click and demonstrates the issue...
import QtQuick 2.6
import QtQuick.Controls 2.2
import Esri.ArcGISRuntime 100.5
ApplicationWindow {
id: appWindow
width: 800
height: 600
title: "Point Features Test"
ViewpointCenter {
id: viewpointStart
center: Point {
x: -13605359.594359245
y: 4589080.883450534
spatialReference: SpatialReference { wkid: 102100 }
}
targetScale: 2000
}
MapView {
id: mapView
anchors.fill: parent
focus: true
Map {
id: map
BasemapTopographic {}
initialViewpoint: viewpointStart
loadSettings: LoadSettings {
useAdvancedSymbology: false
}
}
Button {
id: btLoad
anchors.left: parent.left
anchors.top: parent.top
width: 100
text: "Go"
onClicked: {
let facilityLayerComponent = Qt.createComponent("FacilityLayer.qml");
if(facilityLayerComponent.status === Component.Ready) {
var facilityLayer = facilityLayerComponent.createObject(null, {serviceLayerId:441});
facilityLayer.featureTable.url = "https://waldo.test.mycompany.com/arcgis/rest/services/WALDO/WALDO_FACILITIES_GEO/FeatureServer/441";
facilityLayer.load();
map.operationalLayers.insert(0, facilityLayer);
//map.operationalLayers.append(facilityLayer);
}
else {
JsUtil.wLog("Error: could not create facility layer 441");
}
}
}
}
}
LoadSettings on the Map object will only apply those settings to the layers that are in the map prior to loading it.
In your example here, wherever you create the ServiceFeatureTable, set the useAdvancedSymbology property to true prior to loading the table/layer - https://developers.arcgis.com/qt/latest/qml/api-reference/qml-esri-arcgisruntime-arcgisfeaturetable....
Excellent, thanks Lucas. This worked. BTW....can you think of any adverse effects we might see client-side by setting useAdvancedSymbology: false? Will the symbols have any noticeable additional overhead? Or will they be any less accurate/sharp when rendering? Thanks!
Yes, potential adverse effects include symbols not scaling well on high DPI devices (due to rasterization of the symbol). Also, this solution will only work for points - if you have lines or polygons with character marker symbols in them (for example, at vertices or endpoints, they will likely not draw correctly. In general, the experience you see with advanced symbols off should be similar to what you see in the ArcGIS Online map viewer - the same limitations apply there as when you turn off advanced symbology in the Runtime.
Update to this (as of July 22) - Esri has worked with Microsoft to identify the issue. The details of the underlying issue, several possible workarounds, as well as an update about how Esri plans to address the issue can be found in this KB article - https://support.esri.com/en/Technical-Article/000021401
Jeremy Roberts Eric Bader this should be resolved through this patch - https://community.esri.com/community/developers/native-app-developers/blog/2019/07/24/announcing-the...