Issue with draped flat overlay in AGSSceneView when elevation is really big

01-16-2023 07:10 AM
New Contributor



I'm using using AGSPictureMarkerSymbol in AGSScene with baseSurface enabled, and some overlay in drapedFlat.


        sceneView.scene?.baseSurface?.isEnabled = true
        sceneView.isAttributionTextVisible = false
        let centerParis = AGSPoint(x: 2.3588795, y: 48.8824283, z: 0.0, spatialReference: .wgs84())
        let centerLapaz = AGSPoint(x:-68.1193, y: -16.4897, z: 0.0, spatialReference: .wgs84())
        let graphicsOverlay = AGSGraphicsOverlay()
        graphicsOverlay.sceneProperties?.surfacePlacement = .drapedFlat
        let image = UIImage(named: "mapDrone")!
        let symbol = AGSPictureMarkerSymbol(image: image)
        let graphic = AGSGraphic(geometry: centerLapaz, symbol: symbol, attributes: nil)



We do have a blockage for this when there is a big elevation. The symbol for the same distance from the camera is way bigger and with big elevation takes all the place. (I'm testing on version 100.15 & ios 16.1.1) 

Here are the screenshot done

Lapaz (where the icon is big)

and Paris (where the icon is normal)

I extract the code on a stand alone application that has only a scene with base surface enabled, with one overlay in draped flat

Paris is around 51 meters in altitude and lapaz around 3700 meters.

The bigger elevation, the bigger deformation.


Also I'm giving you the application used for the tests


0 Kudos
1 Reply
Esri Contributor

Hello @MelodyPotron Thank you for reaching out to us with your question. 

Unfortunately, there isn't much we can do at this point regarding this problem. This is as designed. Having said that, we are opening an issue to look into this to see if we can improve this experience. So, thank you again for bringing this up.

Until then, I can suggest a couple of things that you could try. You can build in some smarts to rescale the symbol based on the camera distance. You can determine the elevation of a location by calling the elevationForPoint() method on the Surface class. 

The other suggestion I have is to try and see if you can use a model scene symbol. You can set a specific size on a model scene symbol by using the symbolSizeUnit in dips. I am not sure if that is a route that helps you but it's something you could give it a try. 

Please let me know if we can help in any other way and also if you have more questions on this.



0 Kudos