Gönderen Konu: Google maps iki nokta arası mesafe hesaplama  (Okunma sayısı 8863 defa)

Çevrimdışı armsistem

  • Kıdemli
  • ****
  • İleti: 447
Google maps iki nokta arası mesafe hesaplama
« : 17 Ocak 2012, 05:42:28 »
Arkadaşlar merhaba, google maps iki nokta arasındaki mesafeyi metre olarak öğrenebiliyoruz merak ettiğim nokta bu işin matematiksel formülü nasıldır.İnternette araştırdığımda net bir şey bulamadım. Yardımlarınız için teşekkür ederim.

Örnek :1.Nokta  42.26,3600       28.34,4800         2.Nokta 43.48,2500  27.45,0000          iki nokta arasında mesafe 45 KM. şeklinde bir formül arıyorum.

Çevrimdışı bocek

  • Kıdemli
  • ****
  • İleti: 340
1 ya da 0. işte 'bit'ün mesele..

Çevrimdışı cicjoe

  • Kıdemli
  • ****
  • İleti: 341
  • DEU CE // Izmir
Ynt: Google maps iki nokta arası mesafe hesaplama
« Yanıtla #2 : 17 Ocak 2012, 06:09:50 »
hocam dogrudan 2 nokta arasini enlem ve boylam farklarindan olcmek mumkun olsada google maps karayollari uzerinden weighted graph kullanarak en uygun yolu buluyor (en kisa değil). eger 2 nokta arasini kus ucusu olcecekseniz, boylamlarin daralma miktarini hesaplayan formullere bakmaniz lazim. enlemler sabit 111km. eger google maps gibi yapmak istiyorsaniz bence birakin google maps yapsin sizin yerinize. ornegin:

url ile koordinatlari iletin

gelen html icerisinden ilgili alani cekin
<div class="altroute-rcol altroute-info">
    <span>13.9 km</span>,
    <span>20 mins</span>
</div>
« Son Düzenleme: 17 Ocak 2012, 06:12:22 Gönderen: cicjoe »

Çevrimdışı OptimusPrime

  • Emektar
  • *****
  • İleti: 608
Ynt: Google maps iki nokta arası mesafe hesaplama
« Yanıtla #3 : 17 Ocak 2012, 06:15:00 »
2 koordinat arası mesafe haversine denilen yöntem ile bulunuyor...

Çevrimdışı armsistem

  • Kıdemli
  • ****
  • İleti: 447
Ynt: Google maps iki nokta arası mesafe hesaplama
« Yanıtla #4 : 17 Ocak 2012, 06:35:39 »
Teşekkürler.

Çevrimdışı armsistem

  • Kıdemli
  • ****
  • İleti: 447
Ynt: Google maps iki nokta arası mesafe hesaplama
« Yanıtla #5 : 17 Ocak 2012, 07:59:15 »
Gelen Html'den veriyi nasıl çekebilirim.

Çevrimdışı erolcalisgan

  • Müdavim
  • ***
  • İleti: 50
Ynt: Google maps iki nokta arası mesafe hesaplama
« Yanıtla #6 : 17 Ocak 2012, 11:37:49 »
merhaba,
daha önceden c# ile yazmış olduğum kod
Kod: [Seç]
 double C_RADIUS_EARTH_KM = 6371.1;
       double C_RADIUS_EARTH_MI= 3958.82;
       double C_PI = 3.14159265358979;
       double GreatCircleDistance(double Latitude1, double Longitude1,
                     double Latitude2, double Longitude2, bool ValuesAsDecimalDegrees,
                     bool ResultAsMiles)
       {
            double Lat1;
            double Lat2;
            double Long1;
            double Long2;
            long X;
             double Delta;

            if (ValuesAsDecimalDegrees ==true)
                X = 1;
            else
                X = 24;
           
            // convert to decimal degrees
            Lat1 = Latitude1 * X;
            Long1 = Longitude1 * X;
            Lat2 = Latitude2 * X;
            Long2 = Longitude2 * X;
           
           // convert to radians: radians = (degrees/180) * PI
            Lat1 = (Lat1 / 180) * C_PI;
            Lat2 = (Lat2 / 180) * C_PI;
            Long1 = (Long1 / 180) * C_PI;
            Long2 = (Long2 / 180) * C_PI;
           // get the central spherical angle

            Delta = (2 * Math.Asin(Math.Sqrt((Math.Pow(Math.Sin((Lat1 - Lat2) / 2), 2) + Math.Cos(Lat1) * Math.Cos(Lat2) * (Math.Pow(Math.Sin((Long1 - Long2) / 2), 2))))));
               
            if( ResultAsMiles ==true)
                return( Delta * C_RADIUS_EARTH_MI);
            else
               return(Delta * C_RADIUS_EARTH_KM);
                       
       
       }



eroool

Çevrimdışı muhittin_kaplan

  • Profesyonel Üye
  • *****
  • İleti: 6494
    • Olmaz dediğimiz iş bitmek üzere.
Ynt: Google maps iki nokta arası mesafe hesaplama
« Yanıtla #7 : 17 Ocak 2012, 12:45:28 »
verdiğiniz kod birçok kişinin işine yarayacak.
www.muhittinkaplan.com -Araştırmacı Programcı-----basitliği yakalamak dahilerin işi---"

Çevrimdışı iyildirim

  • Emektar
  • *****
  • İleti: 827
Ynt: Google maps iki nokta arası mesafe hesaplama
« Yanıtla #8 : 17 Ocak 2012, 13:21:12 »
Bende de bunlar varmış.

Kodları nerelerden topladığımı hatırlamıyorum, ama hepsi alıntıdır. Yaptıysam sadece hesapları kısaltacak düzenlemeler yapmışımdır.

İki koordinat arası mesafenin yanısıra, Heading, verilen heading ve mesafe ile gidilecek koordinat hesapları gibi extraları da  var.

Yönü bilinen nesneyi yakalama gibi şeylerde vardı. Bulursam eklerim. Anti füze sistemleri  yapmak isteyen olur belki.

Kod: [Seç]

double R_EARTH = 6371000;
double ROPE = 6371000;  //radius of earth 6371 KM
double deg2rad = 0.0174532925199433;
double rad2deg = 57.2957795130823;


double calcDistance(double degLAT1, double degLON1, double degLAT2, double degLON2)
{
   //The haversine formula ‘remains particularly well-conditioned for numerical computation even at small distances’ – unlike calculations based on the spherical law of cosines.
   //The 'versed sine' is 1-cos?, and the ‘half-versed-sine’ (1-cos?)/2 = sin²(?/2) as used above.

   double radLAT1, radLAT2;
// double radLON1, radLON2;
   
   double deltaLATrad;
   double deltaLONdeg, deltaLONrad;
   
   double sinDeltaLAT, sinDeltaLON;
   double a, d;

   radLAT1 = degLAT1 * deg2rad;
   radLAT2 = degLAT2 * deg2rad;
   

   deltaLATrad = radLAT1 - radLAT2;

   deltaLONdeg = degLON2 - degLON1;
   deltaLONrad = deltaLONdeg * deg2rad;

   sinDeltaLAT = sin(deltaLATrad);
   sinDeltaLON = sin(deltaLONrad);

   a = sinDeltaLAT * sinDeltaLAT + cos(radLAT1) * cos(radLAT2) * sinDeltaLON * sinDeltaLON;
   d = (2 * atan2(sqrt(a), sqrt(1-a))) * ROPE;

   return d;


}

double calcDistance2(double degLAT1, double degLON1, double degLAT2, double degLON2)   //returns meters
{
   //Spherical Law of Cosines


   double radLAT1, radLAT2;
   double deltaLONdeg, deltaLONrad;
   double d;

   radLAT1 = degLAT1 * deg2rad;
   radLAT2 = degLAT2 * deg2rad;
   

   deltaLONdeg = degLON2 - degLON1;
   deltaLONrad = deltaLONdeg * deg2rad;

   d = acos(sin(radLAT1) * sin(radLAT2) + cos(radLAT1) * cos(radLAT2) * cos(deltaLONrad)) * ROPE;

   return d;


}

double calcHeading(double degLAT1, double degLON1, double degLAT2, double degLON2)  //returns radian
{

   double radLAT1, radLAT2;
// double radLON1, radLON2;
   
   double deltaLATrad;
   double deltaLONdeg, deltaLONrad;
   
   double sinDeltaLON;

   double x, y;
   
   double bearing;

   radLAT1 = degLAT1 * deg2rad;
   radLAT2 = degLAT2 * deg2rad;
   

   deltaLATrad = radLAT1 - radLAT2;

   deltaLONdeg = degLON2 - degLON1;
   deltaLONrad = deltaLONdeg * deg2rad;

// sinDeltaLAT = sin(deltaLATrad)
   sinDeltaLON = sin(deltaLONrad);



   y = sin(deltaLONrad) * cos(radLAT2);
   x = cos(radLAT1) * sin(radLAT2) - sin(radLAT1) * cos(radLAT2) * cos(deltaLONrad);

   bearing = atan2(y, x);

   return bearing;

}

double radian2degree(double degvar)
{
   return degvar * rad2deg;
}

double degree2radian(double radvar)
{
   return radvar * deg2rad;
}






/**********************************************************************************************/
/**********************************************************************************************/
double GetHeading(double lat1, double lat2, double lon1, double lon2)
{
    double angle;
    angle = atan2(sin(lon2-lon1)*cos(lat2),cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1));
    return(angle);
}

double GetDistance(double lat1, double lat2, double lon1, double lon2)
{
    double d;
    d = acos((sin(lat1)*sin(lat2))+(cos(lat1)*cos(lat2)*cos(lon2-lon1)))*R_EARTH;
    return d;
}

double GetCTE(double current_lat, double current_lon, double dest_lat, double dest_lon, double track_angle)
{
    double cte, dist, bearing;
    dist = GetDistance(current_lat,dest_lat,current_lon, dest_lon);
    bearing = GetHeading(current_lat,dest_lat,current_lon, dest_lon);
    cte = asin(sin(dist/R_EARTH)*sin(bearing-track_angle)) * R_EARTH;
    return cte;
}

void GetPosWHdngDist(double lat1, double lon1, double hdng, double dist, double *new_lat, double *new_long)
{
    (*new_lat) = asin(sin(lat1)*cos(dist/R_EARTH) + cos(lat1)*sin(dist/R_EARTH)*cos(hdng));
     (*new_long) = lon1 + atan2((sin(hdng)*sin(dist/R_EARTH)*cos(lat1)), (cos(dist/R_EARTH)-sin(lat1)*sin(*new_lat)));
}


Çevrimdışı armsistem

  • Kıdemli
  • ****
  • İleti: 447
Ynt: Google maps iki nokta arası mesafe hesaplama
« Yanıtla #9 : 18 Ocak 2012, 11:53:03 »
Katılım ve yanıtlar için teşekkür ederim.