2013-05-29 3 views
-2

J'ai déjà googlé en essayant de trouver la réponse, mais rien.Comment augmenter la distance avec google maps api?

Je crée un site où l'utilisateur peut rechercher et choisir un endroit avec api de géocodage de Google, alors j'obtiens les limites de cet endroit, mais alors l'utilisateur devrait pouvoir augmenter ces limites. Par exemple, l'utilisateur pourrait augmenter la distance de cet endroit dans 5 km, donc je serais en mesure d'augmenter les limites de 5 km.

Ceci est le résultat lorsque l'utilisateur d'un endroit Critères de recherche:

"geometry" : { 
     "bounds" : { 
      "northeast" : { 
       "lat" : 42.15420480, 
       "lng" : -6.19020910 
      }, 
      "southwest" : { 
       "lat" : 32.403740, 
       "lng" : -31.2751580 
      } 
     }, 

Maintenant je dois augmenter les limites à 5km. Comment puis-je faire cela en javascript étant donné que je dois convertir km en degrés?

Merci beaucoup.

EDIT

I tryed cela grâce à @geocodezip mais quelque chose ne qorking. J'essaie comme il est dit here à "Point de destination distance donnée et relèvement du point de départ", mais quelque chose ne fonctionne pas correctement. Ceci est le code:

//convert decimal to degree 
function getDD2DMS(dms, type){ 
    var sign = 1, Abs=0; 
    var days, minutes, secounds, direction; 

    if(dms < 0) { sign = -1; } 
    Abs = Math.abs(Math.round(dms * 1000000.)); 
    //Math.round is used to eliminate the small error caused by rounding in the computer: 
    //e.g. 0.2 is not the same as 0.20000000000284 
    //Error checks 
    if(type == 'lat' && Abs > (90 * 1000000)){ 
     //alert(' Degrees Latitude must be in the range of -90. to 90. '); 
     return false; 
    } else if(type == 'lng' && Abs > (180 * 1000000)){ 
     //alert(' Degrees Longitude must be in the range of -180 to 180. '); 
     return false; 
    } 
    days = Math.floor(Abs/1000000); 
    minutes = Math.floor(((Abs/1000000) - days) * 60); 
    secounds = (Math.floor(((((Abs/1000000) - days) * 60) - minutes) * 100000) *60/100000).toFixed(); 
    days = days * sign; 
    if(type == 'lat') direction = days<0 ? 'S' : 'N'; 
    if(type == 'lng') direction = days<0 ? 'W' : 'E'; 
    //else return value  
    return (days * sign) + 'º ' + minutes + "' " + secounds + "'' " + direction; 
} 

//calculate 
    var R = 6371; // km 
    var d = 10; //km 
    var brng = 0; //0 vertical, 90 horizontal 
    var lat1 = (42.15420480).toRad(); 
    var lon1 = (-6.19020910).toRad(); 
    var lat2 = Math.asin(Math.sin(lat1)*Math.cos(d/R) + Math.cos(lat1)*Math.sin(d/R)*Math.cos(brng)); 
    var lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(lat1), Math.cos(d/R)-Math.sin(lat1)*Math.sin(lat2)); 

    console.log('lat2 = ' + getDD2DMS(lat2, 'lat')); 
    console.log('lon2 = ' + getDD2DMS(lon2, 'lng')); 

Le résultat est différent de celui du lien. Aidez-moi. Merci beaucoup.

+0

Ne serait-il pas préférable de me dire ce qui ne va pas avec la question, au lieu d'évaluer négativement la question? Je vous remercie. – Pedro

+0

duplicata possible de [Comment transformer une distance de degrés en mètres?] (Http://stackoverflow.com/questions/4102520/how-to-transform-a-distance-from-degrees-to-metres) – duncan

+0

@duncan merci, mais l'idée n'est pas de convertir les degrés en metters, mais le contraire, km ou metters en degrés, ou au moins de savoir combien de degrés sont iqual à 1km (ou metters). – Pedro

Répondre

0

Je ne comprends pas parfaitement votre question, mais vous pouvez essayer de tracer un cadre et d'envoyer une recherche en utilisant les limites comme biais.

var bounds; 
google.maps.event.addListener(drawingManager, 'rectanglecomplete', function (rectangle) { 
    bounds = rectangle.getBounds(); 
    //search 
    google.maps.event.addListener(rectangle, 'bounds_changed', function() { 
      bounds = rectangle.getBounds(); 
      //search 
    } 
} 

//this is a copy of the search function in my app 
function codeAddress(type, geo) { 
var bounds = map.getBounds(); //get the current map bounds (should not be greater than the bounding box) 
geocoder.geocode({ 'address': geo, 'bounds': bounds }, function (results, status) { //geocode the lat/long of incoming with a bias towards the bounds 
    if (status == google.maps.GeocoderStatus.OK) { //if it worked 
     map.setCenter(results[0].geometry.location); //set the center of map to the results 
     testBounds(); //test to make sure we are indeed in the bounds (have to do this because gmaps only allows for a BIAS of bounds and is not strict) 
     if (mapInBounds == "yes") { //if it is inside bounds 
      if (searchCount > 0) { //check to see if this is the first time searched, if not 
       searchResult.setMap(null); //set old search result to not display on map 
      } else { //if it is the first time 
       searchCount++; //just interate 
      } 
      searchResult = new google.maps.Marker({ //create a new marker 
       map: map, //add to current map 
       position: results[0].geometry.location //set position to search results 
      }); 
      document.getElementById("search_results").innerHTML = "<div id=\"searchResult\">" + geo + " <a href=\"#\" onclick=\"searchResultDeleteMe();\"><img src=\"images/delete.png\"/></a></div><br\>"; //add list div 
     } else { //if location found was outside strict map bounds... 
      displayMessage("Could not find within bounds."); //say so 
     } 

    } else { //if the entire geocode did not work 
     alert(L6); //localization... 
    } 
}); 
}    //get the location of a lat/long or address 
function codeLatLng(latlng) { 
if (geocoder) { 
    geocoder.geocode({ 'latLng': latlng }, function (results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[1]) { 
       document.getElementById("rgItem").innerHTML = results[0].formatted_address; 
      } 
      else { 
       document.getElementById("rgItem").innerHTML = "Geocoder failed due to: " + status; 
       document.getElementById("rgItem").innerHTML = ""; 
      } 
     } 
    }); 
} 
}     //get th