Самый простой способ сделать это - сделать GeographicLib
доступным по всему миру:
В конце файла geographiclib.js измените
window.GeographicLib = geo;
до
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.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 = {};
/*
* Geodesic routines from GeographicLib translated to JavaScript. See
* https://geographiclib.sourceforge.io/html/js/
и в конце изменения файла
} else {
/******** otherwise just pollute our global namespace ********/
window.GeographicLib = geo;
}
});
до
} else if (typeof window === 'object') {
/******** otherwise just pollute our global namespace ********/
window.GeographicLib = geo;
}
});
и тогда ваш main.qml будет работать нормально.