I am designing a web page that will be accessed by 10-20 users simultaneously, with the following requirements:
- Display Google map data as the base layer (higher quality street information in our area of interest than OSM)
- Display ~30 pre-existing KMLs, each toggleable for display by the user. These contain markers, lines, and polygons.
- Perform filtering based upon KML meta-data (i.e. color of a feature)
- Allow user to specify a polygon
- Perform filtering based upon polygons (both user specified and pre-existing, i.e. counties)
- Export filtered results to a new KML file.
An example usage would be: User selects two of the 30 KML layers (i.e. view only bridges and dams, not hospitals), and displays these on the map. User filters these features by a single county (pre-defined polygon). User further filters the data with a user-defined polygon. User 'exports' filtered data: filtered data is added to a (versioned) KML, which aggregates all user-filtered data and (the latest version of which) is hosted for download.
I have built a prototype using OpenLayers (2.13.1), but the performance when rendering 1000+ (but generally less than 5000) features is unacceptable. I am currently exploring the use of OpenLayers 3, but it does not support a Google Maps layer, which is fairly important to this project (again, due to quality of data vs OSM in the area of interest).
I have also built a prototype using fusiontables and the GMaps API, which was able to render the data with excellent performance - however I have not been successful at filtering the data. The fusiontablelayer API provides a single ST_INTERSECTS clause as part of an SQL query, but I would need to call this once per marker, per geographic filter, equating to ~300,000 GET requests... [If there is another way to perform this filtering using the fusiontable/GMaps API that I've overlooked, please let me know!]
Finally, in a small test, I have converted KML to GeoJSON, filtered the data against another polygon defined in GeoJSON using a javascript library, and converted the results back to KML format - but with no map rendering throughout the process. Ultimately I need my users to be able to select and filter data visually on a map, not programmatically.
So far everything has been done client-side (except the various google API calls) in javascript. Other than basic web/sql servers, I do not have any experience with a GIS-specific server solution. I'm starting to think a server-based approach will be necessary to display the volume of markers and vector data I need. A client-side approach seems simpler but may not be feasible.
So, the question boils down to: Can this be done client-side (to include clientside + existing 3rd party server API)? If not, and a server-based approach could fulfill these requirements, what do you recommend?
I should mention - I'd like to keep this project free, but am willing to spend up to 200 dollars if necessary. I currently have a shared hosting web server (hostgator) and domain I can use for the project, not to mention a local web server for development. I am an experienced Java and C# programmer, and am familiar enough with javascript and SQL to be dangerous (mostly to myself).
Recommendations or not, thanks for your time reading this!