GeodeticsPlugin
The functionality described in this article is not available in the Community SDK edition.
You should upgrade to- Engineering / Sim
SDK edition to use it.
You should upgrade to
A world created in Unigine uses Cartesian coordinates, whereas real-world simulators normally use geospatial data. To make these two universes match, UNIGINE provides GeodeticsPlugin.
This plugin allows translating GPS latitude, longitude, and altitude coordinates to X, Y, and Z and vice versa. The solution is applicable for both flat rectangular terrain areas and the planet-shaped Terrain Global.
See also#
- GeodeticsTransformer class
Launching GeodeticsPlugin#
To use GeodeticsPlugin, specify the extern_plugin command line option on the application start-up:
main_x64 -extern_plugin "UnigineGeodetics"
Using GeodeticsPlugin#
Here is an example code that illustrates how to position an object in a world using geodetic coordinates:
#include <UnigineGeodeticsTransformer.h>
void init()
{
auto transformer = GeodeticsTransformer::get();
if (!transformer)
{
Log::warning("Can't get transformer\n");
return 0;
}
int epsg_code = 3857; // EPSG Geodetic Parameter Datase code
dvec3 geodetic_origin = dvec3_zero;
dvec3 original_geo_pos = dvec3(35.105580, -89.966775, 0.0);
dvec3 world_pos, geo_pos;
// setup projection
transformer->setProjectionEpsg(epsg_code, geodetic_origin);
// geodetic to world
world_pos = transformer->geodeticToWorld(original_geo_pos).getTranslate();
// world to geodetic
geo_pos = transformer->worldToGeodetic(world_pos);
Log::message("original geo_pos %f %f %f \n", original_geo_pos.x, original_geo_pos.y, original_geo_pos.z);
Log::message("world_pos %f %f %f \n", world_pos.x, world_pos.y, world_pos.z);
Log::message("geo_pos %f %f %f \n", geo_pos.x, geo_pos.y, geo_pos.z);
}
Last update:
2024-04-19
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)