All Projects → w3reality → Three Geo

w3reality / Three Geo

Licence: mit
3D geographic visualization library

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Three Geo

Shadoweditor
Cross-platform 3D scene editor based on three.js, golang and mongodb for desktop and web. https://tengge1.github.io/ShadowEditor-examples/
Stars: ✭ 1,060 (+172.49%)
Mutual labels:  threejs, gis
Terrain Builder
🏔 Procedural terrain using Three.js and perlin noise, Now Accelerated by your GPU!
Stars: ✭ 228 (-41.39%)
Mutual labels:  threejs, terrain
Earthenterprise
Google Earth Enterprise - Open Source
Stars: ✭ 2,425 (+523.39%)
Mutual labels:  gis, terrain
3d Tiles
Specification for streaming massive heterogeneous 3D geospatial datasets 🌎
Stars: ✭ 1,054 (+170.95%)
Mutual labels:  gis, terrain
terrain
Create a 3d terrain with WebGL.
Stars: ✭ 43 (-88.95%)
Mutual labels:  threejs, terrain
leafmap
A Python package for interactive mapping and geospatial analysis with minimal coding in a Jupyter environment
Stars: ✭ 1,299 (+233.93%)
Mutual labels:  dataviz, gis
Ipyvolume
3d plotting for Python in the Jupyter notebook based on IPython widgets using WebGL
Stars: ✭ 1,696 (+335.99%)
Mutual labels:  threejs, dataviz
Cga.js
CGA 3D 计算几何算法库 | 3D Compute Geometry Algorithm Library webgl three.js babylon.js等任何库都可以使用
Stars: ✭ 313 (-19.54%)
Mutual labels:  threejs, gis
Three.terrain
A procedural terrain generation engine for use with the Three.js 3D graphics library for the web.
Stars: ✭ 353 (-9.25%)
Mutual labels:  threejs, terrain
ee extra
A ninja python package that unifies the Google Earth Engine ecosystem.
Stars: ✭ 42 (-89.2%)
Mutual labels:  dataviz, gis
g3d
Realtime WebGL rendering maps and big data visualizations based on MXFramework and Three.js.
Stars: ✭ 52 (-86.63%)
Mutual labels:  threejs, gis
3dtilesrendererjs
Renderer for 3D Tiles in Javascript using three.js
Stars: ✭ 333 (-14.4%)
Mutual labels:  threejs, terrain
Infinitetubes
A tunnel experiment in WebGL inspired by the effect seen on http://www.fornasetti.com/](Fornasetti.
Stars: ✭ 348 (-10.54%)
Mutual labels:  threejs
Fmm
Fast map matching, an open source framework in C++
Stars: ✭ 359 (-7.71%)
Mutual labels:  gis
Vue Vr
A framework for building VR applications with Vue
Stars: ✭ 348 (-10.54%)
Mutual labels:  threejs
Pythonfromspace
Python Examples for Remote Sensing
Stars: ✭ 344 (-11.57%)
Mutual labels:  gis
Aframe Physics System
Physics system for A-Frame VR, built on CANNON.js.
Stars: ✭ 371 (-4.63%)
Mutual labels:  threejs
Lottery
🎉🌟✨🎈年会抽奖程序,基于 Express + Three.js的 3D 球体抽奖程序,奖品🧧🎁,文字,图片,抽奖规则均可配置,😜抽奖人员信息Excel一键导入😍,抽奖结果Excel导出😎,给你的抽奖活动带来全新酷炫体验🚀🚀🚀
Stars: ✭ 363 (-6.68%)
Mutual labels:  threejs
Ideaspace
😎 Create interactive 3D and VR web experiences for desktop, mobile & VR devices
Stars: ✭ 344 (-11.57%)
Mutual labels:  threejs
Mapview
Interactive viewing of spatial data in R
Stars: ✭ 341 (-12.34%)
Mutual labels:  gis

three-geo

NPM MIT licensed CI

three-geo is a three.js based geographic visualization library. Using three-geo, we can easily build satellite-textured 3D terrain models in near real-time by simply specifying GPS coordinates anywhere on the globe. The geometry of the terrain is based on the RGB-encoded DEM (Digital Elevation Model) provided by the Mapbox Maps API.

The terrain is represented by standard THREE.Mesh objects. This makes it easy for us to access underlying geometry/texture array and perform original GIS (Geographic Information System) experiments in JavaScript. (See Usage for how to programatically obtain those mesh objects).

Credits: this library has been made possible thanks to

Demo

1) examples/geo-viewer (live | source code)

This demo app includes features such as

  • on-demand 3D terrain building (by a mouse click on the Leaflet map),
  • real-time camera projection onto Leaflet (with oritentaion and HFoV indication),
  • terrain interaction with a VR-like laser beam,
  • measuring Euclidean distances between terrain points,
  • auto camera orbiting around the custom z-axis.

Live:

2) examples/heightmaps (live | source code)

This demo illustrates the relationship between a reconstructed 3D terrain and its underlying satellite/DEM tiles.

image

3) examples/flat (live | source code)

How to get a flattened view of the terrain by post-editing the underlying geometry.

4) examples/projection (live | source code)

How to register a new 3D object on top of the terrain based on its geographic location [latitude, longitude, elevation].

Setup

Installation

$ npm i three-geo

Loading

Script tag: use ThreeGeo after

<script src="dist/three-geo.min.js"></script>

ES6:

import ThreeGeo from 'dist/three-geo.esm.js';

Usage

Here is an example of how to build a geographic terrain located at GPS coordinates (46.5763, 7.9904) in a 5 km radius circle. The terrain's satellite zoom resolution is set to 12. (The highest zoom value supported is 17.)

For standalone tests, use examples/simple-viewer (source code).

For use with NodeJS, do enable this useNodePixels option as well.

const tgeo = new ThreeGeo({
    tokenMapbox: '********', // <---- set your Mapbox API token here
});

const terrain = await tgeo.getTerrainRgb(
    [46.5763, 7.9904], // [lat, lng]
    5.0,               // radius of bounding circle (km)
    12);               // zoom resolution

const scene = new THREE.Scene();
scene.add(terrain);

const renderer = new THREE.WebGLRenderer({ canvas });
renderer.render(scene, camera);

image

Who is using three-geo?

API

In this section, we list three-geo's public API methods, where origin, radius, and zoom are parameters common to them:

  • origin Array<number> Center of the terrain represented as GPS coordinates [latitude, longitude].

  • radius number Radius of the circle that fits the terrain.

  • zoom number (integer) Satellite zoom resolution of the tiles in the terrain. Select from {11, 12, 13, 14, 15, 16, 17}, where 17 is the highest value supported. For a fixed radius, higher zoom resolution results in more tileset API calls.

ThreeGeo

  • constructor(opts={})

    Create a ThreeGeo instance with parameters.

    • opts.tokenMapbox="" string Mapbox API token. This must be provided.

    • opts.unitsSide=1.0 number The side length of the square that fits the terrain in WebGL space.

    • opts.useNodePixels=false boolean To use three-geo with NodeJS, you must explicitly set this option to true. [ Added in v1.4.3 ]

  • async getTerrainRgb(origin, radius, zoom) [ Added in v1.4 ]

    Return a THREE.Group object that represents a 3D surface of the terrain.

    The group object contains an Array<THREE.Mesh> as .children. Each mesh corresponds to a partial geometry of the terrain textured with satellite images.

  • async getTerrainVector(origin, radius, zoom) [ Added in v1.4 ]

    Return a THREE.Group object that represents a 3D contour map of the terrain.

    The group object contains an Array<THREE.Object3D> as .children. Each child object is either an extruded THREE.Mesh with .name attribute prefixed by dem-vec-shade-<ele>-, or a THREE.Line with .name prefixed by dem-vec-line-<ele>- (<ele> is the height of each contour in meters).

  • getProjection(origin, radius, unitsSide=1.0) [ Example ]

    Return an object { proj, projInv, bbox, unitsPerMeter } that includes transformation-related functions and parameters, where

    • proj(latlng) is a function that maps geo coordinates latlng (an array [lat, lng]) to WebGL coordinates [x, y].

    • projInv(x, y) is a function that maps WebGL coordinates [x, y] to geo coordinates [lat, lng].

    • bbox is an array [w, s, e, n] that represents the computed bounding box of the terrain, where w (West) and e (East) are longitudinal limits; and s (South) and n (North) are latitudinal limits.

    • unitsPerMeter is the length in WebGL-space per meter.

Legacy callback based API
  • getTerrain(origin, radius, zoom, callbacks={})

    • callbacks.onRgbDem function (meshes) {} Implement this to request the geometry of the terrain. Called when the entire terrain's geometry is obtained.

      • meshes Array<THREE.Mesh> All the meshes belonging to the terrain.
    • callbacks.onSatelliteMat function (mesh) {} Implement this to request the satellite textures of the terrain. Called when the satellite texture of each mesh belonging to the terrain is obtained.

      • mesh THREE.Mesh One of the meshes that's part of the terrain.
    • callbacks.onVectorDem function (objs) {} Implement this to request the contour map of the terrain. Called when the contour map of the terrain is obtained.

      • objs Array<THREE.Object3D> Extruded meshes (THREE.Mesh objects with .name attribute prefixed by dem-vec-shade-<ele>-) and lines (THREE.Line objects with .name attribute prefixed by dem-vec-line-<ele>-), where <ele> is the height of each contour in meters.

Build

$ npm i
$ npm run build
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].