Olam, one of the largest agri-businesses in the world, asked Code to build a smartphone app and a web based portal to connect their farmers globally. By using technology, the aim was to improve productivity, sustainability and the lives of Olam's farmers. This project is ongoing and has been a huge success for Olam, having been featured on Forbes and heavily in the their latest annual report and video.
Many of the client's key products are grown in remote areas where access to clean water, health and education can be difficult. Olam use OFIS as a means to understand farmer needs by plotting locations of farmers and services, completing surveys and recording transactions and training. All information recorded, over 3.5 million data points and rising, can be analysed within the web portal in a variety of ways, allowing a revolutionary level of insight into the lives of smallholding farmers all over the world. The system is currently live and in use across 8 products and 21 countries.
Making a map with a very high number of points that is constantly growing is no small feat. So we implemented clustering and tiers in our pins. Based on the zoom level of the map, we either show a cluster using regional and country level geographic data, the markerclusterer extension, a small dot pin which is colour coded or a standard pin with a colour and an icon. This makes it easy to navigate the many thousands of points on display at a glance.
// Listener to swap out normal for small icons on zoom level
google.maps.event.addListener(ofis.mapping.map, 'zoom_changed', function() {
if (ofis.mapping.mapprevzoomlevel < 10 && ofis.mapping.map.getZoom() >= 10 ) {
ofis.mapping.updatepoismarkers('icon');
}
else if (ofis.mapping.mapprevzoomlevel >= 10 && ofis.mapping.map.getZoom() < 10) {
ofis.mapping.updatepoismarkers('iconsmall');
}
if (ofis.mapping.mapprevzoomlevel <= ofis.mapping.mcmaxzoom && ofis.mapping.map.getZoom() > ofis.mapping.mcmaxzoom) {
for (var i = 0; i < ofis.mapping.mcpolys.length; i++) {
ofis.mapping.mcpolys[i].setVisible(true);
}
} else if (ofis.mapping.mapprevzoomlevel > ofis.mapping.mcmaxzoom && ofis.mapping.map.getZoom() <= ofis.mapping.mcmaxzoom) {
for (var x = 0; x < ofis.mapping.mcpolys.length; x++) {
ofis.mapping.mcpolys[x].setVisible(false);
}
}
ofis.mapping.mapprevzoomlevel = ofis.mapping.map.getZoom();
});