اذهب إلى المحتوى
  • 0

حساب اقصر مسافة باستخدام خدمات  google maps api

Zeina Almakdisi

السؤال

مرحبا

أعمل على حساب اقصر مسافة باستخدام خدمات  google maps api

نجحت في إيجاد المسافة بين موقعي والمراكز 

ما احتاجه هو استخراج المسافة الاقصر distance

جزء الشيفرة المسؤول :

<script>
function callback(response, status) {
  if (status == 'OK') {
    var origins = response.originAddresses;
    var destinations = response.destinationAddresses;

    for (var i = 0; i < origins.length; i++) {
      var results = response.rows[i].elements;
      for (var j = 0; j < results.length; j++) {
        var element = results[j];
        var distance = element.distance.text;/////// مااحتاجه هو استخراج اصغر قيمة 
        var duration = element.duration.text;
        var from = origins[i];
        var to = destinations[j];
      } }  }
    }}
</script>
  </head>
  <body>
    <div id="container">
      <div id="map"></div>
      <div id="sidebar">
        <h3 style="flex-grow: 0">Request</h3>
        <pre style="flex-grow: 1" id="request"></pre>
        <h3 style="flex-grow: 0">Response</h3>
        <pre style="flex-grow: 1" id="response"></pre>
      </div>
    </div>
    

 

الخرج في المتصفح: 

tt.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ 50 دقائق مضت قال Sam Ahw:

يمكنك البحث عن أصغر قيمة ضمن مصفوفة elements للوصول إلى المسافة الأقصر باستخدام الدالة reduce كالتالي:

elements.reduce(function(prev, curr) {
    return prev.distance.text < curr.distance.text ? prev : curr;
});
                                        
أو بشكل مختصر:
                                        
(prev, curr) => prev.distance.text < curr.distance.text ? prev : curr

ولكن قبل ذلك بما أن القيمة هي سلسلة نصية وفيها الواحدة km يجب عليك إجراء التحويل اللازم باستخدام الدالة map مثلاً:

const elements = elements.map(x => x.distance.text = x.distance.text.split(" ")[0]);

ونظراً للواحدة km، في حال كان الخرج من الممكن أن يحوي واحدات قياس أخرى أصغر منها مثل m، فيمكنك استخدام طرق أخرى لفحص الواحدة والقيام بالتحويل اللازم حسب الشروط (باستخدام if أو switch أو غيرها) أو يمكنك الاعتماد على المدّة الزمنية duration بدلاً من المسافة لتسهيل العمل في حال كان مشروعك يتطلب فقط الطريق الأقرب بدلاً من الأقصر طولاً.

هذه فكرة الحل العامة، قد يختلف التطبيق حسب لغات وأطر العمل التي يتم استخدامها في مشروعك كونه لا يوجد تفاصيل إضافية عن المشروع.

شكرا لك

لكن حاولت كثيرا ويعيد نفس الخطأ

Uncaught ReferenceError: elements is not defined

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يمكنك البحث عن أصغر قيمة ضمن مصفوفة elements للوصول إلى المسافة الأقصر باستخدام الدالة reduce كالتالي:

elements.reduce(function(prev, curr) {
    return prev.distance.text < curr.distance.text ? prev : curr;
});
                                        
أو بشكل مختصر:
                                        
(prev, curr) => prev.distance.text < curr.distance.text ? prev : curr

ولكن قبل ذلك بما أن القيمة هي سلسلة نصية وفيها الواحدة km يجب عليك إجراء التحويل اللازم باستخدام الدالة map مثلاً:

const elements = elements.map(x => x.distance.text = x.distance.text.split(" ")[0]);

ونظراً للواحدة km، في حال كان الخرج من الممكن أن يحوي واحدات قياس أخرى أصغر منها مثل m، فيمكنك استخدام طرق أخرى لفحص الواحدة والقيام بالتحويل اللازم حسب الشروط (باستخدام if أو switch أو غيرها) أو يمكنك الاعتماد على المدّة الزمنية duration بدلاً من المسافة لتسهيل العمل في حال كان مشروعك يتطلب فقط الطريق الأقرب بدلاً من الأقصر طولاً.

هذه فكرة الحل العامة، قد يختلف التطبيق حسب لغات وأطر العمل التي يتم استخدامها في مشروعك كونه لا يوجد تفاصيل إضافية عن المشروع.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 دقيقة مضت قال Zeina Almakdisi:

شكرا لك

لكن حاولت كثيرا ويعيد نفس الخطأ

Uncaught ReferenceError: elements is not defined

elements هو جزء من الخرج وليس متغيّر عام، أنا وضعته فقط لسهولة توضيح المثال ولكن يجب عليك الوصول لقيمته الفعلية من خلال الرد response الذي يأتي من API، ومن الصورة المرفقة والشيفرة أصبحت قيمته موجودة لديك ضمن المتغيّر results:

var results = response.rows[i].elements;

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...