I believe the zoom aspect is related to how it calculates bounding spheres for each Entity. Let me actually give a bit more description of what our app does, and how I handled things, as it relates.
We’ve got a system that displays icons on the globe for various aircraft and other platforms, and has a bunch of other desktop-like UI. Our app is built on Backbone and Ampersand, and we update our in-memory data models via ongoing polling to the backend. When we started writing this, Cesium only had the Primitive API layer, so we’ve always managed all our display handling ourselves. We’ve actually created a bunch of Backbone/Marionette View classes that render Cesium primitives instead of HTML and then update those primitives as the models’ attributes change, which has worked out great. Sounds somewhat similar to what you’re doing
The net result is that while Cesium has really focused on the Entity API in the last year, we’ve been doing our own thing with the Primitive API. But, when we decided we wanted to add camera tracking ability, I noted that the Viewer had that already, and didn’t want to reinvent that wheel. The Entity adapter I threw together winds up creating an Entity instance that has a “position” property, but no visuals, since we’re doing all the primitive handling ourselves. If you follow Cesium’s tracking/selection logic down inside, it winds up asking the various Graphics types for a bounding sphere, and uses that to determine how far it should zoom in when something is selected. Because our generated Entities had no visuals attached, they also did not hand back a bounding sphere, and Cesium would zoom in WAY too far. I wound up copying Cesium’s functions for generating bounding spheres for billboards and 3D models and modified them to suit my needs. From there I created a custom Visualizer class to pass to the CustomDataSource instance that would use those to query my Cesium Views for the actual bounding sphere, and pass that back to Cesium. Increasing the radius of the bounding sphere causes Cesium to not zoom in as close.
It’s all proprietary, of course, so I can’t just paste all my code in here. But, hopefully that gives you some ideas, and if you need more detail, I’ll see what I can do.
I have to say that, having worked with both Google Earth and Cesium, the fact that Cesium is open source is just fantastic. I can at any moment dig down inside and see exactly what’s going on, as opposed to the big binary black box that was GE.