如何定义google.maps.geometry?

Yin*_*ang 8 javascript asynchronous google-maps-api-3 requirejs

我正在使用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;
}); 
Run Code Online (Sandbox Code Playgroud)

即使在使用优化器缩小代码之后,这在大多数情况下都能正常工作.但是,有时我会gmaps.geometry is undefined在一个模块中出现错误,该模块具有gmaps依赖关系并尝试计算距离:

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);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

只有当我尝试calcDistance在页面之后执行并且所需数据已加载且有时仅执行时,才会发生这种情况.我想这是gmaps异步加载的一些问题,但我不完全理解它.如何定义gmaps但gmaps.geometry未定义?有没有什么办法解决这一问题?

Har*_*Das 13

看来你没有加载正确的库.只需附加&libraries=geometry到图书馆网址即可.

检查此 google.maps.geometry.spherical错误


Yin*_*ang 2

packages:[geometry]似乎不像我想象的那样工作,所以几何图形根本没有加载。谷歌似乎在某个时刻内部加载几何图形,因此我的距离计算代码在大多数情况下都有效。我通过将模块的定义调用更改gmaps为:

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