Я хочу использовать API Карт Google для рисования области вокруг определенной точки на карте, где человек может ходить в течение X минут. Другими словами, как вы можете найти все места, которые можно перемещать из заданной точки за определенный пользователем период времени?
Ответ 2
Update:
Поиграйте с этим:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps Geometry</title>
<script src="http://maps.google.com/maps/api/js?sensor=false"
type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 1000px; height: 800px"></div>
<script type="text/javascript">
function CalculateDistanceBetweenTwoPoint(lat1, lon1, lat2, lon2) {
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d * 1000;
}
Number.prototype.toRad = function() {
return this * Math.PI / 180;
}
Number.prototype.toDeg = function() {
return this * 180 / Math.PI;
}
google.maps.LatLng.prototype.destinationPoint = function(brng, dist) {
dist = dist / 6371;
brng = brng.toRad();
var lat1 = this.lat().toRad(), lon1 = this.lng().toRad();
var lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) +
Math.cos(lat1) * Math.sin(dist) * Math.cos(brng));
var lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) *
Math.cos(lat1),
Math.cos(dist) - Math.sin(lat1) *
Math.sin(lat2));
if (isNaN(lat2) || isNaN(lon2)) return null;
return new google.maps.LatLng(lat2.toDeg(), lon2.toDeg());
}
var pointA = new google.maps.LatLng(40.80, -74.00); // Circle center
var radius = 1; // 10km
var mapOpt = {
mapTypeId: google.maps.MapTypeId.TERRAIN,
center: pointA,
zoom: 17
};
var map = new google.maps.Map(document.getElementById("map"), mapOpt);
// Draw the circle
new google.maps.Circle({
center: pointA,
radius: radius * 1000, // Convert to meters
fillColor: '#FF0000',
fillOpacity: 0.2,
map: map
});
// Show marker at circle center
new google.maps.Marker({
position: pointA,
map: map
});
var i = 0;
setTimeout(LoopThroughPoints, 1000);
var triangleCoords = [];
function LoopThroughPoints() {
var directionsService = new google.maps.DirectionsService();
var destination = pointA.destinationPoint(i, radius);
var request = {
origin: pointA,
destination: destination,
travelMode: google.maps.TravelMode["WALKING"]
};
console.log(request);
directionsService.route(request, function(response, status) {
console.log(response);
if (status == google.maps.DirectionsStatus.OK) {
var cumulativeDistance = 0;
new google.maps.Marker({
position: destination,
map: map
});
loopy: for(var i = 0; i < response.routes[0].overview_path.length; i++)
{
var path = response.routes[0].overview_path[i];
var pathNext = response.routes[0].overview_path[i+1];
cumulativeDistance += CalculateDistanceBetweenTwoPoint(path.Oa, path.Pa, pathNext.Oa, pathNext.Pa);
if(cumulativeDistance >= 500) {
triangleCoords.push(new google.maps.LatLng(path.Oa, path.Pa));
break loopy;
}
}
}
});
i = i + 10;
if(i!=360) {
setTimeout(LoopThroughPoints, 10);
} else {
bermudaTriangle = new google.maps.Polygon({
paths: triangleCoords,
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FF0000",
fillOpacity: 0.35
});
bermudaTriangle.setMap(map);
}
}
</script>
</body>
</html>
Просто быстрый взгляд и некоторые стартеры, хотя кто-то может предложить несколько лучших решений.
Кажется, что не существует способа, чтобы все дороги выходили с определенной точки с помощью API Карт.
Расстояние:
Время, потраченное тяжело, я попытаюсь рассчитать его в метрах. Итак, согласно http://answers.yahoo.com/question/index?qid=1006021202308 (научный, я знаю...) 5 км/ч или 500 м за 6 минут.
Мой метод:
Это также может быть полезно:
Как переместить маркер на 100 метров с координатами
Еще несколько!
Карты Google: с учетом точки, как найти все точки на заданной дистанции?
Это показывает, как найти все точки, а затем привязать к ближайшей улице.