Hallo@all,
ich habe mit meinen bedürftigen Kenntnissen in Jquery es geschafft die Gmap soweit anzupassen, dass mir beim klick auf einen Button, die Entfernung zum Zielort ausrechnet. Das funktioniert soweit, jedoch besteht ein Riesenproblem...ich habe gestern von Google eine Benachrichtigung bekommen dass ich über 280€ zahlen muss weil das Limit für "free" überschritten wurde, Distance Matrix knapp 70k Aufrufe innnerhalb 48h, nach einem Chat mit dem Support, meinte dieser das irgendwie 30 Aufrufe pro sekunde stattfinden auf der domain.Das einzige was ich mir vorstellen kann ist, dass da ein Wurm in meinem Code ist, irgendwo macht der nen ständigen "loop" aber ich hab null Plan wo das ist.
Vielleicht simpel und jemand von euch kommt drauf, ich wäre echt seeehr dankbar.
ich habe mit meinen bedürftigen Kenntnissen in Jquery es geschafft die Gmap soweit anzupassen, dass mir beim klick auf einen Button, die Entfernung zum Zielort ausrechnet. Das funktioniert soweit, jedoch besteht ein Riesenproblem...ich habe gestern von Google eine Benachrichtigung bekommen dass ich über 280€ zahlen muss weil das Limit für "free" überschritten wurde, Distance Matrix knapp 70k Aufrufe innnerhalb 48h, nach einem Chat mit dem Support, meinte dieser das irgendwie 30 Aufrufe pro sekunde stattfinden auf der domain.Das einzige was ich mir vorstellen kann ist, dass da ein Wurm in meinem Code ist, irgendwo macht der nen ständigen "loop" aber ich hab null Plan wo das ist.
Vielleicht simpel und jemand von euch kommt drauf, ich wäre echt seeehr dankbar.
Code:
<?php /*** To use google maps, please fill in your Google Maps API Key below*/ $GoogleMapsApiKey = 'AIzaSyDrMnBwFIwJSiZ0APIrNW3ozP_3iJherPM'; /** * DO NOT EDIT ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING! */ if(strlen($GoogleMapsApiKey) < 1) { echo ($GLOBALS['TL_LANGUAGE'] == 'de' ? 'Google Maps API Schlüssel benötigt. Bitte tragen Sie den API Schlüssel im Template customelement_gmap.html5 ein' : 'Google Maps requires a valid API Key!'); return ''; } ?> <?php $GLOBALS['TL_JAVASCRIPT'][] = 'https://maps.googleapis.com/maps/api/js?v=3.exp&key='.$GoogleMapsApiKey; ?> <div class="<?php echo $this->class; ?> block"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>> <div class="ce_google_map_inside" id="gmap_<?php echo $this->id; ?>" style="height: <?php echo $this->field('height')->value(); ?>px;"></div> </div> <?php $arrLocations = array(); if(count($this->group('adresse')) > 0) { foreach($this->group('adresse') as $i => $fields) { $arrLocations[$i] = array ( 'country' => $this->field('country#'.$i)->value(), 'street' => $this->field('street#'.$i)->value(), 'zipcode' => $this->field('zipcode#'.$i)->value(), 'city' => $this->field('place#'.$i)->value(), 'infotext' => \StringUtil::substrHtml($this->field('description#'.$i)->value(),strlen($this->field('description#'.$i)->value())), #'latitude' => '', #'longitude'=> '', 'markerTitle' => 'Location: '.$i, ); // marker icon if($this->field('icon#'.$i)->value()) { $image = $this->field('icon#'.$i)->generate(); $arrLocations[$i]['icon'] = \StringUtil::substrHtml($image,strlen($image)); } } } ?> <div style="display:block" id="pos"> Deine Position wird ermittelt... </div> <script> navigator.geolocation.getCurrentPosition(function( position){ document.getElementById('pos').innerHTML = 'Latitude: '+position.coords.latitude+' / Longitude: '+position.coords.longitude; }, function(){ document.getElementById('pos').innerHTML = 'Deine Position konnte leider nicht ermittelt werden'; }); </script> <script> /* <![CDATA[ */ /** * Initialize the googlemap */ function initializeMap_<?php echo $this->id; ?>() { var map; var center = {}; var gray = [{featureType: "all", stylers: [{ saturation:-100},{gamma:0},{invert_lightness:0}]}]; /***own Styles here***/ /***distanz Calculate***/ jQuery(function() { function calculateDistance(origin, destination) { var service = new google.maps.DistanceMatrixService(); service.getDistanceMatrix( { origins: [origin], destinations: [destination], travelMode: google.maps.TravelMode.DRIVING, unitSystem: google.maps.UnitSystem.METRIC, avoidHighways: false, avoidTolls: false }, callback); } function callback(response, status) { var err = "error" if (status != google.maps.DistanceMatrixStatus.OK) { {{iflng::pl}}jQuery('#result').html("Odległość ca. " + total + " Km ");{{iflng}} {{iflng::de}}jQuery('#result').html("Entfernung ca. " + total + " Km ");{{iflng}} } else { var origin = response.originAddresses[0]; var destination = response.destinationAddresses[0]; if (response.rows[0].elements[0].status === "ZERO_RESULTS") { jQuery('#result').html("Better get on a plane. There are no roads between " + origin + " and " + destination); } else { var distance = response.rows[0].elements[0].distance; var distance_value = distance.value; var distance_text = distance.text; var total = distance_text.substring(0, distance_text.length -2); {{iflng::pl}}jQuery('#result').html("Odległość ca. " + total + " Km ");{{iflng}} {{iflng::de}}jQuery('#result').html("Entfernung ca. " + total + " Km ");{{iflng}} var origin = jQuery('#origin').val(); var destination = jQuery('#destination').val(); var distance_text = calculateDistance(origin, +meineLatitude + ', ' + meineLongitude); }}} var map = new google.maps.Map(document.getElementById('gmap_<?ph p echo $this->id; ?>'),mapOptions); // build locations array var locations = []; <?php foreach($arrLocations as $i => $location): ?> var location = {}; <?php foreach($location as $k => $v): ?> location.<?php echo $k; ?> = '<?php echo $v; ?>'; <?php endforeach; ?> locations.push(location); <?php endforeach; ?> var infowindow = new google.maps.InfoWindow(); var markers = new Array(); var neededGeocoder = false; // place markers for(var i = 0; i < locations.length; i++) { (function(location) // must encapsule to avoid wrong index in geocoder callback { // need the geocoder to find coordinates if(location.latitude == undefined || location.longitude == undefined) { var geocoder = new google.maps.Geocoder; var address = location.street + ',' + location.zipcode + ',' + location.city + ',' + location.country; geocoder.geocode({'address': address}, function(results, status) { var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location, title: location.markerTitle, icon: location.icon }); google.maps.event.addListener(marker, 'click', function() { // go to marker position and zoom map.panTo(marker.position); map.setZoom(12); map.panBy(0, -120); infowindow.setContent('<div class="gmap_infotext">'+ location.infotext+'</div>'); infowindow.open(map, marker); }); // show map, open infoBox google.maps.event.addListenerOnce(map, 'tilesloaded', function() { // go to marker position and zoom map.panTo(marker.position); map.setZoom(8); map.panBy(0, -120); infowindow.setContent('<div class="gmap_infotext">'+ location.infotext+'</div>'); infowindow.open(map, marker); }); centers_lat.push(results[0].geometry.location.lat()); centers_lng.push(results[0].geometry.location.lng()); }); jQuery('#posbutton').click(function(){ jQuery('#loading').append({{iflng::de}}"Entfernung und Position wird ermittelt..."{{iflng}}{{iflng::pl}}"Odległość i pozycja są ustalane..."{{iflng}}); jQuery('#loading').css("display","block"); //My pos navigator.geolocation.getCurrentPosition(function( position){ meineLongitude = position.coords.longitude; meineLatitude = position.coords.latitude; var marker2 = new google.maps.Marker ({ position: new google.maps.LatLng(meineLatitude,meineLongitude), map: map, title: "Hier bist du", icon: location.icon }); ////LatLng in Adresse formatieren var latlng = {lat: parseFloat(meineLatitude), lng: parseFloat(meineLongitude)}; geocoder.geocode({'location': latlng}, function(results, status) { ///////// // go to marker position and zoom map.panTo(marker2.position); map.setZoom(7); infowindow.setPosition(marker2.position); infowindow.setContent({{iflng::de}}'Sie sind hier: <br />'+ results[0].formatted_address{{iflng}} {{iflng::pl}}'Jesteś tutaj: <br />'+ results[0].formatted_address{{iflng}}); infowindow.open(map,marker2); map.setCenter(marker2.position); var origin = jQuery('#origin').val(location.street + ',' + location.zipcode + ',' + location.city + ',' + location.country); var destination = jQuery('#destination').val(+meineLatitude + ', ' + meineLongitude); jQuery('#distance_form input:submit').submit(); var origin = jQuery('#origin').val(); var destination = jQuery('#destination').val(); var distance_text = calculateDistance(origin, +meineLatitude + ', ' + meineLongitude); // Draw a line showing the straight distance between the markers var flightPlanCoordinates = [ {lat: +meineLatitude, lng: meineLongitude}, {lat: 52.597399017153656, lng: 8.117807688649808} ]; var flightPath = new google.maps.Polyline({ path: flightPlanCoordinates, geodesic: true, strokeColor: '#FF0000', strokeOpacity: 1.0, strokeWeight: 2 }); flightPath.setMap(map); jQuery('#loading').css("display","none"); }); }); }); } // location has coordinates. else { var pos = new google.maps.LatLng(location.latitude, location.longitude); var marker = new google.maps.Marker( { position: pos, map: map, title: location.markerTitle, icon: location.icon }); google.maps.event.addListener(marker, 'click', function() { // go to marker position and zoom map.panTo(marker.position); map.setZoom(25); infowindow.setContent('<div class="gmap_infotext">'+location.infotext+'</div>'); infowindow.open(map, marker); }); centers_lat.push(location.latitude); centers_lng.push(location.longitude); } })(locations[i]); //closure passing in variables from loop } // find average coordinate as map center if(locations.length > 0) { setTimeout(function() { var avg_lat = 0,avg_lng = 0; var c = centers_lat.length; for(var i = 0; i < c; i++) { avg_lat += centers_lat[i]; avg_lng += centers_lng[i]; } var center = { lat: avg_lat/c, lng: avg_lng/c }; map.setCenter( center ); }, 1200); } // fallback to default center else { center.lat = 51.1958685; center.lng = 10.4809570; map.setCenter( center ); } /***end distance calc***/ }); /***end distance calc***/ } google.maps.event.addDomListener(window, 'load',initializeMap_<?php echo $this->id; ?>); /* ]]> */ //Routebox open jQuery( document ).ready(function() { jQuery('#routebox').css("display","none"); jQuery('#posbutton').click(function(){ if (routeposition = true) { jQuery('#routebox').css("display","block"); jQuery('#mapbox').css("display","none"); //alert("routposition=0"); } else { jQuery('#routebox').css("display","none"); jQuery('#mapbox').css("display","block"); routeposition = false; //alert("routposition=1") return false; } }); }); </script>
Kommentar