PDA

View Full Version : سوال: نحوه محاسبه فاصله زمینی دو نقطه بر روی google map به کیلومتر ؟



jaykob
دوشنبه 05 مرداد 1394, 19:30 عصر
سلام


من نیاز دارم فاصله دو نقطه در google map به صورت زمینی ( نحوه محاسبه فاصله هوایی را پیدا کردم ) را در برنامه asp.net mvc خودم به دست بیارم . یعنی از ماشینی از نقطه a به نقطه b بخواهد برود و از خیابان های مناسبی رد بشه چند کیلومتر می شه ؟

ممنون می شم راهنمایی کنید

HOSSEINONLINE7
پنج شنبه 08 مرداد 1394, 12:42 عصر
سلام


من نیاز دارم فاصله دو نقطه در google map به صورت زمینی ( نحوه محاسبه فاصله هوایی را پیدا کردم ) را در برنامه asp.net mvc خودم به دست بیارم . یعنی از ماشینی از نقطه a به نقطه b بخواهد برود و از خیابان های مناسبی رد بشه چند کیلومتر می شه ؟

ممنون می شم راهنمایی کنید

سلام از این تابع استفاده کنید :

function calcMeter(s_lat, s_lng, e_lat, e_lng){

var request = {
origin: s_lat + ',' + s_lng,
destination: e_lat + ',' + e_lng,
//waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);

var route = response.routes[0];
var routeKilometer = document.getElementById('DivRouteKilometer');
// For each route, display summary information.
for (var i = 0; i < route.legs.length; i++) {
route = route.legs[i].distance.text;
localStorage['route'] = route;
routeKilometer.innerHTML += '<b>مسیر رفت</b><br>'
routeKilometer.innerHTML += route;
}

}
});
}

jaykob
پنج شنبه 08 مرداد 1394, 14:39 عصر
سلام از این تابع استفاده کنید :

function calcMeter(s_lat, s_lng, e_lat, e_lng){

var request = {
origin: s_lat + ',' + s_lng,
destination: e_lat + ',' + e_lng,
//waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);

var route = response.routes[0];
var routeKilometer = document.getElementById('DivRouteKilometer');
// For each route, display summary information.
for (var i = 0; i < route.legs.length; i++) {
route = route.legs[i].distance.text;
localStorage['route'] = route;
routeKilometer.innerHTML += '<b>مسیر رفت</b><br>'
routeKilometer.innerHTML += route;
}

}
});
}

سلام

خیلی ممنون از پاسختون

اگر براتون مقدروه و زمان دارید یک لطفی در حق من بکنید از اول بگید من چطور از این تابع استفاده کنم و چطور ازش خروجی بگیرم . توی جاوا اسکریپت به شدت گیج هستم و ناشی ...

تشکر

IR-Developer
پنج شنبه 08 مرداد 1394, 19:58 عصر
-----------------------------------------------------------------------------------------------------------------

HOSSEINONLINE7
پنج شنبه 08 مرداد 1394, 20:00 عصر
سلام

خیلی ممنون از پاسختون

اگر براتون مقدروه و زمان دارید یک لطفی در حق من بکنید از اول بگید من چطور از این تابع استفاده کنم و چطور ازش خروجی بگیرم . توی جاوا اسکریپت به شدت گیج هستم و ناشی ...

تشکر

خوب ببینید خود نقشه گوگل که یک تابع Initialize داره که وظیفه ی لود اولیه نقشه را بر عهده داره . حالا این تابعی که نوشتم هم میاد طول و عرض جغرافیایی دو نقطه را میگیره و فاصله را به کیلومتر بر میگردونه و بعد با دستور localStorage['route'] = route; هم اومدم توی یک سشن ریختمش تا جای دیگه نیاز داشتم ازش استفاده کنم .

ورودی شما که مشخصه طول و عرض جغرافیایی 2 مسیر .

خروجی شما میشه همون متغیر route .

jaykob
پنج شنبه 08 مرداد 1394, 20:36 عصر
خوب ببینید خود نقشه گوگل که یک تابع Initialize داره که وظیفه ی لود اولیه نقشه را بر عهده داره . حالا این تابعی که نوشتم هم میاد طول و عرض جغرافیایی دو نقطه را میگیره و فاصله را به کیلومتر بر میگردونه و بعد با دستور localStorage['route'] = route; هم اومدم توی یک سشن ریختمش تا جای دیگه نیاز داشتم ازش استفاده کنم .

ورودی شما که مشخصه طول و عرض جغرافیایی 2 مسیر .

خروجی شما میشه همون متغیر route .

خیلی ممنون از شما

این تابع فاصله رو به صورت زمینی و با حساب اینکه یک ماشین از توی خیابان ها حرک کنه می ده دیگه ؟ چون خود گوگل به طور مثال خیابان های یکطرفه رو در نظر داره و ....

HOSSEINONLINE7
پنج شنبه 08 مرداد 1394, 21:05 عصر
بله این تابع هم مسیر Driving را حساب میکنه .

خواهش میکنم ...

HAMRAHSOFT.IR
پنج شنبه 08 مرداد 1394, 23:13 عصر
سلام امکان داره نمونه قرار بدببد؟

jaykob
شنبه 10 مرداد 1394, 21:31 عصر
خوب ببینید خود نقشه گوگل که یک تابع Initialize داره که وظیفه ی لود اولیه نقشه را بر عهده داره . حالا این تابعی که نوشتم هم میاد طول و عرض جغرافیایی دو نقطه را میگیره و فاصله را به کیلومتر بر میگردونه و بعد با دستور localStorage['route'] = route; هم اومدم توی یک سشن ریختمش تا جای دیگه نیاز داشتم ازش استفاده کنم .

ورودی شما که مشخصه طول و عرض جغرافیایی 2 مسیر .

خروجی شما میشه همون متغیر route .


سلام

عذر می خوام من هر چی سعی می کنم نمی دونم چطور باید طول و عرض رو روی نقشه مشخص کنم که به تابع شما پاس بدم . یعنی می خوام یک نقطه که خانه کاربر هست از دیتابیس بخونه و روی نقشه مشخص باشه و نقطه دیگه رو خودش با کلیک روی نقشه مشخص کنه و به تابع شما بدیم تا خروجی رو به کیلومتر بگیریم ...

خیلی واجبه ممنون می شم بفرمایید چطور این کارو بکنم و با توجه به ناشی بودن من توی این زمینه لطف کدش رو هم برام بزارید یک دنیا ممنون می شم ...

تشکر

HOSSEINONLINE7
شنبه 10 مرداد 1394, 22:57 عصر
سلام

عذر می خوام من هر چی سعی می کنم نمی دونم چطور باید طول و عرض رو روی نقشه مشخص کنم که به تابع شما پاس بدم . یعنی می خوام یک نقطه که خانه کاربر هست از دیتابیس بخونه و روی نقشه مشخص باشه و نقطه دیگه رو خودش با کلیک روی نقشه مشخص کنه و به تابع شما بدیم تا خروجی رو به کیلومتر بگیریم ...

خیلی واجبه ممنون می شم بفرمایید چطور این کارو بکنم و با توجه به ناشی بودن من توی این زمینه لطف کدش رو هم برام بزارید یک دنیا ممنون می شم ...

تشکر

این تابع موقعی که رویداد کلیک روی نقشه اتفاق بیفته اجرا میشه و یک محل را مارک میکنه :

function placeMarker(pos, map) {
if (oldMarkers && oldMarkers.length !== 0) {
for (var i = 0; i < oldMarkers.length; ++i) {
oldMarkers[i].setMap(null);
}
}
if (oldiw && oldiw.length !== 0) {
for (var i = 0; i < oldiw.length; ++i) {
oldiw[i].setMap(null);
}
}
oldMarkers = [];
oldiw = [];
var g = google.maps;
var marker = new g.Marker({
position: pos,
map: map
});

oldMarkers.push(marker);
var iw = new g.InfoWindow();
var cont = "مکان انتخابی شما";
iw.setOptions({ content: cont, position: pos, pixelOffset: new g.Size(0, -22) });
iw.open(map);
map.panTo(pos);
oldiw.push(iw);
localStorage['lat'] = pos.lat();
localStorage['lng'] = pos.lng();
calcRoute();
calcBackRoute();
calcMeter();
};


حالا برای فراخوانی رویداد بالا باید Initialize به شکل زیر نوشته بشه که وقتی کلیکی روی نقشه انجام شد به تابع بالا بره و عملیات مارک نقطه انجام بشه :

function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
var latlngPos = new google.maps.LatLng(32.646705, 51.668463);
var mapProp = {
center: latlngPos,
zoom: 13,
minZoom: 13,
maxZoom: 19,
mapTypeId: google.maps.MapTypeId.ROADMAP,
panControl: true
};
var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
//var mapBack = new google.maps.Map(document.getElementById("googleMapBack"), mapProp);
//placeMarker(e.latLng, mapBack);
google.maps.event.addListener(map, "click", function (e) {
placeMarker(e.latLng, map);
});
}

jaykob
شنبه 10 مرداد 1394, 23:29 عصر
سلام

خیلی ممنون بابت پاسخ

من الان فایلم به شکل زیر هستش اما هیچی توی صفحه لود نمی شه



<!DOCTYPE html>
<html>
<head>
<script src="http://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
var latlngPos = new google.maps.LatLng(32.646705, 51.668463);
var mapProp = {
center: latlngPos,
zoom: 13,
minZoom: 13,
maxZoom: 19,
mapTypeId: google.maps.MapTypeId.ROADMAP,
panControl: true
};
var map = new google.maps.Map(document.getElementById("googleMap "), mapProp);
//var mapBack = new google.maps.Map(document.getElementById("googleMap Back"), mapProp);
//placeMarker(e.latLng, mapBack);
google.maps.event.addListener(map, "click", function (e) {
placeMarker(e.latLng, map);
});
}
google.maps.event.addDomListener(window, 'load', initialize);

function placeMarker(pos, map) {
if (oldMarkers && oldMarkers.length !== 0) {
for (var i = 0; i < oldMarkers.length; ++i) {
oldMarkers[i].setMap(null);
}
}
if (oldiw && oldiw.length !== 0) {
for (var i = 0; i < oldiw.length; ++i) {
oldiw[i].setMap(null);
}
}
oldMarkers = [];
oldiw = [];
var g = google.maps;
var marker = new g.Marker({
position: pos,
map: map
});

oldMarkers.push(marker);
var iw = new g.InfoWindow();
var cont = "مکان انتخابی شما";
iw.setOptions({ content: cont, position: pos, pixelOffset: new g.Size(0, -22) });
iw.open(map);
map.panTo(pos);
oldiw.push(iw);
localStorage['lat'] = pos.lat();
localStorage['lng'] = pos.lng();
calcRoute();
calcBackRoute();
calcMeter();
};

function calcMeter(s_lat, s_lng, e_lat, e_lng){

var request = {
origin: s_lat + ',' + s_lng,
destination: e_lat + ',' + e_lng,
//waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);

var route = response.routes[0];
var routeKilometer = document.getElementById('DivRouteKilometer');
// For each route, display summary information.
for (var i = 0; i < route.legs.length; i++) {
route = route.legs[i].distance.text;
localStorage['route'] = route;
routeKilometer.innerHTML += '<b>مسیر رفت</b>'
routeKilometer.innerHTML += route;
}

}
});
}
</script>




</head>

<body>
<div id="googleMap" style="width:500px;height:380px;"></div>
</body>

</html>



ممنون می شم بفرمایید مشکل از کجاست

HOSSEINONLINE7
یک شنبه 11 مرداد 1394, 00:51 صبح
اولش که باید یک Api Key از گوگل بگیرید تا مجوز استفاده از نقشه گوگل را داشته باشید . برای ساختنش سرچ کنید اموزشش هست .

لود نشدن نقشه هم بخاطر همینه .