Creating a Google Earth-like Application in Unreal Engine with Cesium and Metadata Integration

Hello everyone,

I’m working on a project to create something similar to Google Earth using Cesium for Unreal Engine, and I would greatly appreciate any guidance, suggestions, or pointers. My primary goals are to create a realistic 3D globe while integrating metadata such as city names, borders, and other geographic details for an offline version or through a local server using pre-downloaded data. Below is an outline of what I am trying to achieve and where I could use help:


What I’m Trying to Achieve:

  1. Base Layer:

    • A realistic globe with satellite imagery (raster tiles) and terrain elevation using Cesium.
  2. Metadata Integration:

    • Adding metadata like city names, country/state borders, and other relevant features.
    • Displaying this data as overlays, labels, or interactive elements.
  3. Offline Capability:

    • Using OpenStreetMap (OSM) data (downloaded in .osm.pbf format) to stream metadata locally.
    • Running a local server to serve this data, either as vector tiles or other formats.
  4. Vector Tiles:

    • Exploring the use of vector tiles for better control over styling and zoom-dependent level of detail.
    • Streaming or rendering vector tiles dynamically over the globe.

What I’ve Done So Far:

  • I have downloaded .osm.pbf data from OpenStreetMap.
  • I’ve set up a basic globe using the Cesium plugin in Unreal Engine, including terrain and raster imagery.
  • I’m familiar with setting up local tile servers like TileServer GL and MapTiler for serving OSM data, but I need help integrating this with Cesium in Unreal.

Challenges I’m Facing:

  1. Integrating Vector Tiles in Unreal Engine:

    • I need a way to dynamically load and render vector tiles (e.g., .pbf files) in Unreal, preferably using the Cesium plugin.
  2. Metadata Visualization:

    • How to overlay metadata like city labels, roads, and borders on the Cesium globe.
    • Ensuring accurate placement and alignment of vector data on a 3D globe.
  3. Offline Workflow:

    • Setting up an efficient workflow to fetch and serve OSM data offline.
    • Ensuring smooth performance and manageable file sizes for offline use.
  4. Performance Optimization:

    • Handling the rendering of large datasets (e.g., dense urban areas) without performance drops in Unreal.

What I Need Help With:

  1. Suggestions for Vector Tile Integration:

    • Are there Unreal-compatible libraries or workflows for rendering vector tiles (like roads and borders) over Cesium terrain?
    • Any examples or tutorials for rendering vector tile data procedurally in Unreal?
  2. Best Way to Serve OSM Data Locally:

    • Should I continue with TileServer GL, or are there better tools for generating and serving vector or raster tiles locally?
  3. Metadata Display and Interaction:

    • How can I use OSM or vector tile metadata (e.g., city names) to create UI popups or overlays in Unreal?
  4. General Guidance:

    • Any suggestions for workflows, tools, or approaches to achieve this goal.
    • If you’ve worked on similar projects, what challenges should I watch out for?

Additional Context:

  • The project does not require real-time data updates—static data from OSM is sufficient.
  • I’m open to alternative solutions if they better achieve the desired results.
  • Performance and scalability are critical since this will involve a large amount of geographic data.

If anyone has experience with similar setups or has suggestions on tools, libraries, or approaches, I’d love to hear from you. Thank you in advance for your time and help!


I have some experience about GeoServer to share.

  1. GeoServer can publish shapefiles, one of the Vector Tiles, as Web Map Service(WMS), and Cesium for Unreal uses CesiumWebMapServiceRasterOverlay to load it.

  2. In GeoServer, You can define your own style such as the color and width of the border, the opacity of the filled area, etc , and set the desired Style while Publishing WMS.

  3. You can also use Geoserver to provide map service of multiple layers with the same workspace, and Cesium for Unreal RasterOverlay Component uses comma to overlay these layers with just one material Layer Key.

  4. GeoServer provides the Web Feature Service (WFS) along with WMS. WFS has many operations.Those operations can not only read the values of Features, but also modify them.Cesium for Unreal gets the Features of WFS by sending an HTTP request and parsing the returned xml.

  5. In GeoServer WFS, a GET request for spatial queries filtering by bounding box (BBOX) is supported. It is feasible to display the names of cities, countries, or roads based on their geographical location.

Thanks for your reply @pjiang9 , I tried your suggestion and it indeed let me render an overlay layer on top of the cesium globe. But it is running when the internet is connected on my device. Is there a way I could render these overlays offline?

Yes, there is a way. Install Geoserver on your local computer, and access its services by “http: localhost”. It is offline, no internet needed.

I did, the Geoserver is working offline indeed but cesium web map service raster overlay is not.