Maps for ASP.NET Web Forms
Add Virtual Layers
Features > Virtual Layer > Add Virtual Layers

In this topic, we demonstrate how to add and implement virtual layers using C1VirtualLayer.

This topic uses functions from the following javascript file to load data into the layers.

Script for Factories Data

Source View
Copy Code
<script type="text/javascript">
    var factoriesDataBase,
        minStoreZoom = 2,
        storeSlices = Math.floor(Math.pow(2, minStoreZoom));

    function loadFactoriesDataBase() {
        $.ajax({
            url: "Resources/factories.json",
            data: null,
            context: null,
            success: function (result) {
                factoriesDataBase = result;
                minStoreZoom = 5;
                storeSlices = Math.floor(Math.pow(2, minStoreZoom));
            },
            error: null,
            dataType: "json",
            async: false
        });
    }

    function requestFactories(paper, zoom,
        maxZoom, lowerLeft, upperRight) {
        if (!factoriesDataBase) {
            loadFactoriesDataBase();
        }

        var result = { items: [] },
            factories = factoriesDataBase.factories,
            len = factories.length;
        for (var i = 0; i < len; i++) {
            var factory = factories[i];
            if (factory.longitude <= lowerLeft.x ||
                factory.longitude > upperRight.x ||
                factory.latitude <= lowerLeft.y ||
                factory.latitude > upperRight.y) {
                continue;
            }

            var item = {
                location: { x: factory.longitude, y: factory.latitude },
                size: { width: 60, height: 60 }, pinpoint: { x: 30, y: 30 }
            };

            paper.setStart();
            var img = paper.image("Resources/factory.png", 0, 0, 60, 60);
            $(img.node).wijtooltip({
                content: factory.name, position: {
                    my: "left center",
                    at: "right+30px top+30px"
                }
            });

            var set = paper.setFinish();
            set.data("name", factory.name);
            item.elements = set;

            result.items.push(item);
        }
        return result;
    }

    function requestOffices(paper) {
        if (!factoriesDataBase) {
            loadFactoriesDataBase();
        }

        var result = { items: [] },
            offices = factoriesDataBase.offices,
            len = offices.length;

        for (var i = 0; i < len; i++) {
            var office = offices[i];

            var item = {
                location: { x: office.longitude, y: office.latitude },
                size: { width: 60, height: 60 }, pinpoint: { x: 30, y: 30 }
            };

            paper.setStart();
            var img = paper.image("Resources/office.png", 0, 0, 60, 60);
            $(img.node).wijtooltip({
                content: office.name, position: {
                    my: "left center",
                    at: "right+30px top+30px"
                }
            });

            paper.circle(50, 10, 10).attr("fill", "#222222");
            paper.text(50, 10, office.stores).attr("fill", "white");
            var set = paper.setFinish();
            item.elements = set;

            result.items.push(item);
        }
        return result;
    }

    function requestStores(paper, minZoom, maxZoom, lowerLeft, upperRight) {
        if (!factoriesDataBase) {
            loadFactoriesDataBase();
        }

        if (minZoom < minStoreZoom)
            return null;

        var result = { items: [] },
            stores = factoriesDataBase.stores,
            len = stores.length;

        for (var i = 0; i < len; i++) {
            var store = stores[i];
            if (store.longitude <= lowerLeft.x ||
                store.longitude > upperRight.x ||
                store.latitude <= lowerLeft.y ||
                store.latitude > upperRight.y) {
                continue;
            }

            var item = {
                location: { x: store.longitude, y: store.latitude },
                size: { width: 60, height: 60 }, pinpoint: { x: 30, y: 30 }
            };

            paper.setStart();
            var img = paper.image("Resources/store.png", 0, 0, 60, 60);
            $(img.node).wijtooltip({
                content: store.name, position: {
                    my: "left center",
                    at: "right+30px top+30px"
                }
            });

            var set = paper.setFinish();
            item.elements = set;

            result.items.push(item);
        }
        return result;
    }
  </script>

The above script uses a factories.json file that contains information about the latitude, longitude, name and capacity of factories and three images to display factories, stores and offices on the map and jquery.wijmo.wijtooltip.min.js file, that are stored in the Resources folder within the project:

factories.json

{"factories":[{"latitude":40.174787869083865,"longitude":-79.95781764925637,"name":"Hazel Kirk Factory","capacity":73},{"latitude":29.315704948857874,"longitude":-98.622773852297684,"name":"Von Ormy Factory","capacity":30},{"latitude":23.73419836230989,"longitude":120.38897842789238,"name":"Hai-ch'ien-ts'o Factory","capacity":2},{"latitude":22.456743436351488,"longitude":88.394218710702489,"name":"Nagtala Factory","capacity":91},{"latitude":40.576731689535464,"longitude":110.01686019708168,"name":"Donghe Factory","capacity":94}],"officeStoreDistance":100000,"offices":[{"latitude":40.702721412011073,"longitude":-74.010523512670261,"name":"Battery Park City Office","manager":null,"stores":48},{"latitude":33.801699299333521,"longitude":-118.27377222374885,"name":"Avalon Village Office","manager":null,"stores":36},{"latitude":39.745032819014433,"longitude":-104.99067543580149,"name":"Denver Office","manager":null,"stores":22},{"latitude":51.4931608603362,"longitude":-0.23210537731097822,"name":"London Office","manager":null,"stores":29},{"latitude":40.839836313739795,"longitude":14.252559165688874,"name":"Napoli Office","manager":null,"stores":23},{"latitude":-33.924011573784504,"longitude":18.439092119811992,"name":"Woodstock Office","manager":null,"stores":22},{"latitude":12.960259739648739,"longitude":77.59416526348808,"name":"Bangalore Office","manager":null,"stores":21},{"latitude":22.300081748583846,"longitude":114.17243692425654,"name":"Tsim Sha Tsui Office","manager":null,"stores":16},{"latitude":37.565132059475928,"longitude":126.99440383658488,"name":"Seoul Office","manager":null,"stores":19},{"latitude":-33.862803915767458,"longitude":151.20708624907354,"name":"Sidney Office","manager":null,"stores":20},{"latitude":-30.037852417715904,"longitude":-51.1999405219253,"name":"Porto Alegre Office","manager":null,"stores":16},{"latitude":-34.905781369808373,"longitude":-56.19903919892171,"name":"Montevideo Office","manager":null,"stores":8}],"stores":[{"latitude":40.715701319438153,"longitude":-73.990482046910969,"name":"Hester - Allen Turnkey Housing Store","Sales":[{"product":{"name":"Mountain"},"sales":34},{"product":{"name":"Racing"},"sales":19},{"product":{"name":"Touring"},"sales":21},{"product":{"name":"BMX"},"sales":45}]},{"latitude":40.718888979847996,"longitude":-74.000996306249363,"name":"Downtown Manhattan Store","Sales":[{"product":{"name":"Mountain"},"sales":9},{"product":{"name":"Racing"},"sales":94},{"product":{"name":"Touring"},"sales":56},{"product":{"name":"BMX"},"sales":67}]},{"latitude":40.70197311967236,"longitude":-73.985761359044758,"name":"Vinegar Hill Store","Sales":[{"product":{"name":"Mountain"},"sales":61},{"product":{"name":"Racing"},"sales":75},{"product":{"name":"Touring"},"sales":34},{"product":{"name":"BMX"},"sales":24}]},{"latitude":40.714237546686491,"longitude":-74.00069589883968,"name":"Governor Alfred E Smith Houses Store","Sales":[{"product":{"name":"Mountain"},"sales":66},{"product":{"name":"Racing"},"sales":17},{"product":{"name":"Touring"},"sales":56},{"product":{"name":"BMX"},"sales":0}]},{"latitude":40.685768902276131,"longitude":-73.9880787876336,"name":"Wyckoff Gardens Store","Sales":[{"product":{"name":"Mountain"},"sales":49},{"product":{"name":"Racing"},"sales":97},{"product":{"name":"Touring"},"sales":46},{"product":{"name":"BMX"},"sales":22}]},{"latitude":40.689153241117189,"longitude":-73.945678427526175,"name":"Medgar Evers Houses Store","Sales":[{"product":{"name":"Mountain"},"sales":33},{"product":{"name":"Racing"},"sales":63},{"product":{"name":"Touring"},"sales":2},{"product":{"name":"BMX"},"sales":31}]},{"latitude":40.658297334215604,"longitude":-73.91683931619805,"name":"Brownsville Store","Sales":[{"product":{"name":"Mountain"},"sales":21},{"product":{"name":"Racing"},"sales":23},{"product":{"name":"Touring"},"sales":65},{"product":{"name":"BMX"},"sales":62}]},{"latitude":40.723247370510535,"longitude":-74.062579825231253,"name":"Bergen Store","Sales":[{"product":{"name":"Mountain"},"sales":45},{"product":{"name":"Racing"},"sales":8},{"product":{"name":"Touring"},"sales":55},{"product":{"name":"BMX"},"sales":95}]},{"latitude":40.605926818104322,"longitude":-73.9655911472527,"name":"Gravesend Store","Sales":[{"product":{"name":"Mountain"},"sales":45},{"product":{"name":"Racing"},"sales":70},{"product":{"name":"Touring"},"sales":4},{"product":{"name":"BMX"},"sales":62}]},{"latitude":40.61895814755669,"longitude":-74.140685751744883,"name":"Westerleigh Store","Sales":[{"product":{"name":"Mountain"},"sales":57},{"product":{"name":"Racing"},"sales":51},{"product":{"name":"Touring"},"sales":32},{"product":{"name":"BMX"},"sales":47}]},{"latitude":40.658557781357324,"longitude":-74.202483847448008,"name":"Union Square Store","Sales":[{"product":{"name":"Mountain"},"sales":76},{"product":{"name":"Racing"},"sales":95},{"product":{"name":"Touring"},"sales":23},{"product":{"name":"BMX"},"sales":16}]},{"latitude":40.752252668149204,"longitude":-73.78294344217457,"name":"Queens Store","Sales":[{"product":{"name":"Mountain"},"sales":56},{"product":{"name":"Racing"},"sales":46},{"product":{"name":"Touring"},"sales":81},{"product":{"name":"BMX"},"sales":9}]},{"latitude":40.835686083158286,"longitude":-73.862250998326914,"name":"Parkchester Store","Sales":[{"product":{"name":"Mountain"},"sales":50},{"product":{"name":"Racing"},"sales":88},{"product":{"name":"Touring"},"sales":42},{"product":{"name":"BMX"},"sales":62}]},{"latitude":40.8421796114176,"longitude":-73.918555929967539,"name":"Sedgwick Houses Store","Sales":[{"product":{"name":"Mountain"},"sales":94},{"product":{"name":"Racing"},"sales":95},{"product":{"name":"Touring"},"sales":89},{"product":{"name":"BMX"},"sales":2}]},{"latitude":40.7696757772093,"longitude":-74.039405539342539,"name":"Weehawken Store","Sales":[{"product":{"name":"Mountain"},"sales":66},{"product":{"name":"Racing"},"sales":75},{"product":{"name":"Touring"},"sales":17},{"product":{"name":"BMX"},"sales":1}]},{"latitude":40.590807292153613,"longitude":-74.084724142858164,"name":"Linden-Park Store","Sales":[{"product":{"name":"Mountain"},"sales":38},{"product":{"name":"Racing"},"sales":56},{"product":{"name":"Touring"},"sales":45},{"product":{"name":"BMX"},"sales":1}]},{"latitude":40.586375058958396,"longitude":-74.247459128209726,"name":"West Carteret Store","Sales":[{"product":{"name":"Mountain"},"sales":41},{"product":{"name":"Racing"},"sales":91},{"product":{"name":"Touring"},"sales":93},{"product":{"name":"BMX"},"sales":26}]},{"latitude":40.7688957356669,"longitude":-74.191840842076914,"name":"Ampere Store","Sales":[{"product":{"name":"Mountain"},"sales":83},{"product":{"name":"Racing"},"sales":57},{"product":{"name":"Touring"},"sales":15},{"product":{"name":"BMX"},"sales":6}]},{"latitude":40.695270648243024,"longitude":-74.29930086404957,"name":"Milltown Store","Sales":[{"product":{"name":"Mountain"},"sales":27},{"product":{"name":"Racing"},"sales":63},{"product":{"name":"Touring"},"sales":63},{"product":{"name":"BMX"},"sales":46}]},{"latitude":40.612775138911744,"longitude":-74.336676121732012,"name":"Store","Sales":[{"product":{"name":"Mountain"},"sales":15},{"product":{"name":"Racing"},"sales":80},{"product":{"name":"Touring"},"sales":47},{"product":{"name":"BMX"},"sales":63}]},{"latitude":40.6888343798805,"longitude":-74.398130894681231,"name":"Murray Hill Store","Sales":[{"product":{"name":"Mountain"},"sales":16},{"product":{"name":"Racing"},"sales":3},{"product":{"name":"Touring"},"sales":4},{"product":{"name":"BMX"},"sales":42}]},{"latitude":40.524364760975814,"longitude":-74.274191380521074,"name":"William Dunlap Homes Store","Sales":[{"product":{"name":"Mountain"},"sales":11},{"product":{"name":"Racing"},"sales":81},{"product":{"name":"Touring"},"sales":39},{"product":{"name":"BMX"},"sales":17}]},{"latitude":40.527235367627021,"longitude":-74.3898911485875,"name":"Lincoln Park Store","Sales":[{"product":{"name":"Mountain"},"sales":28},{"product":{"name":"Racing"},"sales":83},{"product":{"name":"Touring"},"sales":82},{"product":{"name":"BMX"},"sales":13}]},{"latitude":40.693520126187586,"longitude":-73.773626805325762,"name":"Locust Manor Store","Sales":[{"product":{"name":"Mountain"},"sales":26},{"product":{"name":"Racing"},"sales":42},{"product":{"name":"Touring"},"sales":57},{"product":{"name":"BMX"},"sales":53}]},{"latitude":40.7460820125681,"longitude":-73.867353917142182,"name":"Corona Store","Sales":[{"product":{"name":"Mountain"},"sales":58},{"product":{"name":"Racing"},"sales":32},{"product":{"name":"Touring"},"sales":52},{"product":{"name":"BMX"},"sales":0}]},{"latitude":40.704972785492316,"longitude":-73.824438572903887,"name":"Richmond Hill Store","Sales":[{"product":{"name":"Mountain"},"sales":41},{"product":{"name":"Racing"},"sales":62},{"product":{"name":"Touring"},"sales":33},{"product":{"name":"BMX"},"sales":87}]},{"latitude":40.739058817003,"longitude":-73.597845555325762,"name":"East Garden City Store","Sales":[{"product":{"name":"Mountain"},"sales":52},{"product":{"name":"Racing"},"sales":62},{"product":{"name":"Touring"},"sales":95},{"product":{"name":"BMX"},"sales":10}]},{"latitude":40.657327199964314,"longitude":-73.577246190091387,"name":"Freeport Store","Sales":[{"product":{"name":"Mountain"},"sales":30},{"product":{"name":"Racing"},"sales":44},{"product":{"name":"Touring"},"sales":4},{"product":{"name":"BMX"},"sales":83}]},{"latitude":40.726311123529214,"longitude":-73.416571141263262,"name":"East Farmingdale Store","Sales":[{"product":{"name":"Mountain"},"sales":77},{"product":{"name":"Racing"},"sales":59},{"product":{"name":"Touring"},"sales":76},{"product":{"name":"BMX"},"sales":88}]},{"latitude":40.866401391122594,"longitude":-73.533987523099213,"name":"Oyster Bay Store","Sales":[{"product":{"name":"Mountain"},"sales":15},{"product":{"name":"Racing"},"sales":22},{"product":{"name":"Touring"},"sales":51},{"product":{"name":"BMX"},"sales":38}]},{"latitude":40.975876059314835,"longitude":-73.7142319689,"name":"Sunset Ridge Store","Sales":[{"product":{"name":"Mountain"},"sales":5},{"product":{"name":"Racing"},"sales":31},{"product":{"name":"Touring"},"sales":79},{"product":{"name":"BMX"},"sales":37}]},{"latitude":41.00256864629246,"longitude":-73.669256688138276,"name":"Port Chester Store","Sales":[{"product":{"name":"Mountain"},"sales":53},{"product":{"name":"Racing"},"sales":36},{"product":{"name":"Touring"},"sales":34},{"product":{"name":"BMX"},"sales":23}]},{"latitude":40.95358076767473,"longitude":-73.866323948880449,"name":"Nepperhan Store","Sales":[{"product":{"name":"Mountain"},"sales":95},{"product":{"name":"Racing"},"sales":49},{"product":{"name":"Touring"},"sales":25},{"product":{"name":"BMX"},"sales":55}]},{"latitude":40.980282376471919,"longitude":-73.957647801419526,"name":"Closter Store","Sales":[{"product":{"name":"Mountain"},"sales":93},{"product":{"name":"Racing"},"sales":77},{"product":{"name":"Touring"},"sales":75},{"product":{"name":"BMX"},"sales":11}]},{"latitude":41.03960936971481,"longitude":-73.94082498647812,"name":"Orangeburg Store","Sales":[{"product":{"name":"Mountain"},"sales":27},{"product":{"name":"Racing"},"sales":74},{"product":{"name":"Touring"},"sales":44},{"product":{"name":"BMX"},"sales":9}]},{"latitude":41.049707769627659,"longitude":-74.068541050931231,"name":"Chestnut Ridge Store","Sales":[{"product":{"name":"Mountain"},"sales":73},{"product":{"name":"Racing"},"sales":98},{"product":{"name":"Touring"},"sales":33},{"product":{"name":"BMX"},"sales":33}]},{"latitude":40.9398368948617,"longitude":-74.140295506497651,"name":"Fair Lawn Store","Sales":[{"product":{"name":"Mountain"},"sales":16},{"product":{"name":"Racing"},"sales":2},{"product":{"name":"Touring"},"sales":6},{"product":{"name":"BMX"},"sales":46}]},{"latitude":40.901702128265029,"longitude":-74.160894871732012,"name":"Lake View Store","Sales":[{"product":{"name":"Mountain"},"sales":43},{"product":{"name":"Racing"},"sales":16},{"product":{"name":"Touring"},"sales":28},{"product":{"name":"BMX"},"sales":8}]},{"latitude":40.714236316152252,"longitude":-74.171091612057,"name":"Oak Island Junction Store","Sales":[{"product":{"name":"Mountain"},"sales":99},{"product":{"name":"Racing"},"sales":17},{"product":{"name":"Touring"},"sales":90},{"product":{"name":"BMX"},"sales":90}]},{"latitude":40.570956492069655,"longitude":-74.467722471432,"name":"New Market Store","Sales":[{"product":{"name":"Mountain"},"sales":32},{"product":{"name":"Racing"},"sales":66},{"product":{"name":"Touring"},"sales":67},{"product":{"name":"BMX"},"sales":24}]},{"latitude":40.481707452130976,"longitude":-74.293657835201529,"name":"South Amboy Store","Sales":[{"product":{"name":"Mountain"},"sales":30},{"product":{"name":"Racing"},"sales":3},{"product":{"name":"Touring"},"sales":34},{"product":{"name":"BMX"},"sales":99}]},{"latitude":40.481968587466596,"longitude":-74.456392820553091,"name":"New Brunswick Store","Sales":[{"product":{"name":"Mountain"},"sales":38},{"product":{"name":"Racing"},"sales":89},{"product":{"name":"Touring"},"sales":55},{"product":{"name":"BMX"},"sales":62}]},{"latitude":40.566262137335144,"longitude":-74.589945371822623,"name":"Finderne Store","Sales":[{"product":{"name":"Mountain"},"sales":22},{"product":{"name":"Racing"},"sales":9},{"product":{"name":"Touring"},"sales":20},{"product":{"name":"BMX"},"sales":30}]},{"latitude":40.826300582683039,"longitude":-74.4512429792445,"name":"Cedar Knolls Store","Sales":[{"product":{"name":"Mountain"},"sales":1},{"product":{"name":"Racing"},"sales":15},{"product":{"name":"Touring"},"sales":87},{"product":{"name":"BMX"},"sales":82}]},{"latitude":40.993653776909241,"longitude":-74.297091062740591,"name":"Riverdale Store","Sales":[{"product":{"name":"Mountain"},"sales":8},{"product":{"name":"Racing"},"sales":29},{"product":{"name":"Touring"},"sales":58},{"product":{"name":"BMX"},"sales":2}]},{"latitude":41.084288251465431,"longitude":-74.142939146236685,"name":"Mahwah Store","Sales":[{"product":{"name":"Mountain"},"sales":83},{"product":{"name":"Racing"},"sales":48},{"product":{"name":"Touring"},"sales":34},{"product":{"name":"BMX"},"sales":50}]},{"latitude":41.033548321270715,"longitude":-73.767344053463248,"name":"White Plains Store","Sales":[{"product":{"name":"Mountain"},"sales":28},{"product":{"name":"Racing"},"sales":46},{"product":{"name":"Touring"},"sales":65},{"product":{"name":"BMX"},"sales":71}]},{"latitude":41.052450930782612,"longitude":-73.533197935299185,"name":"Stamford Store","Sales":[{"product":{"name":"Mountain"},"sales":33},{"product":{"name":"Racing"},"sales":53},{"product":{"name":"Touring"},"sales":63},{"product":{"name":"BMX"},"sales":40}]},{"latitude":33.856314932245908,"longitude":-118.3204737519946,"name":"Southwest Village Store","Sales":[{"product":{"name":"Mountain"},"sales":29},{"product":{"name":"Racing"},"sales":57},{"product":{"name":"Touring"},"sales":62},{"product":{"name":"BMX"},"sales":58}]},{"latitude":33.938671387838724,"longitude":-118.3050242280688,"name":"Westmont Store","Sales":[{"product":{"name":"Mountain"},"sales":57},{"product":{"name":"Racing"},"sales":44},{"product":{"name":"Touring"},"sales":33},{"product":{"name":"BMX"},"sales":64}]},{"latitude":33.913887328802012,"longitude":-118.15327557084225,"name":"Hollydale Store","Sales":[{"product":{"name":"Mountain"},"sales":90},{"product":{"name":"Racing"},"sales":25},{"product":{"name":"Touring"},"sales":11},{"product":{"name":"BMX"},"sales":92}]},{"latitude":33.810400208432725,"longitude":-118.16014202592037,"name":"Signal Hill Store","Sales":[{"product":{"name":"Mountain"},"sales":60},{"product":{"name":"Racing"},"sales":83},{"product":{"name":"Touring"},"sales":82},{"product":{"name":"BMX"},"sales":13}]},{"latitude":33.81696096453561,"longitude":-118.03620251176022,"name":"Cypress Store","Sales":[{"product":{"name":"Mountain"},"sales":62},{"product":{"name":"Racing"},"sales":51},{"product":{"name":"Touring"},"sales":31},{"product":{"name":"BMX"},"sales":32}]},{"latitude":33.873704750506526,"longitude":-118.22125347611569,"name":"Dominguez Junction Store","Sales":[{"product":{"name":"Mountain"},"sales":47},{"product":{"name":"Racing"},"sales":16},{"product":{"name":"Touring"},"sales":87},{"product":{"name":"BMX"},"sales":41}]},{"latitude":33.962593980540383,"longitude":-118.0907908296313,"name":"Downey Road Store","Sales":[{"product":{"name":"Mountain"},"sales":90},{"product":{"name":"Racing"},"sales":11},{"product":{"name":"Touring"},"sales":44},{"product":{"name":"BMX"},"sales":35}]},{"latitude":33.975976306429715,"longitude":-118.39840801713137,"name":"Alsace Store","Sales":[{"product":{"name":"Mountain"},"sales":56},{"product":{"name":"Racing"},"sales":35},{"product":{"name":"Touring"},"sales":82},{"product":{"name":"BMX"},"sales":2}]},{"latitude":34.005865383274774,"longitude":-118.30227764603761,"name":"Wildasin Store","Sales":[{"product":{"name":"Mountain"},"sales":47},{"product":{"name":"Racing"},"sales":47},{"product":{"name":"Touring"},"sales":11},{"product":{"name":"BMX"},"sales":25}]},{"latitude":34.004726944414081,"longitude":-118.21679028031495,"name":"Vernon Store","Sales":[{"product":{"name":"Mountain"},"sales":75},{"product":{"name":"Racing"},"sales":98},{"product":{"name":"Touring"},"sales":7},{"product":{"name":"BMX"},"sales":9}]},{"latitude":34.0650431690653,"longitude":-118.26210888383058,"name":"Angelino Heights Store","Sales":[{"product":{"name":"Mountain"},"sales":87},{"product":{"name":"Racing"},"sales":79},{"product":{"name":"Touring"},"sales":35},{"product":{"name":"BMX"},"sales":94}]},{"latitude":34.080115523059334,"longitude":-118.37059887406501,"name":"Crescent Store","Sales":[{"product":{"name":"Mountain"},"sales":46},{"product":{"name":"Racing"},"sales":42},{"product":{"name":"Touring"},"sales":61},{"product":{"name":"BMX"},"sales":87}]},{"latitude":34.047123486680754,"longitude":-118.45402630326423,"name":"West Los Angeles Store","Sales":[{"product":{"name":"Mountain"},"sales":87},{"product":{"name":"Racing"},"sales":10},{"product":{"name":"Touring"},"sales":60},{"product":{"name":"BMX"},"sales":78}]},{"latitude":34.070731164862067,"longitude":-118.09216412064723,"name":"South San Gabriel Store","Sales":[{"product":{"name":"Mountain"},"sales":92},{"product":{"name":"Racing"},"sales":63},{"product":{"name":"Touring"},"sales":49},{"product":{"name":"BMX"},"sales":87}]},{"latitude":34.139525640372071,"longitude":-118.25386913773706,"name":"Glendale Store","Sales":[{"product":{"name":"Mountain"},"sales":15},{"product":{"name":"Racing"},"sales":2},{"product":{"name":"Touring"},"sales":47},{"product":{"name":"BMX"},"sales":78}]},{"latitude":34.042002881667429,"longitude":-117.97955425736599,"name":"Avocado Heights Store","Sales":[{"product":{"name":"Mountain"},"sales":18},{"product":{"name":"Racing"},"sales":86},{"product":{"name":"Touring"},"sales":87},{"product":{"name":"BMX"},"sales":68}]},{"latitude":34.090636142762563,"longitude":-118.02075298783474,"name":"North El Monte Store","Sales":[{"product":{"name":"Mountain"},"sales":97},{"product":{"name":"Racing"},"sales":50},{"product":{"name":"Touring"},"sales":62},{"product":{"name":"BMX"},"sales":3}]},{"latitude":34.139525640372071,"longitude":-118.01182659623321,"name":"Monrovia Store","Sales":[{"product":{"name":"Mountain"},"sales":45},{"product":{"name":"Racing"},"sales":10},{"product":{"name":"Touring"},"sales":26},{"product":{"name":"BMX"},"sales":49}]},{"latitude":34.149754748868787,"longitude":-118.10212048051054,"name":"Lamanda Park Store","Sales":[{"product":{"name":"Mountain"},"sales":73},{"product":{"name":"Racing"},"sales":51},{"product":{"name":"Touring"},"sales":5},{"product":{"name":"BMX"},"sales":14}]},{"latitude":34.096606723757453,"longitude":-117.91088970658485,"name":"Covina Store","Sales":[{"product":{"name":"Mountain"},"sales":31},{"product":{"name":"Racing"},"sales":78},{"product":{"name":"Touring"},"sales":56},{"product":{"name":"BMX"},"sales":85}]},{"latitude":33.926137822472008,"longitude":-117.92462261674116,"name":"La Habra Store","Sales":[{"product":{"name":"Mountain"},"sales":26},{"product":{"name":"Racing"},"sales":44},{"product":{"name":"Touring"},"sales":74},{"product":{"name":"BMX"},"sales":17}]},{"latitude":33.863157250589872,"longitude":-117.83501537797162,"name":"Atwood Store","Sales":[{"product":{"name":"Mountain"},"sales":19},{"product":{"name":"Racing"},"sales":15},{"product":{"name":"Touring"},"sales":35},{"product":{"name":"BMX"},"sales":40}]},{"latitude":33.78500819474614,"longitude":-117.8504649018974,"name":"Orange Store","Sales":[{"product":{"name":"Mountain"},"sales":67},{"product":{"name":"Racing"},"sales":75},{"product":{"name":"Touring"},"sales":98},{"product":{"name":"BMX"},"sales":86}]},{"latitude":33.737913191341072,"longitude":-117.95346172806927,"name":"Caravana Trailer Lodge Store","Sales":[{"product":{"name":"Mountain"},"sales":46},{"product":{"name":"Racing"},"sales":39},{"product":{"name":"Touring"},"sales":73},{"product":{"name":"BMX"},"sales":21}]},{"latitude":33.694505811949242,"longitude":-117.85012157914355,"name":"Dyer Store","Sales":[{"product":{"name":"Mountain"},"sales":1},{"product":{"name":"Racing"},"sales":5},{"product":{"name":"Touring"},"sales":41},{"product":{"name":"BMX"},"sales":82}]},{"latitude":33.679079487150204,"longitude":-117.96135815140916,"name":"Rancho Huntington Mobile Home Park Store","Sales":[{"product":{"name":"Mountain"},"sales":66},{"product":{"name":"Racing"},"sales":70},{"product":{"name":"Touring"},"sales":47},{"product":{"name":"BMX"},"sales":48}]},{"latitude":33.647075322488092,"longitude":-117.9026499604912,"name":"Ponderosa Mobile Home Park Store","Sales":[{"product":{"name":"Mountain"},"sales":67},{"product":{"name":"Racing"},"sales":48},{"product":{"name":"Touring"},"sales":13},{"product":{"name":"BMX"},"sales":86}]},{"latitude":33.627638414920291,"longitude":-117.69837292191701,"name":"El Toro Mobile Home Estates Store","Sales":[{"product":{"name":"Mountain"},"sales":19},{"product":{"name":"Racing"},"sales":73},{"product":{"name":"Touring"},"sales":83},{"product":{"name":"BMX"},"sales":83}]},{"latitude":33.88168577602034,"longitude":-117.5799265718194,"name":"Corona Store","Sales":[{"product":{"name":"Mountain"},"sales":0},{"product":{"name":"Racing"},"sales":40},{"product":{"name":"Touring"},"sales":32},{"product":{"name":"BMX"},"sales":46}]},{"latitude":33.999888409009927,"longitude":-117.69699963090159,"name":"Chino Store","Sales":[{"product":{"name":"Mountain"},"sales":69},{"product":{"name":"Racing"},"sales":58},{"product":{"name":"Touring"},"sales":27},{"product":{"name":"BMX"},"sales":21}]},{"latitude":34.066465203812875,"longitude":-117.54216106888993,"name":"Etiwa (historical) Store","Sales":[{"product":{"name":"Mountain"},"sales":45},{"product":{"name":"Racing"},"sales":4},{"product":{"name":"Touring"},"sales":61},{"product":{"name":"BMX"},"sales":72}]},{"latitude":34.105988214394813,"longitude":-117.65614422318686,"name":"Upland Store","Sales":[{"product":{"name":"Mountain"},"sales":48},{"product":{"name":"Racing"},"sales":94},{"product":{"name":"Touring"},"sales":18},{"product":{"name":"BMX"},"sales":57}]},{"latitude":34.182138753567649,"longitude":-118.40905102250352,"name":"Garnsey Store","Sales":[{"product":{"name":"Mountain"},"sales":74},{"product":{"name":"Racing"},"sales":42},{"product":{"name":"Touring"},"sales":53},{"product":{"name":"BMX"},"sales":72}]},{"latitude":34.209115932256829,"longitude":-118.55393322465199,"name":"Winnetka Store","Sales":[{"product":{"name":"Mountain"},"sales":71},{"product":{"name":"Racing"},"sales":89},{"product":{"name":"Touring"},"sales":38},{"product":{"name":"BMX"},"sales":66}]},{"latitude":34.30247542717688,"longitude":-118.4605494355895,"name":"Sylmar Store","Sales":[{"product":{"name":"Mountain"},"sales":99},{"product":{"name":"Racing"},"sales":35},{"product":{"name":"Touring"},"sales":34},{"product":{"name":"BMX"},"sales":26}]},{"latitude":34.2837550825815,"longitude":-118.71460827348015,"name":"Santa Susana Store","Sales":[{"product":{"name":"Mountain"},"sales":15},{"product":{"name":"Racing"},"sales":91},{"product":{"name":"Touring"},"sales":85},{"product":{"name":"BMX"},"sales":82}]},{"latitude":39.739588017925648,"longitude":-104.94531391694157,"name":"Alamo Placita Store","Sales":[{"product":{"name":"Mountain"},"sales":95},{"product":{"name":"Racing"},"sales":79},{"product":{"name":"Touring"},"sales":47},{"product":{"name":"BMX"},"sales":51}]},{"latitude":39.774691177043493,"longitude":-104.93192432953924,"name":"Commerce City Store","Sales":[{"product":{"name":"Mountain"},"sales":91},{"product":{"name":"Racing"},"sales":93},{"product":{"name":"Touring"},"sales":57},{"product":{"name":"BMX"},"sales":47}]},{"latitude":39.729687277410285,"longitude":-104.91201160981268,"name":"Glendale Store","Sales":[{"product":{"name":"Mountain"},"sales":10},{"product":{"name":"Racing"},"sales":67},{"product":{"name":"Touring"},"sales":50},{"product":{"name":"BMX"},"sales":87}]},{"latitude":39.715031571673286,"longitude":-105.00608204438298,"name":"Alamo Placita Store","Sales":[{"product":{"name":"Mountain"},"sales":67},{"product":{"name":"Racing"},"sales":59},{"product":{"name":"Touring"},"sales":75},{"product":{"name":"BMX"},"sales":50}]},{"latitude":39.772052463825005,"longitude":-105.02994297577948,"name":"Mountain View Store","Sales":[{"product":{"name":"Mountain"},"sales":57},{"product":{"name":"Racing"},"sales":27},{"product":{"name":"Touring"},"sales":13},{"product":{"name":"BMX"},"sales":33}]},{"latitude":39.746847657106528,"longitude":-105.04848240449043,"name":"Edgewater Store","Sales":[{"product":{"name":"Mountain"},"sales":1},{"product":{"name":"Racing"},"sales":66},{"product":{"name":"Touring"},"sales":61},{"product":{"name":"BMX"},"sales":67}]},{"latitude":39.702353854978192,"longitude":-105.08247135712713,"name":"Lakewood Store","Sales":[{"product":{"name":"Mountain"},"sales":49},{"product":{"name":"Racing"},"sales":17},{"product":{"name":"Touring"},"sales":8},{"product":{"name":"BMX"},"sales":94}]},{"latitude":39.701297273432282,"longitude":-104.95853184296696,"name":"Glendale Store","Sales":[{"product":{"name":"Mountain"},"sales":91},{"product":{"name":"Racing"},"sales":66},{"product":{"name":"Touring"},"sales":73},{"product":{"name":"BMX"},"sales":47}]},{"latitude":39.775350839542696,"longitude":-105.08195637299626,"name":"Wheat Ridge Store","Sales":[{"product":{"name":"Mountain"},"sales":90},{"product":{"name":"Racing"},"sales":39},{"product":{"name":"Touring"},"sales":15},{"product":{"name":"BMX"},"sales":44}]},{"latitude":39.733911767305,"longitude":-105.07680653168767,"name":"Spivak Store","Sales":[{"product":{"name":"Mountain"},"sales":74},{"product":{"name":"Racing"},"sales":59},{"product":{"name":"Touring"},"sales":80},{"product":{"name":"BMX"},"sales":13}]},{"latitude":39.780627911934062,"longitude":-104.97689961030098,"name":"Utah Junction Store","Sales":[{"product":{"name":"Mountain"},"sales":72},{"product":{"name":"Racing"},"sales":32},{"product":{"name":"Touring"},"sales":22},{"product":{"name":"BMX"},"sales":10}]},{"latitude":39.739588017925648,"longitude":-104.94531391694157,"name":"Alamo Placita Store","Sales":[{"product":{"name":"Mountain"},"sales":95},{"product":{"name":"Racing"},"sales":79},{"product":{"name":"Touring"},"sales":47},{"product":{"name":"BMX"},"sales":51}]},{"latitude":39.774691177043493,"longitude":-104.93192432953924,"name":"Commerce City Store","Sales":[{"product":{"name":"Mountain"},"sales":91},{"product":{"name":"Racing"},"sales":93},{"product":{"name":"Touring"},"sales":57},{"product":{"name":"BMX"},"sales":47}]},{"latitude":39.729687277410285,"longitude":-104.91201160981268,"name":"Glendale Store","Sales":[{"product":{"name":"Mountain"},"sales":10},{"product":{"name":"Racing"},"sales":67},{"product":{"name":"Touring"},"sales":50},{"product":{"name":"BMX"},"sales":87}]},{"latitude":39.715031571673286,"longitude":-105.00608204438298,"name":"Alamo Placita Store","Sales":[{"product":{"name":"Mountain"},"sales":67},{"product":{"name":"Racing"},"sales":59},{"product":{"name":"Touring"},"sales":75},{"product":{"name":"BMX"},"sales":50}]},{"latitude":39.772052463825005,"longitude":-105.02994297577948,"name":"Mountain View Store","Sales":[{"product":{"name":"Mountain"},"sales":57},{"product":{"name":"Racing"},"sales":27},{"product":{"name":"Touring"},"sales":13},{"product":{"name":"BMX"},"sales":33}]},{"latitude":39.746847657106528,"longitude":-105.04848240449043,"name":"Edgewater Store","Sales":[{"product":{"name":"Mountain"},"sales":1},{"product":{"name":"Racing"},"sales":66},{"product":{"name":"Touring"},"sales":61},{"product":{"name":"BMX"},"sales":67}]},{"latitude":39.702353854978192,"longitude":-105.08247135712713,"name":"Lakewood Store","Sales":[{"product":{"name":"Mountain"},"sales":49},{"product":{"name":"Racing"},"sales":17},{"product":{"name":"Touring"},"sales":8},{"product":{"name":"BMX"},"sales":94}]},{"latitude":39.701297273432282,"longitude":-104.95853184296696,"name":"Glendale Store","Sales":[{"product":{"name":"Mountain"},"sales":91},{"product":{"name":"Racing"},"sales":66},{"product":{"name":"Touring"},"sales":73},{"product":{"name":"BMX"},"sales":47}]},{"latitude":39.775350839542696,"longitude":-105.08195637299626,"name":"Wheat Ridge Store","Sales":[{"product":{"name":"Mountain"},"sales":90},{"product":{"name":"Racing"},"sales":39},{"product":{"name":"Touring"},"sales":15},{"product":{"name":"BMX"},"sales":44}]},{"latitude":39.733911767305,"longitude":-105.07680653168767,"name":"Spivak Store","Sales":[{"product":{"name":"Mountain"},"sales":74},{"product":{"name":"Racing"},"sales":59},{"product":{"name":"Touring"},"sales":80},{"product":{"name":"BMX"},"sales":13}]},{"latitude":39.780627911934062,"longitude":-104.97689961030098,"name":"Utah Junction Store","Sales":[{"product":{"name":"Mountain"},"sales":72},{"product":{"name":"Racing"},"sales":32},{"product":{"name":"Touring"},"sales":22},{"product":{"name":"BMX"},"sales":10}]},{"latitude":51.53405155327826,"longitude":-0.13948853173535669,"name":"Saint Pancras Store","Sales":[{"product":{"name":"Mountain"},"sales":11},{"product":{"name":"Racing"},"sales":14},{"product":{"name":"Touring"},"sales":21},{"product":{"name":"BMX"},"sales":96}]},{"latitude":51.477849637459279,"longitude":-0.10361130395215358,"name":"Walworth Store","Sales":[{"product":{"name":"Mountain"},"sales":83},{"product":{"name":"Racing"},"sales":11},{"product":{"name":"Touring"},"sales":6},{"product":{"name":"BMX"},"sales":22}]},{"latitude":51.434208007880954,"longitude":-0.16128952660840357,"name":"Tooting Store","Sales":[{"product":{"name":"Mountain"},"sales":57},{"product":{"name":"Racing"},"sales":64},{"product":{"name":"Touring"},"sales":84},{"product":{"name":"BMX"},"sales":65}]},{"latitude":51.532770152936337,"longitude":-0.28076584496777857,"name":"Wembley Store","Sales":[{"product":{"name":"Mountain"},"sales":44},{"product":{"name":"Racing"},"sales":79},{"product":{"name":"Touring"},"sales":55},{"product":{"name":"BMX"},"sales":56}]},{"latitude":51.461809770728749,"longitude":-0.33089096703809107,"name":"Isleworth Store","Sales":[{"product":{"name":"Mountain"},"sales":23},{"product":{"name":"Racing"},"sales":88},{"product":{"name":"Touring"},"sales":22},{"product":{"name":"BMX"},"sales":32}]},{"latitude":51.444694363669043,"longitude":-0.028080298092778566,"name":"Catford Store","Sales":[{"product":{"name":"Mountain"},"sales":2},{"product":{"name":"Racing"},"sales":52},{"product":{"name":"Touring"},"sales":97},{"product":{"name":"BMX"},"sales":67}]},{"latitude":51.540030944606428,"longitude":-0.0098841921357473161,"name":"Bow Store","Sales":[{"product":{"name":"Mountain"},"sales":64},{"product":{"name":"Racing"},"sales":20},{"product":{"name":"Touring"},"sales":46},{"product":{"name":"BMX"},"sales":1}]},{"latitude":51.587624488282586,"longitude":-0.097088171627934816,"name":"Haringey Store","Sales":[{"product":{"name":"Mountain"},"sales":21},{"product":{"name":"Racing"},"sales":47},{"product":{"name":"Touring"},"sales":97},{"product":{"name":"BMX"},"sales":72}]},{"latitude":51.552200849826406,"longitude":0.10718886694630392,"name":"Becontree Store","Sales":[{"product":{"name":"Mountain"},"sales":18},{"product":{"name":"Racing"},"sales":94},{"product":{"name":"Touring"},"sales":81},{"product":{"name":"BMX"},"sales":66}]},{"latitude":51.594023405898518,"longitude":0.081439660403335168,"name":"Barkingside Store","Sales":[{"product":{"name":"Mountain"},"sales":86},{"product":{"name":"Racing"},"sales":45},{"product":{"name":"Touring"},"sales":77},{"product":{"name":"BMX"},"sales":36}]},{"latitude":51.471220509575765,"longitude":0.12950484595021017,"name":"Belvedere Store","Sales":[{"product":{"name":"Mountain"},"sales":98},{"product":{"name":"Racing"},"sales":80},{"product":{"name":"Touring"},"sales":14},{"product":{"name":"BMX"},"sales":81}]},{"latitude":51.439558490226759,"longitude":0.083156274172866418,"name":"New Eltham Store","Sales":[{"product":{"name":"Mountain"},"sales":44},{"product":{"name":"Racing"},"sales":72},{"product":{"name":"Touring"},"sales":28},{"product":{"name":"BMX"},"sales":7}]},{"latitude":51.374239780714859,"longitude":-0.042156531002914832,"name":"Shirley Store","Sales":[{"product":{"name":"Mountain"},"sales":42},{"product":{"name":"Racing"},"sales":55},{"product":{"name":"Touring"},"sales":87},{"product":{"name":"BMX"},"sales":23}]},{"latitude":51.370596320291021,"longitude":-0.13760025658885233,"name":"Beddington Corner Store","Sales":[{"product":{"name":"Mountain"},"sales":29},{"product":{"name":"Racing"},"sales":25},{"product":{"name":"Touring"},"sales":67},{"product":{"name":"BMX"},"sales":73}]},{"latitude":51.386453973373413,"longitude":-0.24815018334666483,"name":"Worcester Park Store","Sales":[{"product":{"name":"Mountain"},"sales":77},{"product":{"name":"Racing"},"sales":84},{"product":{"name":"Touring"},"sales":30},{"product":{"name":"BMX"},"sales":18}]},{"latitude":51.424147404346449,"longitude":-0.32608444848338358,"name":"Teddington Store","Sales":[{"product":{"name":"Mountain"},"sales":50},{"product":{"name":"Racing"},"sales":46},{"product":{"name":"Touring"},"sales":24},{"product":{"name":"BMX"},"sales":80}]},{"latitude":51.437846404063521,"longitude":-0.40745194115916483,"name":"Feltham Store","Sales":[{"product":{"name":"Mountain"},"sales":98},{"product":{"name":"Racing"},"sales":42},{"product":{"name":"Touring"},"sales":62},{"product":{"name":"BMX"},"sales":48}]},{"latitude":51.3560195790161,"longitude":-0.36899979272166483,"name":"Esher Store","Sales":[{"product":{"name":"Mountain"},"sales":91},{"product":{"name":"Racing"},"sales":59},{"product":{"name":"Touring"},"sales":15},{"product":{"name":"BMX"},"sales":12}]},{"latitude":51.345083978268107,"longitude":-0.48847611108103983,"name":"West Byfleet Store","Sales":[{"product":{"name":"Mountain"},"sales":69},{"product":{"name":"Racing"},"sales":87},{"product":{"name":"Touring"},"sales":16},{"product":{"name":"BMX"},"sales":26}]},{"latitude":51.387096735331482,"longitude":-0.51216538110057108,"name":"Chertsey Store","Sales":[{"product":{"name":"Mountain"},"sales":28},{"product":{"name":"Racing"},"sales":50},{"product":{"name":"Touring"},"sales":41},{"product":{"name":"BMX"},"sales":18}]},{"latitude":51.469509610510968,"longitude":-0.458607031491196,"name":"West Bedfont Store","Sales":[{"product":{"name":"Mountain"},"sales":9},{"product":{"name":"Racing"},"sales":83},{"product":{"name":"Touring"},"sales":65},{"product":{"name":"BMX"},"sales":73}]},{"latitude":51.518245094642083,"longitude":-0.43766434350291478,"name":"Hayes Store","Sales":[{"product":{"name":"Mountain"},"sales":26},{"product":{"name":"Racing"},"sales":55},{"product":{"name":"Touring"},"sales":7},{"product":{"name":"BMX"},"sales":99}]},{"latitude":51.56927592861377,"longitude":-0.37140305199900858,"name":"Eastcote Store","Sales":[{"product":{"name":"Mountain"},"sales":43},{"product":{"name":"Racing"},"sales":56},{"product":{"name":"Touring"},"sales":50},{"product":{"name":"BMX"},"sales":95}]},{"latitude":51.607671417735226,"longitude":-0.25089676537791483,"name":"Edgware Store","Sales":[{"product":{"name":"Mountain"},"sales":74},{"product":{"name":"Racing"},"sales":11},{"product":{"name":"Touring"},"sales":70},{"product":{"name":"BMX"},"sales":21}]},{"latitude":51.62472566466932,"longitude":-0.054516150143539832,"name":"Ponders End Store","Sales":[{"product":{"name":"Mountain"},"sales":26},{"product":{"name":"Racing"},"sales":37},{"product":{"name":"Touring"},"sales":39},{"product":{"name":"BMX"},"sales":18}]},{"latitude":51.485119186165093,"longitude":0.28846328100880392,"name":"west turrock Store","Sales":[{"product":{"name":"Mountain"},"sales":32},{"product":{"name":"Racing"},"sales":15},{"product":{"name":"Touring"},"sales":36},{"product":{"name":"BMX"},"sales":16}]},{"latitude":51.445336307239835,"longitude":0.28331343970021017,"name":"Stonewood Store","Sales":[{"product":{"name":"Mountain"},"sales":35},{"product":{"name":"Racing"},"sales":90},{"product":{"name":"Touring"},"sales":60},{"product":{"name":"BMX"},"sales":86}]},{"latitude":51.420722012604344,"longitude":0.22082869848927264,"name":"Darenth Store","Sales":[{"product":{"name":"Mountain"},"sales":42},{"product":{"name":"Racing"},"sales":69},{"product":{"name":"Touring"},"sales":6},{"product":{"name":"BMX"},"sales":98}]},{"latitude":51.423719244419019,"longitude":0.36914412817677267,"name":"Gravesend Store","Sales":[{"product":{"name":"Mountain"},"sales":44},{"product":{"name":"Racing"},"sales":18},{"product":{"name":"Touring"},"sales":72},{"product":{"name":"BMX"},"sales":66}]},{"latitude":40.864660953479834,"longitude":14.281205157967925,"name":"Poggioreale Store","Sales":[{"product":{"name":"Mountain"},"sales":39},{"product":{"name":"Racing"},"sales":68},{"product":{"name":"Touring"},"sales":11},{"product":{"name":"BMX"},"sales":54}]},{"latitude":40.814011745419492,"longitude":14.348839740487458,"name":"Portici Store","Sales":[{"product":{"name":"Mountain"},"sales":27},{"product":{"name":"Racing"},"sales":29},{"product":{"name":"Touring"},"sales":74},{"product":{"name":"BMX"},"sales":86}]},{"latitude":40.8947723782558,"longitude":14.300774554940583,"name":"Casoria Store","Sales":[{"product":{"name":"Mountain"},"sales":6},{"product":{"name":"Racing"},"sales":38},{"product":{"name":"Touring"},"sales":41},{"product":{"name":"BMX"},"sales":62}]},{"latitude":40.842068396075014,"longitude":14.20121095630777,"name":"Soccavo Store","Sales":[{"product":{"name":"Mountain"},"sales":80},{"product":{"name":"Racing"},"sales":91},{"product":{"name":"Touring"},"sales":19},{"product":{"name":"BMX"},"sales":5}]},{"latitude":40.861285543693668,"longitude":14.16275880787027,"name":"Pianura Store","Sales":[{"product":{"name":"Mountain"},"sales":64},{"product":{"name":"Racing"},"sales":56},{"product":{"name":"Touring"},"sales":75},{"product":{"name":"BMX"},"sales":14}]},{"latitude":40.9266859076051,"longitude":14.247559528085114,"name":"Casandrino Store","Sales":[{"product":{"name":"Mountain"},"sales":42},{"product":{"name":"Racing"},"sales":29},{"product":{"name":"Touring"},"sales":67},{"product":{"name":"BMX"},"sales":68}]},{"latitude":40.940173173368763,"longitude":14.37046907398355,"name":"Acerra Store","Sales":[{"product":{"name":"Mountain"},"sales":22},{"product":{"name":"Racing"},"sales":38},{"product":{"name":"Touring"},"sales":34},{"product":{"name":"BMX"},"sales":44}]},{"latitude":40.864920593261118,"longitude":14.374932269784331,"name":"Madonna dell'Arco Store","Sales":[{"product":{"name":"Mountain"},"sales":9},{"product":{"name":"Racing"},"sales":99},{"product":{"name":"Touring"},"sales":97},{"product":{"name":"BMX"},"sales":75}]},{"latitude":40.926426510125843,"longitude":14.1864480778898,"name":"Giugliano in Campania Store","Sales":[{"product":{"name":"Mountain"},"sales":44},{"product":{"name":"Racing"},"sales":87},{"product":{"name":"Touring"},"sales":49},{"product":{"name":"BMX"},"sales":54}]},{"latitude":40.8379126042963,"longitude":14.378365497323395,"name":"Massa di Somma Store","Sales":[{"product":{"name":"Mountain"},"sales":51},{"product":{"name":"Racing"},"sales":11},{"product":{"name":"Touring"},"sales":88},{"product":{"name":"BMX"},"sales":7}]},{"latitude":40.879199213599819,"longitude":14.445313434335114,"name":"Somma Vesuviana Store","Sales":[{"product":{"name":"Mountain"},"sales":65},{"product":{"name":"Racing"},"sales":54},{"product":{"name":"Touring"},"sales":98},{"product":{"name":"BMX"},"sales":2}]},{"latitude":40.948730971560956,"longitude":14.46213624927652,"name":"Marigliano Store","Sales":[{"product":{"name":"Mountain"},"sales":67},{"product":{"name":"Racing"},"sales":22},{"product":{"name":"Touring"},"sales":47},{"product":{"name":"BMX"},"sales":22}]},{"latitude":40.975434542299595,"longitude":14.323090533944489,"name":"Caivano Store","Sales":[{"product":{"name":"Mountain"},"sales":76},{"product":{"name":"Racing"},"sales":99},{"product":{"name":"Touring"},"sales":51},{"product":{"name":"BMX"},"sales":66}]},{"latitude":40.958065486619581,"longitude":14.27811525318277,"name":"Frattaminore Store","Sales":[{"product":{"name":"Mountain"},"sales":64},{"product":{"name":"Racing"},"sales":14},{"product":{"name":"Touring"},"sales":23},{"product":{"name":"BMX"},"sales":57}]},{"latitude":40.972324002742717,"longitude":14.210137347909335,"name":"Aversa Store","Sales":[{"product":{"name":"Mountain"},"sales":62},{"product":{"name":"Racing"},"sales":97},{"product":{"name":"Touring"},"sales":82},{"product":{"name":"BMX"},"sales":73}]},{"latitude":40.915271455287076,"longitude":14.139069537850739,"name":"Qualiano Store","Sales":[{"product":{"name":"Mountain"},"sales":35},{"product":{"name":"Racing"},"sales":59},{"product":{"name":"Touring"},"sales":76},{"product":{"name":"BMX"},"sales":35}]},{"latitude":41.039427233959543,"longitude":14.382142047616364,"name":"Maddaloni Store","Sales":[{"product":{"name":"Mountain"},"sales":47},{"product":{"name":"Racing"},"sales":84},{"product":{"name":"Touring"},"sales":46},{"product":{"name":"BMX"},"sales":46}]},{"latitude":40.969731774414093,"longitude":14.427803973885895,"name":"Cancello Store","Sales":[{"product":{"name":"Mountain"},"sales":9},{"product":{"name":"Racing"},"sales":33},{"product":{"name":"Touring"},"sales":61},{"product":{"name":"BMX"},"sales":43}]},{"latitude":40.857909961882669,"longitude":14.518784503671052,"name":"San Gennaro Vesuviano Store","Sales":[{"product":{"name":"Mountain"},"sales":57},{"product":{"name":"Racing"},"sales":48},{"product":{"name":"Touring"},"sales":33},{"product":{"name":"BMX"},"sales":48}]},{"latitude":40.796860170990961,"longitude":14.600838641854645,"name":"San Valentino Torio Store","Sales":[{"product":{"name":"Mountain"},"sales":40},{"product":{"name":"Racing"},"sales":32},{"product":{"name":"Touring"},"sales":23},{"product":{"name":"BMX"},"sales":94}]},{"latitude":40.772164516994316,"longitude":14.559296588631989,"name":"San Marzano sul Sarno Store","Sales":[{"product":{"name":"Mountain"},"sales":47},{"product":{"name":"Racing"},"sales":2},{"product":{"name":"Touring"},"sales":53},{"product":{"name":"BMX"},"sales":87}]},{"latitude":40.755782335243296,"longitude":14.61319826099527,"name":"Pagani Store","Sales":[{"product":{"name":"Mountain"},"sales":17},{"product":{"name":"Racing"},"sales":14},{"product":{"name":"Touring"},"sales":32},{"product":{"name":"BMX"},"sales":67}]},{"latitude":40.757342717000775,"longitude":14.508484821053864,"name":"Pompei Store","Sales":[{"product":{"name":"Mountain"},"sales":35},{"product":{"name":"Racing"},"sales":42},{"product":{"name":"Touring"},"sales":32},{"product":{"name":"BMX"},"sales":67}]},{"latitude":-33.928593417095385,"longitude":18.453054321341892,"name":"Soutrivier Store","Sales":[{"product":{"name":"Mountain"},"sales":88},{"product":{"name":"Racing"},"sales":28},{"product":{"name":"Touring"},"sales":78},{"product":{"name":"BMX"},"sales":57}]},{"latitude":-33.932011746577466,"longitude":18.467473877005954,"name":"Soutrivier Store","Sales":[{"product":{"name":"Mountain"},"sales":56},{"product":{"name":"Racing"},"sales":34},{"product":{"name":"Touring"},"sales":82},{"product":{"name":"BMX"},"sales":86}]},{"latitude":-33.930516244311043,"longitude":18.447732818656345,"name":"Mowbray Store","Sales":[{"product":{"name":"Mountain"},"sales":24},{"product":{"name":"Racing"},"sales":40},{"product":{"name":"Touring"},"sales":87},{"product":{"name":"BMX"},"sales":15}]},{"latitude":-33.9243915324811,"longitude":18.41889370732822,"name":"Schotschekloof Store","Sales":[{"product":{"name":"Mountain"},"sales":33},{"product":{"name":"Racing"},"sales":26},{"product":{"name":"Touring"},"sales":8},{"product":{"name":"BMX"},"sales":78}]},{"latitude":-33.936640515719738,"longitude":18.424215210013763,"name":"Oranjezicht Store","Sales":[{"product":{"name":"Mountain"},"sales":7},{"product":{"name":"Racing"},"sales":88},{"product":{"name":"Touring"},"sales":3},{"product":{"name":"BMX"},"sales":40}]},{"latitude":-33.931085962556715,"longitude":18.406190765433688,"name":"Gardens Store","Sales":[{"product":{"name":"Mountain"},"sales":85},{"product":{"name":"Racing"},"sales":51},{"product":{"name":"Touring"},"sales":78},{"product":{"name":"BMX"},"sales":75}]},{"latitude":-33.9122832483526,"longitude":18.42129696660556,"name":"Schotschekloof Store","Sales":[{"product":{"name":"Mountain"},"sales":48},{"product":{"name":"Racing"},"sales":10},{"product":{"name":"Touring"},"sales":10},{"product":{"name":"BMX"},"sales":90}]},{"latitude":-33.94682292212611,"longitude":18.477687728934665,"name":"Rosebank Store","Sales":[{"product":{"name":"Mountain"},"sales":64},{"product":{"name":"Racing"},"sales":57},{"product":{"name":"Touring"},"sales":44},{"product":{"name":"BMX"},"sales":27}]},{"latitude":-33.954583518779508,"longitude":18.490905654960052,"name":"Nuweland Store","Sales":[{"product":{"name":"Mountain"},"sales":13},{"product":{"name":"Racing"},"sales":87},{"product":{"name":"Touring"},"sales":7},{"product":{"name":"BMX"},"sales":2}]},{"latitude":-33.956363372365281,"longitude":18.473911178641693,"name":"Rosebank Store","Sales":[{"product":{"name":"Mountain"},"sales":1},{"product":{"name":"Racing"},"sales":2},{"product":{"name":"Touring"},"sales":78},{"product":{"name":"BMX"},"sales":93}]},{"latitude":-33.966472234378386,"longitude":18.47631443791904,"name":"Nuweland Store","Sales":[{"product":{"name":"Mountain"},"sales":2},{"product":{"name":"Racing"},"sales":5},{"product":{"name":"Touring"},"sales":52},{"product":{"name":"BMX"},"sales":20}]},{"latitude":-33.965333267725065,"longitude":18.496742141776458,"name":"Athlone Store","Sales":[{"product":{"name":"Mountain"},"sales":30},{"product":{"name":"Racing"},"sales":65},{"product":{"name":"Touring"},"sales":65},{"product":{"name":"BMX"},"sales":23}]},{"latitude":-33.920118216913686,"longitude":18.492278945975677,"name":"Kensington Store","Sales":[{"product":{"name":"Mountain"},"sales":52},{"product":{"name":"Racing"},"sales":23},{"product":{"name":"Touring"},"sales":97},{"product":{"name":"BMX"},"sales":52}]},{"latitude":-33.908507960887576,"longitude":18.40764988713779,"name":"Tamboerskloof Store","Sales":[{"product":{"name":"Mountain"},"sales":50},{"product":{"name":"Racing"},"sales":83},{"product":{"name":"Touring"},"sales":22},{"product":{"name":"BMX"},"sales":7}]},{"latitude":-33.91961964946853,"longitude":18.387479675345794,"name":"Bantry Bay Store","Sales":[{"product":{"name":"Mountain"},"sales":76},{"product":{"name":"Racing"},"sales":62},{"product":{"name":"Touring"},"sales":69},{"product":{"name":"BMX"},"sales":47}]},{"latitude":-33.953230805154504,"longitude":18.380613220267673,"name":"Camps Bay Store","Sales":[{"product":{"name":"Mountain"},"sales":4},{"product":{"name":"Racing"},"sales":76},{"product":{"name":"Touring"},"sales":91},{"product":{"name":"BMX"},"sales":9}]},{"latitude":-33.984480117041109,"longitude":18.448161972098724,"name":"Wynberg Hill Store","Sales":[{"product":{"name":"Mountain"},"sales":75},{"product":{"name":"Racing"},"sales":88},{"product":{"name":"Touring"},"sales":43},{"product":{"name":"BMX"},"sales":93}]},{"latitude":-33.989888854578822,"longitude":18.472967041068454,"name":"Claremont Store","Sales":[{"product":{"name":"Mountain"},"sales":59},{"product":{"name":"Racing"},"sales":62},{"product":{"name":"Touring"},"sales":16},{"product":{"name":"BMX"},"sales":20}]},{"latitude":-33.993162396908978,"longitude":18.507385147147556,"name":"Welton Store","Sales":[{"product":{"name":"Mountain"},"sales":76},{"product":{"name":"Racing"},"sales":64},{"product":{"name":"Touring"},"sales":59},{"product":{"name":"BMX"},"sales":17}]},{"latitude":-33.975583418504911,"longitude":18.519573104911228,"name":"Belthorn Store","Sales":[{"product":{"name":"Mountain"},"sales":56},{"product":{"name":"Racing"},"sales":96},{"product":{"name":"Touring"},"sales":83},{"product":{"name":"BMX"},"sales":72}]},{"latitude":-33.97657989504193,"longitude":18.538198364310642,"name":"Hanover Park Store","Sales":[{"product":{"name":"Mountain"},"sales":76},{"product":{"name":"Racing"},"sales":40},{"product":{"name":"Touring"},"sales":75},{"product":{"name":"BMX"},"sales":41}]},{"latitude":-33.993802857831106,"longitude":18.534078491263767,"name":"Hanover Park Store","Sales":[{"product":{"name":"Mountain"},"sales":52},{"product":{"name":"Racing"},"sales":61},{"product":{"name":"Touring"},"sales":1},{"product":{"name":"BMX"},"sales":4}]},{"latitude":12.930898983221036,"longitude":77.60821786093517,"name":"Tavarekere Store","Sales":[{"product":{"name":"Mountain"},"sales":94},{"product":{"name":"Racing"},"sales":6},{"product":{"name":"Touring"},"sales":46},{"product":{"name":"BMX"},"sales":73}]},{"latitude":12.985435474086604,"longitude":77.555174495456654,"name":"RajajiNagar Store","Sales":[{"product":{"name":"Mountain"},"sales":76},{"product":{"name":"Racing"},"sales":65},{"product":{"name":"Touring"},"sales":28},{"product":{"name":"BMX"},"sales":31}]},{"latitude":12.988111803952638,"longitude":77.627958919284779,"name":"Cox Town Store","Sales":[{"product":{"name":"Mountain"},"sales":0},{"product":{"name":"Racing"},"sales":95},{"product":{"name":"Touring"},"sales":10},{"product":{"name":"BMX"},"sales":4}]},{"latitude":12.937591219752486,"longitude":77.548308040378515,"name":"Sita Circle Store","Sales":[{"product":{"name":"Mountain"},"sales":84},{"product":{"name":"Racing"},"sales":5},{"product":{"name":"Touring"},"sales":58},{"product":{"name":"BMX"},"sales":53}]},{"latitude":12.92537775296897,"longitude":77.570624019382421,"name":"Thygaraj Nagar Store","Sales":[{"product":{"name":"Mountain"},"sales":46},{"product":{"name":"Racing"},"sales":64},{"product":{"name":"Touring"},"sales":90},{"product":{"name":"BMX"},"sales":68}]},{"latitude":12.900949027365,"longitude":77.602381374118764,"name":"J.P. Nagar, 3rd Phase Store","Sales":[{"product":{"name":"Mountain"},"sales":20},{"product":{"name":"Racing"},"sales":26},{"product":{"name":"Touring"},"sales":84},{"product":{"name":"BMX"},"sales":30}]},{"latitude":12.973057073547858,"longitude":77.649759914157826,"name":"Thippasandra Store","Sales":[{"product":{"name":"Mountain"},"sales":40},{"product":{"name":"Racing"},"sales":61},{"product":{"name":"Touring"},"sales":59},{"product":{"name":"BMX"},"sales":80}]},{"latitude":12.909315298125533,"longitude":77.646841670749623,"name":"Outer Ring Road Store","Sales":[{"product":{"name":"Mountain"},"sales":79},{"product":{"name":"Racing"},"sales":42},{"product":{"name":"Touring"},"sales":41},{"product":{"name":"BMX"},"sales":71}]},{"latitude":12.975566258596166,"longitude":77.524103786228139,"name":"Moodallpalya Store","Sales":[{"product":{"name":"Mountain"},"sales":30},{"product":{"name":"Racing"},"sales":42},{"product":{"name":"Touring"},"sales":3},{"product":{"name":"BMX"},"sales":80}]},{"latitude":13.004169177441517,"longitude":77.6070162312965,"name":"BensonTown Store","Sales":[{"product":{"name":"Mountain"},"sales":34},{"product":{"name":"Racing"},"sales":17},{"product":{"name":"Touring"},"sales":26},{"product":{"name":"BMX"},"sales":50}]},{"latitude":13.033270517278865,"longitude":77.567534114597279,"name":"Mathikere Store","Sales":[{"product":{"name":"Mountain"},"sales":2},{"product":{"name":"Racing"},"sales":32},{"product":{"name":"Touring"},"sales":48},{"product":{"name":"BMX"},"sales":98}]},{"latitude":13.01738227829161,"longitude":77.537493373630468,"name":"RajKumar Samidhi Store","Sales":[{"product":{"name":"Mountain"},"sales":41},{"product":{"name":"Racing"},"sales":77},{"product":{"name":"Touring"},"sales":89},{"product":{"name":"BMX"},"sales":10}]},{"latitude":13.033437756477955,"longitude":77.61886086630625,"name":"Nagawara Store","Sales":[{"product":{"name":"Mountain"},"sales":93},{"product":{"name":"Racing"},"sales":2},{"product":{"name":"Touring"},"sales":59},{"product":{"name":"BMX"},"sales":8}]},{"latitude":13.009354149048859,"longitude":77.511572505710546,"name":"Peenya Store","Sales":[{"product":{"name":"Mountain"},"sales":80},{"product":{"name":"Racing"},"sales":82},{"product":{"name":"Touring"},"sales":55},{"product":{"name":"BMX"},"sales":77}]},{"latitude":12.90463022098373,"longitude":77.560495998142187,"name":"Kumaraswamy Layout Store","Sales":[{"product":{"name":"Mountain"},"sales":73},{"product":{"name":"Racing"},"sales":29},{"product":{"name":"Touring"},"sales":32},{"product":{"name":"BMX"},"sales":24}]},{"latitude":12.87902807143225,"longitude":77.576288844821889,"name":"Konankunte Store","Sales":[{"product":{"name":"Mountain"},"sales":57},{"product":{"name":"Racing"},"sales":95},{"product":{"name":"Touring"},"sales":89},{"product":{"name":"BMX"},"sales":33}]},{"latitude":12.883713627842804,"longitude":77.62109246420664,"name":"Hongasandra Store","Sales":[{"product":{"name":"Mountain"},"sales":99},{"product":{"name":"Racing"},"sales":53},{"product":{"name":"Touring"},"sales":71},{"product":{"name":"BMX"},"sales":5}]},{"latitude":12.96151449633839,"longitude":77.679114009616811,"name":"Konen Agrah¨¡r Store","Sales":[{"product":{"name":"Mountain"},"sales":85},{"product":{"name":"Racing"},"sales":42},{"product":{"name":"Touring"},"sales":85},{"product":{"name":"BMX"},"sales":93}]},{"latitude":12.99881683502157,"longitude":77.67379250693125,"name":"K R Puram Store","Sales":[{"product":{"name":"Mountain"},"sales":83},{"product":{"name":"Racing"},"sales":69},{"product":{"name":"Touring"},"sales":35},{"product":{"name":"BMX"},"sales":50}]},{"latitude":13.022566973562253,"longitude":77.682547237155859,"name":"RamamurthyNagar Store","Sales":[{"product":{"name":"Mountain"},"sales":81},{"product":{"name":"Racing"},"sales":7},{"product":{"name":"Touring"},"sales":3},{"product":{"name":"BMX"},"sales":25}]},{"latitude":12.978577247231867,"longitude":77.727865840671484,"name":"White Field Store","Sales":[{"product":{"name":"Mountain"},"sales":14},{"product":{"name":"Racing"},"sales":14},{"product":{"name":"Touring"},"sales":88},{"product":{"name":"BMX"},"sales":42}]},{"latitude":22.333911683559734,"longitude":114.18898102751116,"name":"Nga Tsin Wai Store","Sales":[{"product":{"name":"Mountain"},"sales":49},{"product":{"name":"Racing"},"sales":56},{"product":{"name":"Touring"},"sales":76},{"product":{"name":"BMX"},"sales":74}]},{"latitude":22.336769769749786,"longitude":114.15361878385883,"name":"Cheung Sha Wan Store","Sales":[{"product":{"name":"Mountain"},"sales":52},{"product":{"name":"Racing"},"sales":50},{"product":{"name":"Touring"},"sales":33},{"product":{"name":"BMX"},"sales":83}]},{"latitude":22.369474805578502,"longitude":114.13439270964007,"name":"Yau Ma Hom Store","Sales":[{"product":{"name":"Mountain"},"sales":89},{"product":{"name":"Racing"},"sales":42},{"product":{"name":"Touring"},"sales":9},{"product":{"name":"BMX"},"sales":3}]},{"latitude":22.322161158364136,"longitude":114.2288064669643,"name":"Sai Tso Wan Store","Sales":[{"product":{"name":"Mountain"},"sales":85},{"product":{"name":"Racing"},"sales":53},{"product":{"name":"Touring"},"sales":18},{"product":{"name":"BMX"},"sales":76}]},{"latitude":22.453900800184428,"longitude":114.17181488981586,"name":"Tai Yuen Estate Store","Sales":[{"product":{"name":"Mountain"},"sales":32},{"product":{"name":"Racing"},"sales":22},{"product":{"name":"Touring"},"sales":98},{"product":{"name":"BMX"},"sales":40}]},{"latitude":22.422485090176167,"longitude":114.22914978971821,"name":"Lok Wo Sha Store","Sales":[{"product":{"name":"Mountain"},"sales":27},{"product":{"name":"Racing"},"sales":0},{"product":{"name":"Touring"},"sales":33},{"product":{"name":"BMX"},"sales":15}]},{"latitude":22.439939140601645,"longitude":114.08598420133929,"name":"Shui Tsan Tin Store","Sales":[{"product":{"name":"Mountain"},"sales":53},{"product":{"name":"Racing"},"sales":35},{"product":{"name":"Touring"},"sales":39},{"product":{"name":"BMX"},"sales":29}]},{"latitude":22.43708317346708,"longitude":114.01834961881977,"name":"Ma Tin Tsuen Store","Sales":[{"product":{"name":"Mountain"},"sales":99},{"product":{"name":"Racing"},"sales":68},{"product":{"name":"Touring"},"sales":44},{"product":{"name":"BMX"},"sales":72}]},{"latitude":22.396776039146044,"longitude":113.96788117399555,"name":"Tuen Mun San Hui Store","Sales":[{"product":{"name":"Mountain"},"sales":51},{"product":{"name":"Racing"},"sales":48},{"product":{"name":"Touring"},"sales":22},{"product":{"name":"BMX"},"sales":28}]},{"latitude":22.276102269232748,"longitude":114.18074128141743,"name":"So Kon Po Store","Sales":[{"product":{"name":"Mountain"},"sales":42},{"product":{"name":"Racing"},"sales":2},{"product":{"name":"Touring"},"sales":42},{"product":{"name":"BMX"},"sales":68}]},{"latitude":22.388840186405933,"longitude":114.20031067839008,"name":"Chap Wai Kon Store","Sales":[{"product":{"name":"Mountain"},"sales":17},{"product":{"name":"Racing"},"sales":67},{"product":{"name":"Touring"},"sales":10},{"product":{"name":"BMX"},"sales":57}]},{"latitude":22.50561014650312,"longitude":114.12100312223772,"name":"Yin Kong Store","Sales":[{"product":{"name":"Mountain"},"sales":30},{"product":{"name":"Racing"},"sales":28},{"product":{"name":"Touring"},"sales":54},{"product":{"name":"BMX"},"sales":90}]},{"latitude":22.554446619013849,"longitude":114.09800049772602,"name":"Liu Pok Store","Sales":[{"product":{"name":"Mountain"},"sales":96},{"product":{"name":"Racing"},"sales":53},{"product":{"name":"Touring"},"sales":93},{"product":{"name":"BMX"},"sales":57}]},{"latitude":22.550324727108872,"longitude":114.032082528976,"name":"Shenzhen Store","Sales":[{"product":{"name":"Mountain"},"sales":89},{"product":{"name":"Racing"},"sales":79},{"product":{"name":"Touring"},"sales":62},{"product":{"name":"BMX"},"sales":40}]},{"latitude":22.563641164830742,"longitude":113.95174500456196,"name":"Shahezhan Store","Sales":[{"product":{"name":"Mountain"},"sales":3},{"product":{"name":"Racing"},"sales":21},{"product":{"name":"Touring"},"sales":73},{"product":{"name":"BMX"},"sales":36}]},{"latitude":22.526542177616346,"longitude":113.91706940641741,"name":"Nantou Store","Sales":[{"product":{"name":"Mountain"},"sales":33},{"product":{"name":"Racing"},"sales":31},{"product":{"name":"Touring"},"sales":1},{"product":{"name":"BMX"},"sales":21}]},{"latitude":37.570846748571149,"longitude":127.07371139273724,"name":"Ponghwang-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":10},{"product":{"name":"Racing"},"sales":27},{"product":{"name":"Touring"},"sales":97},{"product":{"name":"BMX"},"sales":50}]},{"latitude":37.612469105017247,"longitude":127.0558586095341,"name":"Y?n-ch'on Store","Sales":[{"product":{"name":"Mountain"},"sales":54},{"product":{"name":"Racing"},"sales":66},{"product":{"name":"Touring"},"sales":45},{"product":{"name":"BMX"},"sales":85}]},{"latitude":37.505782249340157,"longitude":127.03216933951457,"name":"Y?ksamil-tong Store","Sales":[{"product":{"name":"Mountain"},"sales":52},{"product":{"name":"Racing"},"sales":85},{"product":{"name":"Touring"},"sales":79},{"product":{"name":"BMX"},"sales":23}]},{"latitude":37.499790195370558,"longitude":126.93844222769818,"name":"Sangdosa-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":40},{"product":{"name":"Racing"},"sales":0},{"product":{"name":"Touring"},"sales":51},{"product":{"name":"BMX"},"sales":13}]},{"latitude":37.515858710103949,"longitude":126.89346694693644,"name":"Y?ngd?ngp'o-gu Store","Sales":[{"product":{"name":"Mountain"},"sales":85},{"product":{"name":"Racing"},"sales":1},{"product":{"name":"Touring"},"sales":82},{"product":{"name":"BMX"},"sales":58}]},{"latitude":37.605125674855941,"longitude":126.91406631217082,"name":"Karhy?n-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":47},{"product":{"name":"Racing"},"sales":60},{"product":{"name":"Touring"},"sales":14},{"product":{"name":"BMX"},"sales":73}]},{"latitude":37.537641001553069,"longitude":126.82102584586222,"name":"Pak-osoe-ri Store","Sales":[{"product":{"name":"Mountain"},"sales":59},{"product":{"name":"Racing"},"sales":41},{"product":{"name":"Touring"},"sales":42},{"product":{"name":"BMX"},"sales":59}]},{"latitude":37.53355730640056,"longitude":127.1282997106083,"name":"Ch'?nho-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":8},{"product":{"name":"Racing"},"sales":91},{"product":{"name":"Touring"},"sales":88},{"product":{"name":"BMX"},"sales":85}]},{"latitude":37.441478766854736,"longitude":127.14889907584268,"name":"Sinh?ngsam-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":28},{"product":{"name":"Racing"},"sales":81},{"product":{"name":"Touring"},"sales":71},{"product":{"name":"BMX"},"sales":95}]},{"latitude":37.50932278245746,"longitude":126.77261733756144,"name":"Sinhung-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":9},{"product":{"name":"Racing"},"sales":58},{"product":{"name":"Touring"},"sales":87},{"product":{"name":"BMX"},"sales":91}]},{"latitude":37.45292665347958,"longitude":126.89621352896769,"name":"Sih?ngil-tong Store","Sales":[{"product":{"name":"Mountain"},"sales":31},{"product":{"name":"Racing"},"sales":52},{"product":{"name":"Touring"},"sales":94},{"product":{"name":"BMX"},"sales":42}]},{"latitude":37.445022347526795,"longitude":126.79012679801068,"name":"T?ks?k-kol Store","Sales":[{"product":{"name":"Mountain"},"sales":83},{"product":{"name":"Racing"},"sales":78},{"product":{"name":"Touring"},"sales":64},{"product":{"name":"BMX"},"sales":39}]},{"latitude":37.466007807315634,"longitude":126.71390914664346,"name":"Inch'?n Store","Sales":[{"product":{"name":"Mountain"},"sales":17},{"product":{"name":"Racing"},"sales":75},{"product":{"name":"Touring"},"sales":32},{"product":{"name":"BMX"},"sales":37}]},{"latitude":37.518581844360909,"longitude":126.69399642691691,"name":"Ch'?ngch'?n-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":21},{"product":{"name":"Racing"},"sales":92},{"product":{"name":"Touring"},"sales":47},{"product":{"name":"BMX"},"sales":24}]},{"latitude":37.454289380436762,"longitude":126.66206741080362,"name":"Songnim-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":31},{"product":{"name":"Racing"},"sales":24},{"product":{"name":"Touring"},"sales":59},{"product":{"name":"BMX"},"sales":28}]},{"latitude":37.39103270359896,"longitude":126.95663833365518,"name":"P?mgye-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":22},{"product":{"name":"Racing"},"sales":59},{"product":{"name":"Touring"},"sales":46},{"product":{"name":"BMX"},"sales":30}]},{"latitude":37.667657598272868,"longitude":127.0558586095341,"name":"Ui-dong Store","Sales":[{"product":{"name":"Mountain"},"sales":98},{"product":{"name":"Racing"},"sales":69},{"product":{"name":"Touring"},"sales":5},{"product":{"name":"BMX"},"sales":59}]},{"latitude":37.651349996419249,"longitude":126.83098220572549,"name":"Koyang Store","Sales":[{"product":{"name":"Mountain"},"sales":60},{"product":{"name":"Racing"},"sales":28},{"product":{"name":"Touring"},"sales":37},{"product":{"name":"BMX"},"sales":74}]},{"latitude":37.641835574519845,"longitude":127.11902999625286,"name":"T'oegyew?n Store","Sales":[{"product":{"name":"Mountain"},"sales":99},{"product":{"name":"Racing"},"sales":27},{"product":{"name":"Touring"},"sales":87},{"product":{"name":"BMX"},"sales":46}]},{"latitude":-33.878158159716854,"longitude":151.22212438936097,"name":"Darlinghurst Store","Sales":[{"product":{"name":"Mountain"},"sales":51},{"product":{"name":"Racing"},"sales":24},{"product":{"name":"Touring"},"sales":27},{"product":{"name":"BMX"},"sales":66}]},{"latitude":-33.8797258382555,"longitude":151.20367079133851,"name":"Haymarket Store","Sales":[{"product":{"name":"Mountain"},"sales":19},{"product":{"name":"Racing"},"sales":85},{"product":{"name":"Touring"},"sales":40},{"product":{"name":"BMX"},"sales":55}]},{"latitude":-33.877374309647472,"longitude":151.17199926729066,"name":"Lilyfield Store","Sales":[{"product":{"name":"Mountain"},"sales":78},{"product":{"name":"Racing"},"sales":93},{"product":{"name":"Touring"},"sales":57},{"product":{"name":"BMX"},"sales":88}]},{"latitude":-33.858559748189727,"longitude":151.18006735200746,"name":"Balmain Store","Sales":[{"product":{"name":"Mountain"},"sales":76},{"product":{"name":"Racing"},"sales":21},{"product":{"name":"Touring"},"sales":7},{"product":{"name":"BMX"},"sales":44}]},{"latitude":-33.892408723541159,"longitude":151.17363005037171,"name":"Camperdown Store","Sales":[{"product":{"name":"Mountain"},"sales":68},{"product":{"name":"Racing"},"sales":48},{"product":{"name":"Touring"},"sales":77},{"product":{"name":"BMX"},"sales":27}]},{"latitude":-33.889693938661878,"longitude":151.25834918381614,"name":"Bondi Store","Sales":[{"product":{"name":"Mountain"},"sales":25},{"product":{"name":"Racing"},"sales":84},{"product":{"name":"Touring"},"sales":44},{"product":{"name":"BMX"},"sales":17}]},{"latitude":-33.913915204468083,"longitude":151.1903712785427,"name":"Saint Peters Store","Sales":[{"product":{"name":"Mountain"},"sales":13},{"product":{"name":"Racing"},"sales":99},{"product":{"name":"Touring"},"sales":16},{"product":{"name":"BMX"},"sales":8}]},{"latitude":-33.876725610369235,"longitude":151.14247775437278,"name":"Leichhardt Store","Sales":[{"product":{"name":"Mountain"},"sales":66},{"product":{"name":"Racing"},"sales":52},{"product":{"name":"Touring"},"sales":43},{"product":{"name":"BMX"},"sales":8}]},{"latitude":-33.905367308152364,"longitude":151.13011813523215,"name":"Croydon Store","Sales":[{"product":{"name":"Mountain"},"sales":84},{"product":{"name":"Racing"},"sales":35},{"product":{"name":"Touring"},"sales":52},{"product":{"name":"BMX"},"sales":67}]},{"latitude":-33.827399470214928,"longitude":151.23637652756614,"name":"Mosman Store","Sales":[{"product":{"name":"Mountain"},"sales":83},{"product":{"name":"Racing"},"sales":8},{"product":{"name":"Touring"},"sales":94},{"product":{"name":"BMX"},"sales":64}]},{"latitude":-33.823691731184461,"longitude":151.20118594529075,"name":"Crows Nest Store","Sales":[{"product":{"name":"Mountain"},"sales":47},{"product":{"name":"Racing"},"sales":64},{"product":{"name":"Touring"},"sales":84},{"product":{"name":"BMX"},"sales":11}]},{"latitude":-33.874445260986796,"longitude":151.11226535202903,"name":"Ashfield Store","Sales":[{"product":{"name":"Mountain"},"sales":45},{"product":{"name":"Racing"},"sales":92},{"product":{"name":"Touring"},"sales":34},{"product":{"name":"BMX"},"sales":68}]},{"latitude":-33.947813413986239,"longitude":151.22642016770286,"name":"Maroubra Store","Sales":[{"product":{"name":"Mountain"},"sales":12},{"product":{"name":"Racing"},"sales":16},{"product":{"name":"Touring"},"sales":73},{"product":{"name":"BMX"},"sales":34}]},{"latitude":-33.957068982429789,"longitude":151.13767123581809,"name":"Rockdale Store","Sales":[{"product":{"name":"Mountain"},"sales":21},{"product":{"name":"Racing"},"sales":48},{"product":{"name":"Touring"},"sales":85},{"product":{"name":"BMX"},"sales":38}]},{"latitude":-33.945392560787312,"longitude":151.09372592331809,"name":"Earlwood Store","Sales":[{"product":{"name":"Mountain"},"sales":97},{"product":{"name":"Racing"},"sales":69},{"product":{"name":"Touring"},"sales":12},{"product":{"name":"BMX"},"sales":0}]},{"latitude":-33.920040669476926,"longitude":151.07037997605247,"name":"Lakemba Store","Sales":[{"product":{"name":"Mountain"},"sales":1},{"product":{"name":"Racing"},"sales":98},{"product":{"name":"Touring"},"sales":43},{"product":{"name":"BMX"},"sales":30}]},{"latitude":-33.891688891129519,"longitude":151.05235553147239,"name":"Chullora Store","Sales":[{"product":{"name":"Mountain"},"sales":16},{"product":{"name":"Racing"},"sales":64},{"product":{"name":"Touring"},"sales":11},{"product":{"name":"BMX"},"sales":5}]},{"latitude":-33.869314252107472,"longitude":151.05990863205832,"name":"Flemington Store","Sales":[{"product":{"name":"Mountain"},"sales":78},{"product":{"name":"Racing"},"sales":57},{"product":{"name":"Touring"},"sales":68},{"product":{"name":"BMX"},"sales":28}]},{"latitude":-33.849214831158022,"longitude":151.07226825119895,"name":"Flemington Store","Sales":[{"product":{"name":"Mountain"},"sales":6},{"product":{"name":"Racing"},"sales":7},{"product":{"name":"Touring"},"sales":64},{"product":{"name":"BMX"},"sales":12}]},{"latitude":-33.806149094240837,"longitude":151.11123538376731,"name":"Ryde Store","Sales":[{"product":{"name":"Mountain"},"sales":78},{"product":{"name":"Racing"},"sales":43},{"product":{"name":"Touring"},"sales":1},{"product":{"name":"BMX"},"sales":71}]},{"latitude":-30.010657238098982,"longitude":-51.126997378287591,"name":"Passo do Feij¨® Store","Sales":[{"product":{"name":"Mountain"},"sales":83},{"product":{"name":"Racing"},"sales":45},{"product":{"name":"Touring"},"sales":61},{"product":{"name":"BMX"},"sales":37}]},{"latitude":-29.994602047410229,"longitude":-51.175062563834459,"name":"S?o Jo?o Store","Sales":[{"product":{"name":"Mountain"},"sales":23},{"product":{"name":"Racing"},"sales":21},{"product":{"name":"Touring"},"sales":27},{"product":{"name":"BMX"},"sales":32}]},{"latitude":-30.073960701831663,"longitude":-51.222097781119615,"name":"Menino Deus Store","Sales":[{"product":{"name":"Mountain"},"sales":49},{"product":{"name":"Racing"},"sales":72},{"product":{"name":"Touring"},"sales":89},{"product":{"name":"BMX"},"sales":73}]},{"latitude":-30.154740076013287,"longitude":-51.143820193229,"name":"Bel¨¦m Velho Store","Sales":[{"product":{"name":"Mountain"},"sales":47},{"product":{"name":"Racing"},"sales":0},{"product":{"name":"Touring"},"sales":40},{"product":{"name":"BMX"},"sales":29}]},{"latitude":-30.080199697267123,"longitude":-51.036360171256312,"name":"Viam?o Store","Sales":[{"product":{"name":"Mountain"},"sales":0},{"product":{"name":"Racing"},"sales":16},{"product":{"name":"Touring"},"sales":93},{"product":{"name":"BMX"},"sales":8}]},{"latitude":-30.055538515279963,"longitude":-51.09403839391257,"name":"Passo do Feij¨® Store","Sales":[{"product":{"name":"Mountain"},"sales":12},{"product":{"name":"Racing"},"sales":43},{"product":{"name":"Touring"},"sales":12},{"product":{"name":"BMX"},"sales":34}]},{"latitude":-29.992223279725355,"longitude":-51.058676150260219,"name":"Passo do Feij¨® Store","Sales":[{"product":{"name":"Mountain"},"sales":16},{"product":{"name":"Racing"},"sales":18},{"product":{"name":"Touring"},"sales":35},{"product":{"name":"BMX"},"sales":4}]},{"latitude":-29.928272555536985,"longitude":-51.081335452018031,"name":"Cachoeirinha Store","Sales":[{"product":{"name":"Mountain"},"sales":20},{"product":{"name":"Racing"},"sales":47},{"product":{"name":"Touring"},"sales":67},{"product":{"name":"BMX"},"sales":34}]},{"latitude":-29.905061660401394,"longitude":-51.191542056021937,"name":"Canoas Store","Sales":[{"product":{"name":"Mountain"},"sales":7},{"product":{"name":"Racing"},"sales":63},{"product":{"name":"Touring"},"sales":39},{"product":{"name":"BMX"},"sales":25}]},{"latitude":-29.940470984450307,"longitude":-51.174375918326618,"name":"Niter¨®i Store","Sales":[{"product":{"name":"Mountain"},"sales":11},{"product":{"name":"Racing"},"sales":47},{"product":{"name":"Touring"},"sales":79},{"product":{"name":"BMX"},"sales":15}]},{"latitude":-29.995791409875821,"longitude":-51.310675051627406,"name":"Morretes Store","Sales":[{"product":{"name":"Mountain"},"sales":67},{"product":{"name":"Racing"},"sales":38},{"product":{"name":"Touring"},"sales":54},{"product":{"name":"BMX"},"sales":64}]},{"latitude":-30.137223690495972,"longitude":-51.324751284537562,"name":"Vila Elza Store","Sales":[{"product":{"name":"Mountain"},"sales":28},{"product":{"name":"Racing"},"sales":15},{"product":{"name":"Touring"},"sales":20},{"product":{"name":"BMX"},"sales":16}]},{"latitude":-30.130394426619709,"longitude":-51.224157717643038,"name":"Ipanema Store","Sales":[{"product":{"name":"Mountain"},"sales":29},{"product":{"name":"Racing"},"sales":59},{"product":{"name":"Touring"},"sales":35},{"product":{"name":"BMX"},"sales":46}]},{"latitude":-29.834800891523496,"longitude":-51.1506866483071,"name":"Sapucaia Store","Sales":[{"product":{"name":"Mountain"},"sales":31},{"product":{"name":"Racing"},"sales":67},{"product":{"name":"Touring"},"sales":25},{"product":{"name":"BMX"},"sales":68}]},{"latitude":-29.775517152001616,"longitude":-51.141416933951625,"name":"S?o Leopoldo Store","Sales":[{"product":{"name":"Mountain"},"sales":2},{"product":{"name":"Racing"},"sales":48},{"product":{"name":"Touring"},"sales":53},{"product":{"name":"BMX"},"sales":67}]},{"latitude":-29.87470078986464,"longitude":-51.386892702994594,"name":"Benfica Store","Sales":[{"product":{"name":"Mountain"},"sales":98},{"product":{"name":"Racing"},"sales":13},{"product":{"name":"Touring"},"sales":71},{"product":{"name":"BMX"},"sales":99}]},{"latitude":-34.907212868668779,"longitude":-56.210135366587593,"name":"Ciudad Vieja Store","Sales":[{"product":{"name":"Mountain"},"sales":12},{"product":{"name":"Racing"},"sales":15},{"product":{"name":"Touring"},"sales":77},{"product":{"name":"BMX"},"sales":88}]},{"latitude":-34.910536861444633,"longitude":-56.18157007222473,"name":"Aguada Store","Sales":[{"product":{"name":"Mountain"},"sales":73},{"product":{"name":"Racing"},"sales":72},{"product":{"name":"Touring"},"sales":98},{"product":{"name":"BMX"},"sales":49}]},{"latitude":-34.894769070061912,"longitude":-56.190196056416625,"name":"Aguada Store","Sales":[{"product":{"name":"Mountain"},"sales":88},{"product":{"name":"Racing"},"sales":6},{"product":{"name":"Touring"},"sales":92},{"product":{"name":"BMX"},"sales":26}]},{"latitude":-34.922516661883606,"longitude":-56.16008483834726,"name":"Punta Carretas Store","Sales":[{"product":{"name":"Mountain"},"sales":15},{"product":{"name":"Racing"},"sales":69},{"product":{"name":"Touring"},"sales":45},{"product":{"name":"BMX"},"sales":12}]},{"latitude":-34.889867389095571,"longitude":-56.126586134241066,"name":"Buceo Store","Sales":[{"product":{"name":"Mountain"},"sales":90},{"product":{"name":"Racing"},"sales":19},{"product":{"name":"Touring"},"sales":46},{"product":{"name":"BMX"},"sales":44}]},{"latitude":-34.834934792915952,"longitude":-56.139632398889511,"name":"Piedras Blancas Store","Sales":[{"product":{"name":"Mountain"},"sales":13},{"product":{"name":"Racing"},"sales":68},{"product":{"name":"Touring"},"sales":61},{"product":{"name":"BMX"},"sales":55}]},{"latitude":-34.834934792915952,"longitude":-56.212416822717636,"name":"La Floresta Store","Sales":[{"product":{"name":"Mountain"},"sales":80},{"product":{"name":"Racing"},"sales":28},{"product":{"name":"Touring"},"sales":74},{"product":{"name":"BMX"},"sales":43}]},{"latitude":-34.881700248733424,"longitude":-56.068907911584816,"name":"Carrasco Store","Sales":[{"product":{"name":"Mountain"},"sales":47},{"product":{"name":"Racing"},"sales":98},{"product":{"name":"Touring"},"sales":4},{"product":{"name":"BMX"},"sales":50}]}]}

jquery.wijmo.wijtooltip.min.js

var __extends=this.__extends||function(e,t){function r(){this.constructor=e}for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);r.prototype=t.prototype,e.prototype=new r},wijmo;(function(e){(function(t){"use strict";var n=jQuery,r="wijtooltip",i="@wijtp@",s="wijmo-wijtooltip",o=s+"-arrow-",u=parseFloat,a=window,f=document,l=Math,c=l.max,h,p=function(e){function t(){e.apply(this,arguments)}return __extends(t,e),t.prototype._setOption=function(t,r){var i=this,s="_set_"+t,o=i.options[t];if(t==="controlwidth"){i._setSize("width",r);return}if(t==="controlheight"){i._setSize("height",r);return}e.prototype._baseWidget.call(this).prototype._setOption.apply(i,arguments),n.isPlainObject(r)&&(i.options[t]=n.extend({},o,r)),i[s]&&i[s](o),i._isDisabled()&&i._hideTooltip()},t.prototype._set_cssClass=function(){var e=this,t=e.options,n=e._tooltipCache._$tooltip;if(!n)return;n.hasClass(t.cssClass)||n.addClass(t.cssClass)},t.prototype._set_content=function(e){var t=this;t._isAjaxCallback?(t._callbacked=!0,t.show(),t._callbacked=!1):t._setText()},t.prototype._create=function(){var n=this,r=n.options,s=n.element,o=s&&s.attr("id"),u="",a="",f=r.group||i,l=t._getTooltip(f);l?l.count++:(l=n._createTooltip(),l.count=1,t._tooltips[f]=l),a=r.cssClass?r.cssClass:"",l._$tooltip.hasClass(a)||l._$tooltip.addClass(a),r.position.of=n.element,n._bindLiveEvents(),n._tooltipCache=l,o&&(u=l._$tooltip.attr("aria-describedby"),u=u===undefined?"":u+" ",l._$tooltip.attr("aria-describedby",u+o)),r.controlwidth&&r.controlwidth!==""&&n._setSize("width",r.controlwidth),r.controlheight&&r.controlheight!==""&&n._setSize("height",r.controlheight),e.prototype._baseWidget.call(this).prototype._create.apply(n,arguments)},t.prototype.destroy=function(){var n=this,r=n.element,s=n.options.group||i;r.unbind(".tooltip"),r.attr("title",n._content),e.prototype.destroy.call(this),t._removeTooltip(s),n._tooltipCache=null},t.prototype.widget=function(){return this._tooltipCache._$tooltip},t.prototype.show=function(){this.showAt(null)},t.prototype.showAt=function(e){var t=this,r=t._tooltipCache,i=r?r._$tooltip:null,s=t.options;if(!r||t._isDisabled())return;i.stop(!0,!0),r._showAnimationTimer&&(clearTimeout(r._showAnimationTimer),r._showAnimationTimer=null),r._showAtAnimationTimer&&(clearTimeout(r._showAtAnimationTimer),r._showAtAnimationTimer=null),r._hideAnimationTimer&&(clearTimeout(r._hideAnimationTimer),r._hideAnimationTimer=null);if(!e){if(s.ajaxCallback&&n.isFunction(s.ajaxCallback)&&!t._callbacked){t._isAjaxCallback=!0,s.ajaxCallback.call(t.element);return}t._setText()}s.showDelay?r._showAtAnimationTimer=setTimeout(function(){t._showToolTipHelper(e,i)},s.showDelay):t._showToolTipHelper(e,i)},t.prototype.hide=function(){var e=this,t=e._tooltipCache;if(!t)return;t._showAnimationTimer&&(clearTimeout(t._showAnimationTimer),t._showAnimationTimer=null),t._showAtAnimationTimer&&(clearTimeout(t._showAtAnimationTimer),t._showAtAnimationTimer=null),t._hideAnimationTimer&&(clearTimeout(t._hideAnimationTimer),t._hideAnimationTimer=null),e.options.hideDelay?t._hideAnimationTimer=setTimeout(n.proxy(e._hideTooltip,e),e.options.hideDelay):e._hideTooltip()},t.prototype._createTooltip=function(){var e=this,t=e.options,r=new TooltipCache,i=n("<div></div>").addClass(t.wijCSS.tooltip).addClass(t.wijCSS.widget).addClass(t.wijCSS.content).addClass(t.wijCSS.cornerAll),s=n("<div></div>").addClass(t.wijCSS.tooltipContainer),o=n("<div></div>").addClass(t.wijCSS.content).addClass(t.wijCSS.tooltipPointer).append(n("<div></div>").addClass(t.wijCSS.tooltipPointerInner)),u=n("<div></div>").addClass(t.wijCSS.tooltipTitle).addClass(t.wijCSS.header).addClass(t.wijCSS.cornerAll),a=n("<a href='#'></a>").addClass(t.wijCSS.tooltipClose).addClass(t.wijCSS.stateDefault).addClass(t.wijCSS.cornerAll);return a.append(n("<span></span>").addClass(t.wijCSS.icon).addClass(t.wijCSS.iconClose)).unbind("click").bind("click",n.proxy(e._onClickCloseBtn,e)),t.closeBehavior!=="sticky"&&a.hide(),t.showCallout||o.hide(),i.append(u).append(a).append(s).append(o).css("position","absolute").attr("role","tooltip").appendTo("body").hide(),r._$tooltip=i,r._container=s,r._callout=o,r._closeBtn=a,r._title=u,r},t.prototype._showToolTipHelper=function(e,t){if(e){var n=this,r=n._tooltipCache,i={},s,o,u=t.is(":visible"),a=r?r._callout:null;if(!a)return;n._setText(),h=t.offset(),t.offset({left:0,top:0}).show(),s=n._getCalloutShape(),i=this._getOffsetPosition(e,t,a,s),o=n._flipTooltip(i,s),n._setUnfilledCallout(o),t&&o!=s&&(i=this._getOffsetPosition(e,t,a,o)),t.offset(i),u||t.hide(),n._calloutShape=o}else{h=t.offset();if(this.options.mouseTrailing){this._setCalloutCss();return}this._setPosition()}this._showTooltip()},t.prototype._getOffsetPosition=function(e,t,n,r){var i={left:0,top:0},s=t.width(),u=t.height(),a,f,l,c,h;this._removeCalloutCss(),t.addClass(o+r),c=n.position().left,h=n.position().top,a=this._getBorder(n),f=a.left||a.right,l=a.top||a.bottom;switch(r){case"rt":i={left:e.x-s-f,top:e.y-h};break;case"rc":i={left:e.x-s-f,top:e.y-u/2};break;case"rb":i={left:e.x-s-f,top:e.y-h-l};break;case"lt":i={left:e.x+f,top:e.y-h};break;case"lc":i={left:e.x+f,top:e.y-u/2};break;case"lb":i={left:e.x+f,top:e.y-h-l};break;case"tl":i={left:e.x-c,top:e.y+l};break;case"tc":i={left:e.x-s/2,top:e.y+l};break;case"tr":i={left:e.x-c-f,top:e.y+l};break;case"bl":i={left:e.x-c,top:e.y-u-l};break;case"bc":i={left:e.x-s/2,top:e.y-u-l};break;case"br":i={left:e.x-c-f,top:e.y-u-l};break;case"cc":i={left:e.x-s/2,top:e.y-u/2}}return i},t.prototype._bindLiveEvents=function(){var e=this,t=e.options,r=e.element;e._content===undefined&&(e._content=r.attr("title"),r.attr("title","")),r.unbind(".tooltip"),t.mouseTrailing&&r.bind("mousemove.tooltip",function(n){if(e._isDisabled())return;var r=t.position.offset||"",i=r.split(" ");i.length===2?e.showAt({x:n.pageX+parseInt(i[0],10),y:n.pageY+parseInt(i[1],10)}):e.showAt({x:n.pageX,y:n.pageY})}),r.bind("mouseout.tooltip",n.proxy(e._hideIfNeeded,e));switch(t.triggers){case"hover":r.bind("mouseover.tooltip",n.proxy(e.show,e));break;case"click":r.bind("click.tooltip",n.proxy(e.show,e));break;case"focus":r.bind("focus.tooltip",n.proxy(e.show,e)).bind("blur.tooltip",n.proxy(e._hideIfNeeded,e));break;case"rightClick":r.bind("contextmenu.tooltip",function(t){e.show(),t.preventDefault()})}},t.prototype._hideIfNeeded=function(){var e=this,t=e.options,n=t.closeBehavior,r=e._tooltipCache&&e._tooltipCache._$tooltip&&e._tooltipCache._$tooltip.is(":visible");if(n==="sticky"||t.modal||!r||n==="none"||e._isDisabled())return;e.hide()},t.prototype._flipTooltip=function(e,t){var n=this,r=n._tooltipCache,i=r?r._$tooltip:null,s={width:i.width(),height:i.height()},o,u,a,f;return o=n._flipCallout(e,s,t),o.calloutShape},t.prototype._flipCallout=function(e,t,r){var i=this,s=i.options,u=i._tooltipCache,f=u._$tooltip,l={h:!1,v:!1},c=n(a),h=(s.position.collision||"flip").split(" ");h.length===1&&(h[1]=h[0]);if(!u||h[0]!=="flip"&&h[1]!=="flip")return{flip:l,calloutShape:null};h[0]==="flip"&&(e.left<0&&(l.h=!0,r.indexOf("r")>-1&&(r=r.replace(/r/,"l"),l.h="r")),e.left+t.width>c.width()+c.scrollLeft()&&(l.h=!0,r.indexOf("l")>-1&&(r=r.replace(/l/,"r"),l.h="l"))),h[0]==="flip"&&(e.top<0&&(l.v=!0,r.indexOf("b")>-1&&(r=r.replace(/b/,"t"),l.v="b")),e.top+t.height>c.height()+c.scrollTop()&&(l.v=!0,r.indexOf("t")>-1&&(r=r.replace(/t/,"b"),l.v="t")));if(l.h||l.v)i._removeCalloutCss(),f.addClass(o+r);return{flip:l,calloutShape:r}},t.prototype._set_position=function(e){var t=this,n=t.options,r=n.position;n.showCallout&&((e.my!==r.my||e.at!==r.at)&&t._setPosition(),t._setCalloutOffset(!0)),t._setText()},t.prototype._set_showCallout=function(){var e=this,t=e._tooltipCache,n=t?t._callout:null;if(!t||!n)return;e.options.showCallout?(e._setCalloutCss(),n.show()):n.hide(),e._setPosition()},t.prototype._set_closeBehavior=function(){var e=this,t=e._tooltipCache,n=t?t._closeBtn:null;n&&n[e.options.closeBehavior==="sticky"?"show":"hide"]()},t.prototype._set_triggers=function(){this._bindLiveEvents()},t.prototype._set_mouseTrailing=function(){this._bindLiveEvents()},t.prototype._getCalloutShape=function(){var e=this,t=e.options.position,r=function(e){return n.makeArray(n.map(e,function(e){return e.substr(0,1)}))},i=r(t.my.split(" ")),s=r(t.at.split(" ")),o=[];return i.length===2&&(o=i),i[0]===s[0]?(i[1]==="t"&&s[1]==="b"||i[1]==="b"&&s[1]==="t")&&o.reverse():s[0]==="c"&&o.reverse(),o[0]==="c"&&o.reverse(),o.join("")},t.prototype._setCalloutCss=function(){var e=this,t=e.options,r=e._tooltipCache,i=r?r._$tooltip:null,s="",u="",a=n.support.isTouchEnabled;if(!t.showCallout&&!a)return;e._removeCalloutCss(),u=e._getCalloutShape(),s=o+u,i&&i.addClass(s)},t.prototype._removeCalloutCss=function(){var e=this._tooltipCache,t;e&&(t=e._$tooltip,n.each(["tl","tc","tr","bl","bc","br","rt","rc","rb","lt","lc","lb","cc"],function(e,n){var r=o+n;if(t.hasClass(r))return t.removeClass(r),!1}))},t.prototype._getBorder=function(e){var t={};return n.each(["top","right","left","bottom"],function(n,r){t[r]=u(e.css("border-"+r+"-width"))}),t},t.prototype._setPosition=function(){var e=this,t=e.options,r=t.position,i=r.my,s=e._tooltipCache,o=s?s._$tooltip:null,a=o.is(":hidden"),f=e._getCalloutShape(),l=f?f.split(""):null,c=[0,0],h=s._callout,p,d,v,m,g,y={width:o.width(),height:o.height()},b,w,E=n.support.isTouchEnabled;e._setCalloutCss(),a&&o.show(),o.css({left:0,top:0});if(t.showCallout){p=e._getBorder(h),v=u(h.css("left")),d=u(h.css("top")),m=u(h.css("right")),g=u(h.css("bottom"));switch(l[0]){case"l":c[0]=p.right;break;case"r":c[0]=-p.left;break;case"b":c[1]=g;break;case"t":c[1]=-d}switch(l[1]){case"t":c[1]=-d;break;case"b":c[1]=g;break;case"r":c[0]=m;break;case"l":c[0]=-v}}if(E&&E()){switch(l[0]){case"l":c[0]=c[0]+30;break;case"r":c[0]=c[0]-30;break;case"b":c[1]=c[1]-30;break;case"t":c[1]=c[1]+30}switch(l[1]){case"t":c[1]=c[1]+30;break;case"b":c[1]=c[1]-30;break;case"r":c[0]=c[0]-30;break;case"l":c[0]=c[0]+30}}r.my.indexOf(" ")>-1?i=r.my.split(" ")[0]+"+"+c[0]+" "+r.my.split(" ")[1]+"+"+c[1]:i=r.my+"+"+c[0]+" "+r.my+"+"+c[1],o.position({my:i,at:r.at,of:r.of,collision:"none none"}),b=e._flipCallout(o.offset(),y,f),w=b.flip;if(w.h||w.v)o.css({left:0,top:0}),o.position({my:i,at:r.at,of:r.of,collision:r.collision});t.showCallout&&e._setUnfilledCallout(f),e._calloutShape=f,a&&o.hide()},t.prototype._setCalloutOffset=function(e){var t=this,r=t.options,i=t._tooltipCache,s=i?i._$tooltip:null,o=i&&i._callout,u=t._calloutShape,a=!1,f=r.position.offset,l="",c=[],h=r.calloutAnimation;if(!o)return;if(!f||f.length===0)return;o.stop(!0,!0),n.each(["tr","tc","tl","bl","bc","br"],function(e,t){if(u===t)return a=!0,!1}),f&&(c=f.split(" "),c.length===2?l=a?c[0]:c[1]:c.length===1&&(l=c[0])),c&&c.length===2&&c[0]==="none"&&c[1]==="none"?o.css("left","").css("top",""):l==="none"?o.css(a?"left":"top",""):l!==""&&(e&&!e.disabled?a?o.animate({left:l},h.duration,h.easing):o.animate({top:l},h.duration,h.easing):o.css(a?"left":"top",l))},t.prototype._setUnfilledCallout=function(e){var t=this,n=t._tooltipCache,r=n?n._$tooltip:null,i=n&&n._callout,s=i&&i.children(),o=e.split(""),u=r?r.css("background-color"):"";if(!s)return;s.css({"border-left-color":"","border-top-color":"","border-bottom-color":"","border-right-color":""});if(!t.options.calloutFilled)switch(o[0]){case"l":s.css("border-right-color",u);break;case"t":s.css("border-bottom-color",u);break;case"r":s.css("border-left-color",u);break;case"b":s.css("border-top-color",u)}},t.prototype._showTooltip=function(){var e=this,r=e.options,i=e._tooltipCache,s=i?i._$tooltip:null,o,u,a;if(!i)return;if(e._trigger("showing",null,e)===!1){s.is(":visible")&&s.hide();return}e._showModalLayer(),s.css("z-index",99999),n.fn.wijshow?(u={show:!0,context:s},o=n.extend({},r.animation,r.showAnimation),s.is(":visible")&&(a=s.offset(),s.offset(h),n.extend(u,{pos:a}),o.animated="tooltipSlide"),s.wijshow(o,t.animations,u,null,function(){e._trigger("shown")})):(s.show(),e._trigger("shown")),e._setCalloutOffset(!1)},t.prototype._hideTooltip=function(){var e=this,r=e.options,i=e._tooltipCache,s=i?i._$tooltip:null,o=n.extend({},r.animation,r.hideAnimation),u;if(!i)return;if(e._trigger("hiding",null,e)===!1)return;e._hideModalLayer(),n.fn.wijhide?(u={show:!1,context:s},s.wijhide(o,t.animations,u,null,function(){e._trigger("hidden"),s.css("z-index","")})):(s.hide(),e._trigger("hidden"),s.css("z-index",""))},t.prototype._getContent=function(e){var t={data:""},r;return n.isFunction(e)?(r=e.call(this.element,t),t.data!==""?t.data:r):window[e]&&n.isFunction(window[e])?(r=window[e].call(this.element,t),t.data!==""?t.data:r):e},t.prototype._setText=function(){var e=this,t=e.options,n=e._tooltipCache,r="",i="",s=n?n._title:null;if(!n)return;r=e._getContent(t.content),r=r===""?e._content:r,n._container.html(r),i=e._getContent(t.title),i!==""?s.html(i).show():s.hide()},t.prototype._showModalLayer=function(){var e=this,t=e.options,r=null;e.options.modal&&(r=n("<div>").addClass(t.wijCSS.overlay).css("z-index",99e3).width(e._getDocSize("Width")).height(e._getDocSize("Height")).appendTo("body"),n(window).bind("resize.wijtooltip",function(){r.width(e._getDocSize("Width")).height(e._getDocSize("Height"))}),e._tooltipCache._modalLayer=r)},t.prototype._hideModalLayer=function(){var e=this,t=e._tooltipCache._modalLayer;t&&(t.css("z-index","").remove(),t=null,n(window).unbind("resize.wijtooltip"))},t.prototype._getDocSize=function(e){var t,r,i="documentElement",s="body";return n.browser.msie&&parseFloat(n.browser.version)<9?(t=c(f[i]["scroll"+e],f[s]["scroll"+e]),r=c(f[i]["offset"+e],f[s]["offset"+e]),t<r?n(a)[e.toLowerCase()]()+"px":t+"px"):n(f)[e.toLowerCase()]()+"px"},t.prototype._setSize=function(e,t){var n=this,r=n._tooltipCache,i=r?r._$tooltip:null;i&&i.css(e,t)},t.prototype._onClickCloseBtn=function(e){this.hide(),e.preventDefault()},t._getTooltip=function(e){return t._tooltips[e]},t._removeTooltip=function(e){var n=t._tooltips[e];n&&(n.count--,n.count<=0&&(n._title.remove(),delete n._title,n._closeBtn.unbind(),n._closeBtn.remove(),delete n._closeBtn,n._callout.remove(),delete n._callout,n._container.remove(),delete n._container,n._$tooltip.remove(),delete n._$tooltip,n._modalLayer&&(n._modalLayer.remove(),delete n._modalLayer),t._tooltips[e]=null,delete t._tooltips[e]))},t._tooltips=new Array,t.animations={fade:function(e,t){e=n.extend({duration:300,easing:"swing"},e,t),e.context.stop(!0,!0).animate(e.show?{opacity:"show"}:{opacity:"hide"},e)},tooltipSlide:function(e,t){e=n.extend({duration:300,easing:"swing"},e,t),e.context.stop(!0,!0).animate({left:e.pos.left,top:e.pos.top},e)}},t}(e.wijmoWidget);t.wijtooltip=p;var d=function(){function e(){this.initSelector=":jqmData(role='wijtooltip')",this.wijCSS={tooltip:"wijmo-wijtooltip",tooltipContainer:"wijmo-wijtooltip-container",tooltipPointer:"wijmo-wijtooltip-pointer",tooltipPointerInner:"wijmo-wijtooltip-pointer-inner",tooltipTitle:"wijmo-wijtooltip-title",tooltipClose:"wijmo-wijtooltip-close"},this.wijMobileCSS={header:"ui-header ui-bar-a",content:"ui-body-a",stateDefault:"ui-btn ui-btn-a",stateHover:"ui-btn-down-a",stateActive:"ui-btn-down-a"},this.content="",this.title="",this.closeBehavior="auto",this.mouseTrailing=!1,this.triggers="hover",this.position={my:"left bottom",at:"right top",offset:null},this.showCallout=!0,this.animation={animated:"fade",duration:500,easing:null},this.showAnimation={},this.hideAnimation={},this.showDelay=150,this.hideDelay=150,this.calloutAnimation={duration:1e3,disabled:!1,easing:null},this.calloutFilled=!1,this.modal=!1,this.group=null,this.ajaxCallback=null,this.showing=null,this.shown=null,this.hiding=null,this.hidden=null,this.cssClass="",this.controlwidth=null,this.controlheight=null}return e}();p.prototype.options=n.extend(!0,{},e.wijmoWidget.prototype.options,new d),n.wijmo.registerWidget(r,p.prototype)})(e.tooltip||(e.tooltip={}));var t=e.tooltip})(wijmo||(wijmo={}));var TooltipCache=function(){function e(){}return e}();

In the Designer

  1. Add a C1Maps control onto the Web Form.
  2. Right click the control and select Properties from the context menu, to open the Properties window.
  3. Click the ellipsis button (...) next to Layers property to open the C1Layers Collection Editor.
  4. Click the drop-down arrow on the Add button and select C1VirtualLayer. A C1VectorLayer is added to the Layers collection and its properties are displayed on the right side of the C1Layers Collection Editor.
  5. Similarly, add another VirtualLayer.
  6. Select the first VirtualLayer and complete the following steps:
    1. Set the Request property to requestFactories.
    2. Click the ellipsis button (...) next to Slices property to open the MapSlice Collection Editor.
    3. Click the Add button to add a slice and set its LatitudeSlices property to 1, LongitudeSlices property to 1 and Zoom property to 0.
    4. Click OK to close the MapSlice Collection Editor.
  7. Select the second VirtualLayer and complete the following steps:
    1. Set the Request property to requestStores.
    2. Click the ellipsis button (...) next to Slices property to open the MapSlice Collection Editor
    3. Click the Add button to add a slice and set its LatitudeSlices property to 1, LongitudeSlices property to 1 and Zoom property to 1.Click the
    4. Add button to add another slice and set its LatitudeSlices property to 1024, LongitudeSlices property to 1024 and Zoom property to 5.
    5. Click OK to close the MapSlice Collection Editor.
  8. Click OK to close the C1Layer Collection Editor.
  9. Press F5 to run the project.

In Source View   

Add the following markup between the <c1:C1Maps> </c1:C1Maps> tags to add virtual layers over the C1Maps control:

Source View
Copy Code
<Layers>
    <c1:C1VirtualLayer Request="requestFactories">
        <Slices>
            <c1:MapSlice LatitudeSlices="1" LongitudeSlices="1" Zoom="0" />
        </Slices>
    </c1:C1VirtualLayer>
    <c1:C1VirtualLayer Request="requestStores">
        <Slices>
            <c1:MapSlice LatitudeSlices="1" LongitudeSlices="1" Zoom="1" />
            <c1:MapSlice LatitudeSlices="1024" LongitudeSlices="1024" Zoom="5" />
        </Slices>
    </c1:C1VirtualLayer>
</Layers>

In Code

  1. Add the following code to the Page_Load event,  to add virtual layers over the C1Maps control:
    C#
    Copy Code
    // create and add virtual layer 1
    C1VirtualLayer vl1 = new C1VirtualLayer();
    vl1.Request = "requestFactories";
    C1Maps1.Layers.Add(vl1);
    MapSlice s1 = new MapSlice();
    s1.LatitudeSlices = 1;
    s1.LatitudeSlices = 1;
    s1.Zoom = 0;
    vl1.Slices.Add(s1);
    
    // create and add virtual layer 2
    C1VirtualLayer vl2 = new C1VirtualLayer();
    vl1.Request = "requestStores";
    C1Maps1.Layers.Add(vl2);
    MapSlice s2 = new MapSlice();
    s2.LatitudeSlices = 1;
    s2.LatitudeSlices = 1;
    s2.Zoom = 1;
    vl2.Slices.Add(s2);
    MapSlice s3 = new MapSlice();
    s3.LatitudeSlices = 1024;
    s3.LatitudeSlices = 1024;
    s3.Zoom = 5;
    vl2.Slices.Add(s3);
    

    Visual Basic
    Copy Code
    ' create and add virtual layer 1
    Dim vl1 As New C1VirtualLayer()
    vl1.Request = "requestFactories"
    C1Maps1.Layers.Add(vl1)
    Dim s1 As New MapSlice()
    s1.LatitudeSlices = 1
    s1.LatitudeSlices = 1
    s1.Zoom = 0
    
    ' create and add virtual layer 2
    Dim vl2 As New C1VirtualLayer()
    vl1.Request = "requestStores"
    C1Maps1.Layers.Add(vl2)
    Dim s2 As New MapSlice()
    s2.LatitudeSlices = 1
    s2.LatitudeSlices = 1
    s2.Zoom = 1
    vl2.Slices.Add(s2)
    Dim s3 As New MapSlice()
    s3.LatitudeSlices = 1024
    s3.LatitudeSlices = 1024
    s3.Zoom = 5
    vl2.Slices.Add(s3)
    
  2. Run the project.

What You've Accomplished

The following image depicts a C1Maps control displaying factories at zoom level 2.

The following image depicts a C1Maps control displaying all the stores after you zoom in to level 5 or above.