I've been asked to develop a strategy to work with Layers that have not yet been added to a Map.

From what I can tell, one cannot simply create a new layer as one can with ArcObjects. One must use a method on the LayerFactory, all of which add a layer to the map upon creation.

So instead of using Layers, I thought I would have my analysis engine deal with layer definitions, e.g. CIMFeatureLayer, which can exist outside of a map.

For example, my analysis engine would generate CIMFeatureLayers and then, once I'm ready to present the layer, I would use something similar to LayerFactory.CreateFeaturelayer to create a layer from the CIMFeatureLayer.

I've searched but cannot find any method that does this.

Clearly Pro does this behind the scenes - if I save a .lyrx file and look at it in a text editor, I see that it is a json serialization of a CIMLayerDocument with CIMFeatureLayers within it. How can I do what Pro does when it reads the .lyrx file?


I also tried this code, but SetDefinition doesn't seem to do anything.

private void Test()
    var def = MapView.Active.Map.Layers[0].GetDefinition() as CIMFeatureLayer;
    var fLayer = LayerFactory.CreateLayer(def.FeatureTable.DataConnection,MapView.Active.Map) as FeatureLayer;
    fLayer.SetName("my layer");
    // name remains "my layer" Setdefinition has no discernable effect

You can use this:

 private void Test() 
  var layer=await QueuedTask.Run(()=>MapView.Active.Map.Layers[0].GetDefinition() as CIMFeatureLayer);
  var fLayer = await QueuedTask.Run(()=>LayerFactory.CreateLayer(polyLayer.FeatureTable.DataConnection, MapView.Active.Map)) as FeatureLayer;
  await QueuedTask.Run(()=>  fLayer.SetName("My Name"));
  await QueuedTask.Run(()=> fLayer.SetDefinition(polyLayer));
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.