masoud_urmia
پنج شنبه 02 بهمن 1393, 21:34 عصر
سلام دوستان اخیرا روی یک پروژه که برای ثبت میزان پیاده روی بود کار کردم و برای بدست اوردن فاصله بین دو نقطه جغرافیایی (Lat , Lng) از فرمول معرف زیر استفاده کردم
public double CalculationByDistance(GeoPoint StartP, GeoPoint EndP) { int Radius=6371;//radius of earth in Km
double lat1 = StartP.getLatitudeE6()/1E6;
double lat2 = EndP.getLatitudeE6()/1E6;
double lon1 = StartP.getLongitudeE6()/1E6;
double lon2 = EndP.getLongitudeE6()/1E6;
double dLat = Math.toRadians(lat2-lat1);
double dLon = Math.toRadians(lon2-lon1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2);
double c = 2 * Math.asin(Math.sqrt(a));
double valueResult= Radius*c;
double km=valueResult/1;
DecimalFormat newFormat = new DecimalFormat("####");
kmInDec = Integer.valueOf(newFormat.format(km));
meter=valueResult%1000;
meterInDec= Integer.valueOf(newFormat.format(meter));
Log.i("Radius Value",""+valueResult+" KM "+kmInDec+" Meter "+meterInDec);
return Radius * c; }
اما مشکلی که هست اینه که مثلا یک مسیر مستقیم رو میرم و بعد از محاسبه میگه 270 متر ، بعد همون مسیر رو دقیقا بر می گردم میگه 340 متر به نظرتون اشکال از چی میتونه باشه ؟ آیا خود گوگل ابزاری برای محاسبه فاصله برای برنامه نویسان اندروید تعبیه کرده؟
public double CalculationByDistance(GeoPoint StartP, GeoPoint EndP) { int Radius=6371;//radius of earth in Km
double lat1 = StartP.getLatitudeE6()/1E6;
double lat2 = EndP.getLatitudeE6()/1E6;
double lon1 = StartP.getLongitudeE6()/1E6;
double lon2 = EndP.getLongitudeE6()/1E6;
double dLat = Math.toRadians(lat2-lat1);
double dLon = Math.toRadians(lon2-lon1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2);
double c = 2 * Math.asin(Math.sqrt(a));
double valueResult= Radius*c;
double km=valueResult/1;
DecimalFormat newFormat = new DecimalFormat("####");
kmInDec = Integer.valueOf(newFormat.format(km));
meter=valueResult%1000;
meterInDec= Integer.valueOf(newFormat.format(meter));
Log.i("Radius Value",""+valueResult+" KM "+kmInDec+" Meter "+meterInDec);
return Radius * c; }
اما مشکلی که هست اینه که مثلا یک مسیر مستقیم رو میرم و بعد از محاسبه میگه 270 متر ، بعد همون مسیر رو دقیقا بر می گردم میگه 340 متر به نظرتون اشکال از چی میتونه باشه ؟ آیا خود گوگل ابزاری برای محاسبه فاصله برای برنامه نویسان اندروید تعبیه کرده؟