Its been a busy two months, working on a variety of new features for Syrinx Community Server. The product has really made some big gains during this time, including some great support for Google maps, a new Calendaring feature, beefed up e-commerce and more. We've had some good client projects that have helped us push things along.
We wanted to add Google map support after seeing another site running it for their AirSoft tournaments (http://www.airbana.co.uk/airsoft/Skirmish). It was a nice usage of Google maps and I wasnt aware of all that could be done with the API that Google exposes for it. The AirSoft site was showing contact and calendar event information as push pins that when clicked would show a tabbed popup with detailed information. After spending some time looking over the map API fro Google, I knew we could add support for it in Syrinx CS and set it up to use Ajax.
Syrinx CS has support Google maps via the FCK editor plug by Martinez Delizarrondo, which allowed a map to be dropped into an article, but that was it. This latest round of work added map support on three new ways. I wanted the Map support to run deep within the Syrinx CS product. While I didnt want to make Syrinx CS totally dependent on the map system I wanted maps to be used beyond simple eye candy; I wanted it to provided meaningful and useful insights into the data contained within a SCS based application.
Maps in Contact Management
We had recently added a nice contact management feature in Syrinx CS, and we added a map view tab directly in the contact management page. This allows you to see the set of contacts shown in the grid. Its a good way to get a spatial understanding of the contacts. When the contacts are from sales order out of the ecommerce system you can get a clearer picture of where your sales are coming from.
My intent is to extend this so that the warehouse locations would be shown in relationship to sales order shipping locations with the Google map polyline function drawing lines from the location an order was shipped from to the location products were shipped to. That is work slated for the next round of development, with the ultimate goal to be able to the supply chain on the map and interact with the data shown on it.
Maps in Calendar Management
Another feature we added recently was calendar management, and we wanted to add support for viewing calendar events in the map. When a calendar event has an address, you can set the exact latitude and longitude with our popup address pinpoint window. Later, when viewing the calendar event as an article, users can see the map of the event location and even get directions to the event from their address.
We plan on using this in sites that sell access to events at specific locations, such as training events at a conference center, diving trips at specific dive spots and so forth. For basic events with locations, the calendar is good for getting directions and understand the location of the event. However, for businesses that sell access to events, the Map can provide detailed information needed to make the decision to buy into the event. The best example for this is a dive group offering ocean diving at various dive spots. That type of event can indicate the locations at a diving trip will go to, along with rich information about the location. Google map's overlay features allow the application to add addition information about the area, which can really give the customer all the information they need to make the decision to buy.
In the next round of work in this area, we intend to allow an SCS site to add overlays onto a specific type of map that would allow for more detailed information. The general maps dont have much information about diving spots, so this would be an important addition to support that type of usage and a dive shop that offered that type of web site would stand out amongst its competition.
Integrated Map View
We built a new standard MapView page that combines contacts and calendar events into one interactive display. Standard users can filter the items shown, with a small filter display at the top of the screen. This view was taken after the AirSoft site that sparked the idea of adding Google map support. One of the things I added into this view was the ability to edit contacts and calendar events directly within the view. If you are logged in and have security privilege to edit contact or calendar events, you will be able to turn on edit mode and the map pin popups will show editors within them, including the FCK editor for editing the body of content that is shown for the contact or event.
Custom Map Pins
Calendar event types, contact types and address types can have a custom map pin assigned to them. When editing the types in the grid, you can use the map pin toolbar button to pick an image to use for the push pin. Any image can be used, and SCS will create a map pin size version of it to use on the map. This is a great way to distinguish between the various types of things being shown on the map.
My Experience with the Google Map API
Overall I can say I am very impressed with the map API. The power of it is amazing. One area I still need to work on is the ability to consolidate multiple map pins into one pin at various levels of zoom. The map API does have the ability to consolidate multiple map pins with its MarkerManager class, but it doesnt really assist with the ability to only download the information needed for the amount of map pins showing on the screen at any given time. I designed the map integration of SCS to be able to download map point information in ajax calls, and in the next rev of my work I'm going to only download the pins that are needed at the moment and do the consolidation on the server.
For example, if you have 500 pins in a small area and then zoom out, rather than having to download 500 pins of information to allow the MarkerManager class to consolidate them for you, I'll do that work on the server and only download the consolidated information into the browser. This way, when zoomed out, the 500 pins in one area may be represented as one pin and the popup window shown when clicked on would show consolidated information about the contacts or calendar events. This will allow for a much larger number of data points to be used within the map without slowing down the user experience. In reality, to do map pin consolidation well takes some serious though in how the data should be represented at different zoom levels. Its also a big programming task to get it done and working well within an Ajax environment.
Over the coming months we really want to take the Google map experience to a new level not seen in other web sites. However, we intend to do this is a way that follows our general design philosophy in SWAF; abstract the map interface and implement support for Google map as just another implementation of the map abstraction such that another "map provider" could be brought in and used over Google maps.