Greetings,
I'm trying to use featureLayer.source to create a feature layer with JSON. I create my featureLayer with an empty source and renderer and then try to add JSON data to it later. For some reason I'm getting the error:
"Source modifications will not propagate after layer has been loaded. Please use .applyEdits() instead"
I create the featureLayer like so:
<SPAN class="keyword token">let</SPAN> fl <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">FeatureLayer</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">{</SPAN>
popupTemplate<SPAN class="punctuation token">:</SPAN> layer<SPAN class="punctuation token">.</SPAN>popupTemplate<SPAN class="punctuation token">,</SPAN>
fields<SPAN class="punctuation token">:</SPAN>layer<SPAN class="punctuation token">.</SPAN>fields<SPAN class="punctuation token">,</SPAN>
objectIdField<SPAN class="punctuation token">:</SPAN><SPAN class="string token">"FACILITYID"</SPAN><SPAN class="punctuation token">,</SPAN>
id<SPAN class="punctuation token">:</SPAN>layer<SPAN class="punctuation token">.</SPAN>id<SPAN class="punctuation token">,</SPAN>
geometryType<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"point"</SPAN><SPAN class="punctuation token">,</SPAN>
source<SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
fl<SPAN class="punctuation token">.</SPAN>minScale <SPAN class="operator token">=</SPAN> layer<SPAN class="punctuation token">.</SPAN>minScale<SPAN class="punctuation token">;</SPAN>
console<SPAN class="punctuation token">.</SPAN><SPAN class="token function">log</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'fl.id: '</SPAN> <SPAN class="operator token">+</SPAN> fl<SPAN class="punctuation token">.</SPAN>id<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">const</SPAN> arcade <SPAN class="operator token">=</SPAN> <SPAN class="template-string token"><SPAN class="string token">` IIf($feature.NUM >100, true, false)`</SPAN></SPAN>
<SPAN class="keyword token">var</SPAN> renderer <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN>
type<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"unique-value"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="comment token">// autocasts as new UniqueValueRenderer()</SPAN>
valueExpression<SPAN class="punctuation token">:</SPAN> arcade<SPAN class="punctuation token">,</SPAN>
valueExpressionTitle<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"Adoption Status"</SPAN><SPAN class="punctuation token">,</SPAN>
uniqueValueInfos<SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN>
<SPAN class="punctuation token">{</SPAN>
value<SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">true</SPAN><SPAN class="punctuation token">,</SPAN>
symbol<SPAN class="punctuation token">:</SPAN> self<SPAN class="punctuation token">.</SPAN><SPAN class="token function">createSymbol</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"#00c3ff"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
label<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"adopted"</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="punctuation token">{</SPAN>
value<SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">false</SPAN><SPAN class="punctuation token">,</SPAN>
symbol<SPAN class="punctuation token">:</SPAN> self<SPAN class="punctuation token">.</SPAN><SPAN class="token function">createSymbol</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"#ff002e"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
label<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"unadopted"</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">]</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">;</SPAN>
mapView<SPAN class="punctuation token">.</SPAN>map<SPAN class="punctuation token">.</SPAN><SPAN class="token function">add</SPAN><SPAN class="punctuation token">(</SPAN>fl<SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>Later on I try to add data to the feature layer using the source.add method like so:
<SPAN class="keyword token">let</SPAN> fl <SPAN class="operator token">=</SPAN> self<SPAN class="punctuation token">.</SPAN>state<SPAN class="punctuation token">.</SPAN>mapView<SPAN class="punctuation token">.</SPAN>map<SPAN class="punctuation token">.</SPAN><SPAN class="token function">findLayerById</SPAN><SPAN class="punctuation token">(</SPAN>layer<SPAN class="punctuation token">.</SPAN>id<SPAN class="punctuation token">)</SPAN>
fl<SPAN class="punctuation token">.</SPAN>source<SPAN class="punctuation token">.</SPAN><SPAN class="token function">add</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">{</SPAN><SPAN class="string token">"attributes"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">{</SPAN><SPAN class="string token">"FACILITYID"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="string token">"DP76415003"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"INSTALLDATE"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">2208970800000</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"INLETTYPE"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="string token">"Pipe"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"ACCESSDIAM"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"adopted"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="string token">"false"</SPAN><SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"geometry"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">{</SPAN><SPAN class="string token">"type"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="string token">"point"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"x"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">8769067.07037968</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"y"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="number token">4271765.250156212</SPAN><SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>the fl.source.add method is what is giving me the error.
Does anyone notice anythign that I'm doing wrong?
Thanks, Tyler