讓我給你的代碼,計算在Javascript中;所有這一切都在Google地圖代碼中進行,但計算距離的功能僅僅是一項功能,而不是一項服務。 (我不知道是誰寫的功能)
你的問題是有一個PHP函數,對不對?毫無疑問,您可以將JavaScript函數轉換爲PHP;或者你只需要相信javascript中的計算並使用Ajax發送結果。
該代碼繪製了一個Circle(center = Brussels; radius = 30km)和4個標記。你可以拖動它們全部。 點擊按鈕觸發計算。 我通過將標記轉爲綠色或紅色來顯示結果。
(你知道如何從這裏接手?)
<style>
#map-canvas {
height: 400px;
margin: 0px;
padding: 0px;
}
</style>
<div id="map-canvas"></div>
<input type="button" id="start" value="Click">
<p>Drag the circle, drag the markers; when you click the button it will calculate if the markers are in the circle</p>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?"></script>
<script>
function initialize() {
// settings
var center = new google.maps.LatLng(50.84546, 4.357112);
var radius_circle = 30000; // 30km
var markerPositions = [
{lat: 50.940749, lng: 4.2033035},
{lat: 50.791671, lng: 4.587825},
{lat: 50.66649, lng: 3.945124},
{lat: 50.429139, lng: 4.813044}
];
var markers=[];
// draw map
var mapOptions = {
center: center,
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var circle = drawCircle(mapOptions.center, radius_circle);
// markers
for (var i=0; i<markerPositions.length; i++) {
markers.push(
new google.maps.Marker({
position: new google.maps.LatLng(markerPositions[i].lat, markerPositions[i].lng),
map: map,
draggable: true
})
);
}
// client clicks on button, we will check for the markers within the circle
google.maps.event.addDomListener(document.getElementById('start'), 'click', function() {
for (var i=0; i<markerPositions.length; i++) {
var distance = calculateDistance(
markers[i].getPosition().lat(),
markers[i].getPosition().lng(),
circle.getCenter().lat(),
circle.getCenter().lng(),
"K"
);
if (distance * 1000 < radius_circle) { // radius is in meter; distance in km
markers[i].setIcon('http://maps.gstatic.com/mapfiles/icon_green.png'); // make or find a better icon
}
else {
markers[i].setIcon('http://maps.gstatic.com/mapfiles/icon.png'); // make or find a better icon
}
}
});
function drawCircle(center, radius) {
return new google.maps.Circle({
strokeColor: '#0000FF',
strokeOpacity: 0.7,
strokeWeight: 1,
fillColor: '#0000FF',
fillOpacity: 0.15,
draggable: true,
map: map,
center: center,
radius: radius
});
}
function calculateDistance(lat1, lon1, lat2, lon2, unit) {
var radlat1 = Math.PI * lat1/180;
var radlat2 = Math.PI * lat2/180;
var radlon1 = Math.PI * lon1/180;
var radlon2 = Math.PI * lon2/180;
var theta = lon1-lon2;
var radtheta = Math.PI * theta/180;
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
dist = Math.acos(dist);
dist = dist * 180/Math.PI;
dist = dist * 60 * 1.1515;
if (unit=="K") { dist = dist * 1.609344; }
if (unit=="N") { dist = dist * 0.8684; }
return dist;
}
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
非常感謝你:) – micutzuclau 2014-11-03 14:49:48