Google Maps API - عدم تناسق GClientGeocoder باستخدام طريقة getLatLng؟

StackOverflow https://stackoverflow.com/questions/408444

  •  03-07-2019
  •  | 
  •  

سؤال

لقد لاحظت أن برنامج التشفير الجغرافي الخاص بي غير متسق في الكود الموضح أدناه لأنه قبل استدعاء طريقة "getLatLng" أعرض 10 مواقع صالحة، ولكن بعد هذا السطر من الكود، يختلف عدد النقاط التي تظهر فعليًا في كل مرة أقوم فيها بالبحث (نفس الشيء معايير البحث - لمعلوماتك) بين 5 و 10 بشكل عشوائي ..غريب جدا

هل لدى أي شخص مشاكل مماثلة لهذا؟إذا كان الأمر كذلك كيف قمت بحلها؟

geocoder = new GClientGeocoder();
geocoder.getLatLng(address, function(point) {
if (point) {
        var icon = new GIcon();
        var marker = new GMarker(point, { icon: icon });
        GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); });
        map.addOverlay(marker);
هل كانت مفيدة؟

المحلول 4

ولقد وجدت في الواقع أنه لم يكن رمز "التحقق من العنوان" الذي كان يسبب هذا التناقض، ولكن بدلا من ذلك - مجرد حقيقة أن المعهد خرائط لا تريد طن من ترميز المناطق الجغرافية يدعو حتى أضفت 225ms بسيطة المهلة المحددة بين كل طلب، وهذا لا حيلة

function preGeoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus) {
        addPreCount();

        //don't change this timeout as it was the lowest timeout that still worked w/ the api
        var timeout = parseInt(precount) * 225;

        window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
    }

نصائح أخرى

لقد رأيت هذا في تطبيق ASP.NET الخاص بي.كانت مشكلتي أنني كنت أتحقق من صحة العناوين قبل عرضها و

  1. بعض عناويني كانت غير صحيحة.

  2. يمكن لنظام التحقق من صحة العنوان الخاص بهم التعامل مع عدد معين فقط من الطلبات في كل مكالمة يجريها العميل.

من الأفضل مسح العناوين قبل الترميز الجغرافي (IMO).

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

امل ان يساعد.

وإعطائها مثل هذا، مثل هذا أحصل على أكثر من 34 نقطة مع شوط واحد:

function addAddress(address,runde) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        //alert(address + " not found");
        if (runde<5) { // rekursiv, try adress 5 times to get
            window.setTimeout(function() {addAddress(address,runde+1);}, 1000); // wait 1 second bevor next try
            }
      } else {
        var marker_add = new GMarker(point);
        //alert(marker.getLatLng());
        leftClick(0, marker_add.getLatLng()); // function, add marker to map
      }
    }
  );
}  

وأنا لست متأكدا ما يفعل addPreCount(). ولكن اعتقد انه من الواضح ان المهلة ينبغي أن يكون شيء من هذا القبيل المؤشر مضروبا في مهلة الفعلية ثابتة.

وحتى على افتراض ثابت مهلة محددة و225. المهلة لتمريرها إلى المجمع ترميز المناطق الجغرافية ستكون كما يلي:

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top