最简单的方法是在全局范围内提供GeographicLib
:
在geographiclib.js文件结尾处更改:
window.GeographicLib = geo;
to
this.GeographicLib = geo;
然后你就可以直接使用:
main.qml:
import QtQuick 2.12
import QtQuick.Window 2.12
import "geographiclib.js" as ThenItWillBeAvailableGlobally
Window {
visible: true
width: 640
height: 480
Component.onCompleted: {
var Geodesic = GeographicLib.Geodesic,
DMS = GeographicLib.DMS,
geod = Geodesic.WGS84;
var r = geod.Inverse(23, 22, 44, 29);
console.log("distance is: ", JSON.stringify(r))
}
}
导致:
qml: distance is: {"lat1":23,"lat2":44,"lon1":22,"lon2":29,"a12":21.754466225665134,"s12":2416081.7576307985,"azi1":13.736139413215236,"azi2":17.669059640534535}
如果您不想更改geographiclib.js文件,您可以添加一个全局的window对象,例如:
window.js:
this.window = this;
然后使用:
import QtQuick 2.12
import QtQuick.Window 2.12
import "window.js" as ThenWindowWillBeAvailableGlobally
import "geographiclib.js" as ThenGeographicLibWillBeAvailableGlobally
Window {
visible: true
width: 640
height: 480
Component.onCompleted: {
var Geodesic = GeographicLib.Geodesic,
DMS = GeographicLib.DMS,
geod = Geodesic.WGS84;
var r = geod.Inverse(23, 22, 44, 29);
console.log("distance is: ", JSON.stringify(r))
}
}
如果您不想添加任何全局变量,但是愿意编辑
geographiclib.js文件,那么您可以将第68行移到文件顶部:
var GeographicLib = {};
并在文件末尾进行更改
} else {
window.GeographicLib = geo;
}
});
to
} else if (typeof window === 'object') {
window.GeographicLib = geo;
}
});
然后你的main.qml就能正常工作了。