簡體   English   中英

如何定義google.maps.geometry?

[英]How can google.maps.geometry be undefined?

我正在使用Google Maps Javascript API v3和RequireJS編寫JavaScript應用程序。 我為gmaps編寫了一個小包裝器,以便正確地獲取依賴關系:

define('gmaps', ['goog!maps,3.9,packages:[geometry],language:de,other_params:sensor=false&channel=...&client=...'],
function(){
    return window.google.maps;
}); 

即使在使用優化器縮小代碼之后,這在大多數情況下都能正常工作。 但是,有時我得到一個錯誤,說gmaps.geometry is undefinedgmaps作為依賴項的模塊中gmaps.geometry is undefined ,並嘗試計算距離:

define(['gmaps'], function(gmaps) {
    return {
        ...
        calcDistance: function(target) {
            var position = this.getPosition();
            var distance = gmaps.geometry.spherical.computeDistanceBetween(
                new gmaps.LatLng(position.latitude, position.longitude),
                new gmaps.LatLng(target.latitude, target.longitude)
            );
            return (distance / 1000).toFixed(2);
        }
    }
});

只有當我嘗試在頁面之后執行calcDistance並且所需數據已加載且有時僅執行時,才會發生這種情況。 我想這是gmaps異步加載的一些問題,但我不完全理解它。 如何定義gmaps但gmaps.geometry未定義? 有沒有什么辦法解決這一問題?

看來你沒有加載正確的庫。 只需在庫url中附加&libraries=geometry

檢查此google.maps.geometry.spherical錯誤

packages:[geometry]似乎沒有像我想象的那樣工作,因此幾何體根本沒有加載。 Google似乎在某些時候在內部加載幾何體,因此我的距離計算代碼在大多數情況下都有效。 我通過將我的gmaps模塊的define調用更改為:

define('gmaps', ['goog!maps,3.9,language:de,other_params:libraries=geometry&sensor=false&channel=...&client=...'],
function(){
    return window.google.maps;
});

我知道這是一個老問題,但在我的情況下,我看到幾何庫在初始化時不可用。 我不知道為什么。 但它在一段時間后就被定義了。 所以我使用wait函數解決了這個問題。

setTimeout(waitForGeometryLibraries, 250);  

function waitForGeometryLibraries(){
    if(typeof google.maps.geometry !== "undefined"){
     // code using geometry library
    }
    else{
        setTimeout(waitForGeometryLibraries, 250);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM