We're just at the stage of starting to developing a GIS application accessible through a web front end. We're thinking of using the boundless stack which includes GeoServer and PostGIS.
One of our key requirements is having bespoke combinations of objects visible to each user. These can combinations of any type of object, which I expect would all exist across several layers in a mapping system.
My question is, how best to manage this high number of unique views? There can be a very high number of objects that make up one view, while another might have quite a small number, so I'd expect some form of caching will be necessary for performance and drawing them "on the fly" will be too slow. But my understanding of caching is that it will only be beneficial or practical if the same view is seen by number of users.
We have around 100,000 different objects (about half are vectors and half points) to give you a clue of the scale of data and some users will have access to all of it while others only a section.
The definitions of what objects are available to each user are already stored as queries in a relational database, so can potentially pass them over as a list of object ids if that's the right way to do things.
I have two ideas about how to solve this:
- Break these definitions down into tiles at a certain zoom level, so all the unique user access will be a list of tiles. This will have the disadvantage that the smallest section we can filter by is the size of a tile and other objects we might not have wanted them to have access to are shown.
- Have a general low detail view that everyone sees and some user interaction is performed to see which part they want to see in detail and this can be drawn "on the fly". This will mean only a small number of objects is drawn at the time so performance isn't too bad but will also mean they can't see everything they have access to at one time.
Or a combination of the two.
I'm really after a pointer in the right direction as am pretty new to developing G.I.S. software rather than a complete solution. I just want to check whether I'm on the right track.
Thanks very much.
edit: changed client to users