جستجو
En
#chartdiv { width: 100%; height: 500px; overflow: hidden; position: relative; } .map-marker { /* adjusting for the marker dimensions so that it is centered on coordinates */ margin-left: -8px; margin-top: -8px; box-sizing: border-box; } .map-marker.map-clickable { cursor: pointer; } .pulse { width: 10px; height: 10px; border: 5px solid #f7f14c; -webkit-border-radius: 30px; -moz-border-radius: 30px; border-radius: 30px; background-color: #716f42; z-index: 10; position: absolute; box-sizing: border-box; } .map-marker .dot { border: 10px solid #fff601; background: transparent; -webkit-border-radius: 60px; -moz-border-radius: 60px; border-radius: 60px; height: 50px; width: 50px; -webkit-animation: pulse 3s ease-out; -moz-animation: pulse 3s ease-out; animation: pulse 3s ease-out; -webkit-animation-iteration-count: infinite; -moz-animation-iteration-count: infinite; animation-iteration-count: infinite; position: absolute; top: -20px; left: -20px; z-index: 1; opacity: 0; box-sizing: border-box; } @-moz-keyframes pulse { ۰% { -moz-transform: scale(0); opacity: 0.0; } ۲۵% { -moz-transform: scale(0); opacity: 0.1; } ۵۰% { -moz-transform: scale(0.1); opacity: 0.3; } ۷۵% { -moz-transform: scale(0.5); opacity: 0.5; } ۱۰۰% { -moz-transform: scale(1); opacity: 0.0; } } @-webkit-keyframes "pulse" { ۰% { -webkit-transform: scale(0); opacity: 0.0; } ۲۵% { -webkit-transform: scale(0); opacity: 0.1; } ۵۰% { -webkit-transform: scale(0.1); opacity: 0.3; } ۷۵% { -webkit-transform: scale(0.5); opacity: 0.5; } ۱۰۰% { -webkit-transform: scale(1); opacity: 0.0; } } am4core.ready(function() { // Themes begin am4core.useTheme(am4themes_spiritedaway); // Themes end // Create map instance var chart = am4core.create("chartdiv", am4maps.MapChart); // Set map definition chart.geodata = am4geodata_worldLow; // Set projection chart.projection = new am4maps.projections.Miller(); // Create map polygon series var polygonSeries = chart.series.push(new am4maps.MapPolygonSeries()); // Exclude Antartica polygonSeries.exclude = ["AQ"]; // Make map load polygon (like country names) data from GeoJSON polygonSeries.useGeodata = true; // Configure series var polygonTemplate = polygonSeries.mapPolygons.template; polygonTemplate.tooltipText = "{name}"; polygonTemplate.fill = chart.colors.getIndex(0).lighten(0.5); // Create hover state and set alternative fill color var hs = polygonTemplate.states.create("hover"); hs.properties.fill = chart.colors.getIndex(0); // Add image series var imageSeries = chart.series.push(new am4maps.MapImageSeries()); imageSeries.mapImages.template.propertyFields.longitude = "longitude"; imageSeries.mapImages.template.propertyFields.latitude = "latitude"; imageSeries.data = [ { "title": "Brussels", "latitude": 50.8371, "longitude": 4.3676 }, { "title": "Copenhagen", "latitude": 55.6763, "longitude": 12.5681 }, { "title": "Paris", "latitude": 48.8567, "longitude": 2.3510 }, { "title": "Reykjavik", "latitude": 64.1353, "longitude": -21.8952 }, { "title": "Moscow", "latitude": 55.7558, "longitude": 37.6176 }, { "title": "Madrid", "latitude": 40.4167, "longitude": -3.7033 }, { "title": "London", "latitude": 51.5002, "longitude": -0.1262, "url": "http://www.google.co.uk" }, { "title": "Peking", "latitude": 39.9056, "longitude": 116.3958 }, { "title": "New Delhi", "latitude": 28.6353, "longitude": 77.2250 }, { "title": "Tokyo", "latitude": 35.6785, "longitude": 139.6823, "url": "http://www.google.co.jp" }, { "title": "Ankara", "latitude": 39.9439, "longitude": 32.8560 }, { "title": "Buenos Aires", "latitude": -34.6118, "longitude": -58.4173 }, { "title": "Brasilia", "latitude": -15.7801, "longitude": -47.9292 }, { "title": "Ottawa", "latitude": 45.4235, "longitude": -75.6979 }, { "title": "Washington", "latitude": 38.8921, "longitude": -77.0241 }, { "title": "Kinshasa", "latitude": -4.3369, "longitude": 15.3271 }, { "title": "Cairo", "latitude": 30.0571, "longitude": 31.2272 }, { "title": "Pretoria", "latitude": -25.7463, "longitude": 28.1876 } ]; // add events to recalculate map position when the map is moved or zoomed chart.events.on( "ready", updateCustomMarkers ); chart.events.on( "mappositionchanged", updateCustomMarkers ); // this function will take current images on the map and create HTML elements for them function updateCustomMarkers( event ) { // go through all of the images imageSeries.mapImages.each(function(image) { // check if it has corresponding HTML element if (!image.dummyData || !image.dummyData.externalElement) { // create onex image.dummyData = { externalElement: createCustomMarker(image) }; } // reposition the element accoridng to coordinates var xy = chart.geoPointToSVG( { longitude: image.longitude, latitude: image.latitude } ); image.dummyData.externalElement.style.top = xy.y + 'px'; image.dummyData.externalElement.style.left = xy.x + 'px'; }); } // this function creates and returns a new marker element function createCustomMarker( image ) { var chart = image.dataItem.component.chart; // create holder var holder = document.createElement( 'div' ); holder.className = 'map-marker'; holder.title = image.dataItem.dataContext.title; holder.style.position = 'absolute'; // maybe add a link to it? if ( undefined != image.url ) { holder.onclick = function() { window.location.href = image.url; }; holder.className += ' map-clickable'; } // create dot var dot = document.createElement( 'div' ); dot.className = 'dot'; holder.appendChild( dot ); // create pulse var pulse = document.createElement( 'div' ); pulse.className = 'pulse'; holder.appendChild( pulse ); // append the marker to the map container chart.svgContainer.htmlElement.appendChild( holder ); return holder; } }); // end am4core.ready()