WebGL2 powered geospatial visualization layers

Overview

version build downloads Coverage Status

deck.gl | Website

WebGL2-powered, highly performant large-scale data visualization

docs

deck.gl is designed to simplify high-performance, WebGL-based visualization of large data sets. Users can quickly get impressive visual results with minimal effort by composing existing layers, or leverage deck.gl's extensible architecture to address custom needs.

deck.gl maps data (usually an array of JSON objects) into a stack of visual layers - e.g. icons, polygons, texts; and look at them with views: e.g. map, first-person, orthographic.

deck.gl handles a number of challenges out of the box:

  • Performant rendering and updating of large data sets
  • Interactive event handling such as picking, highlighting and filtering
  • Cartographic projections and integration with major basemap providers
  • A catalog of proven, well-tested layers

Deck.gl is designed to be highly customizable. All layers come with flexible APIs to allow programmatic control of each aspect of the rendering. All core classes such are easily extendable by the users to address custom use cases.

Flavors

Script Tag

<script src="https://unpkg.com/[email protected]/dist.min.js"></script>

NPM Module

npm install deck.gl

Pure JS

React

Python

pip install pydeck

Third-Party Bindings

Learning Resources

Contributing

deck.gl is part of vis.gl, a Urban Computing Foundation project. Read the contribution guidelines if you are intrested in contributing.

Attributions

Data sources

Data sources are listed in each example.

The deck.gl project is supported by

BrowserStack
Issues
  • Interleaving DeckGL layers with a base map

    Interleaving DeckGL layers with a base map

    Hello, this is just a continuation #4529. After successfully integrating harp.gl's map with deck.gl, I was experimenting with things and found my Icon Layer laid on top of the buildings of the map.

    Normally in mapbox this could be solved by using the mapboxLayer and adding the icon layer beneath the building layer but harp.gl doesn't provide that sort of functionality.

    In essence deckgl is just drawing to an overlay canvas which is laid on top of the base canvas (harpgl's map in this case) if I understood correct. Is there any way to inform the overlay canvas of the depth buffer of the base canvas so everything renders correctly?

    An example screen. the red circles show where the icon should be behind the buildings. testt

    Thanks.

    question 
    opened by gallickgunner 61
  • initial integration of deck.gl with Google Maps

    initial integration of deck.gl with Google Maps

    For #1122 , provide an example to be updated of the integration of deck.gl with Google Maps.

    @Pessimistress and @ibgreen , feel free to use your (mapping) expertise to correct this semi working example.

    opened by MeTaNoV 35
  • v3 - scatterplot not rendering anymore

    v3 - scatterplot not rendering anymore

    Works fine on latest 2.x, updating to 3.x causes scatterplots to quit rendering.

    Additional info:

    • Tested on 3.0.0-beta17
    • Present on both core and fp64 layers
    • Choropleth layer in the dame overlay works fine
    • Using OSX Sierra on a MBP

    Tested the latest dev branch demo and the core scatter layer works, but the fp64 does not.

    Not sure if you're worried about it since it is a dev branch, but these layers don't work on the 3.x dev branch demo:

    • Solid Choropleth
    • Hexagon Select
    • Extruded Choropleth
    P0 
    opened by yocontra 32
  • heatmap layer shows only one color from colorRange

    heatmap layer shows only one color from colorRange

    Description

    Repro Steps

    const heatMap_layer = new HeatmapLayer({ data: this.geoJson.features, id: 'heatmp-layer', opacity: 0.6, getPosition: d => d.geometry.coordinates, getWeight: d => d.properties['Max Capacity'], colorFormat: 'RGBA', colorRange: [[1, 152, 189, 255], [73, 227, 206, 255], [216, 254, 181, 255], [254, 237, 177, 255],[254, 173, 84, 255],[209, 55, 78, 255]], intensity: 1, radiusPixels: 80, threshold: 0.9 });

    -->

    Environment (please complete the following information):

    • Framework Version: [e.g. deck.gl 7.2.3]
    • Browser Version: [e.g. Chrome 71.0]
    • OS: [e.g. Mac OS X 10.4]
    bug 
    opened by UttamRahane 31
  • Memory Size and TileCache

    Memory Size and TileCache

    Target Use case

    Hello! I am developing something that looks like it will have off-screen (i.e not visible) custom BaseTileLayers that I would like to have loaded for quick use and I would love to be able to allocate cache size equally and/or have each layer take up a predetermined percentage of the memory.

    Proposed feature

    I'd like if we could implement the maxCacheSize of the TileCache as a function of memory (allowing the user to control a percentage config, perhaps). I see that there is a TODO for it already here so I just wanted to make my use-case known. I am aware that my last PR seems to have opened something of a can of worms as per #4139 (very excited for these improvements, by the way!!!) so I understand if this is not coming for a while (until the API and location of the TileCache are finalized).

    feature 
    opened by ilan-gold 28
  • The correct way to hide scatterplot items and practical count limits?

    The correct way to hide scatterplot items and practical count limits?

    I've got a Scatterplot that hides items in response to a time scrubber, which I've implemented by returning 0 from getRadius for items outside the active time range. getRadius is specified in updateTriggers as well, but I'm wondering if this is the most performant way to do this.

    Would setting the alpha to 0 or filtering the items out of the data ahead of time be a better approach? I'm also curious if smoothly scrubbing through 1M+ points is a realistic goal or not. I've rendered up to about 7M points but things get pretty bogged down.

    question bug 
    opened by bclinkinbeard 27
  • Unknown shader module project32

    Unknown shader module project32

    Description

    My usage of path layer leads to error: "Unknown shader module project32" Same goes for this example: https://deck.gl/showcases/gallery/highway

    Repro Steps

    Use example above.

    Environment (please complete the following information):

    • Framework Version:
    • Browser Version: Version 76.0.3809.6 (Official Build) canary (64-bit)
    • OS: Mac OS X 10.14.5

    Logs

    dist.min.js:1 deck: error while initializing PathLayer({id: 'path-layer'}) Error: Unknown shader module project32 at i (dist.min.js:1) at e.value (dist.min.js:1) at dist.min.js:1 at Array.map () at e.value (dist.min.js:1) at h (dist.min.js:1) at T (dist.min.js:1) at t.value (dist.min.js:1) at t.value (dist.min.js:1) at t.value (dist.min.js:1) value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 setProps @ dist.min.js:12 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 (anonymous) @ dist.min.js:1 Promise.then (async) value @ dist.min.js:1 e @ dist.min.js:1 o @ dist.min.js:12 (anonymous) @ 2416456071?v=5:147 dist.min.js:1 Uncaught (in promise) Error: Unknown shader module project32 at i (dist.min.js:1) at e.value (dist.min.js:1) at dist.min.js:1 at Array.map () at e.value (dist.min.js:1) at h (dist.min.js:1) at T (dist.min.js:1) at t.value (dist.min.js:1) at t.value (dist.min.js:1) at t.value (dist.min.js:1) i @ dist.min.js:1 value @ dist.min.js:1 (anonymous) @ dist.min.js:1 value @ dist.min.js:1 h @ dist.min.js:1 T @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 e @ dist.min.js:1 t @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 setProps @ dist.min.js:12 value @ dist.min.js:1 value @ dist.min.js:1 value @ dist.min.js:1 (anonymous) @ dist.min.js:1 Promise.then (async) value @ dist.min.js:1 e @ dist.min.js:1 o @ dist.min.js:12 (anonymous) @ 2416456071?v=5:147

    bug 
    opened by cschlueter 27
  • Highlight features spread across tiles

    Highlight features spread across tiles

    Background

    Right now, only one feature is highlighted when autoHighlight property is enabled and the feature is split into several tiles. We would need to highlight the whole feature instead of only the hovered part.

    I misunderstood the object index and returned the index within the provided data array instead of the picking index. Is there a way to get the picking index from a given property?

    Change List

    • Add highlightedObjectIndex to rendered sublayers in TileLayer.
    • Implement getHighlightedObjectIndex in MVTTileLayer.
    • Save hoveredFeatureId into MVTTileLayer state.
    opened by jesusbotella 26
  • IconLayer (png) render artifacts

    IconLayer (png) render artifacts

    I use IconLayer with png sprite. Icons render with a small glitch, something like a gray border or shadow but originally they have only a white border.

    Preview

    opened by jarekpelczynski 25
  • cannot get accurate position using meter offset in scatterplot

    cannot get accurate position using meter offset in scatterplot

    I used the below to plot using METER_OFFSET. Results are quite good until the points are very far from the Origin, where they start moving away from their positions plotted using LNGLAT. Any idea to get it more accurate with the lnglat positions?

    class Layer extends ScatterplotLayer {
        constructor(props) {
            super(props)
        }
    
        calculateInstancePositions(attribute) {
            const { data, getPosition, projectionMode, positionOrigin } = this.props
            const { viewport } = this.context
            const { value } = attribute
            let i = 0
            for (const point of data) {
                let position = getPosition(point)
                if (projectionMode === COORDINATE_SYSTEM.METER_OFFSETS) {
                    const lngLatDelta = [
                        position[0] - positionOrigin[0],
                        position[1] - positionOrigin[1]
                    ]
                    position = viewport.lngLatDeltaToMeters(lngLatDelta)
                    if (
                        (lngLatDelta[0] < 0 && position[0] > 0) ||
                        (lngLatDelta[0] > 0 && position[0] < 0)
                    ) {
                        position[0] *= -1
                    }
                    if (
                        (lngLatDelta[1] < 0 && position[1] < 0) ||
                        (lngLatDelta[1] > 0 && position[1] > 0)
                    ) {
                        position[1] *= -1
                    }
                }
                value[i++] = get(position, 0)
                value[i++] = get(position, 1)
                value[i++] = get(position, 2) || 0
            }
        }
    }
    
    P2 
    opened by CrokinoleMaster 23
  • [Bug] pydeck tooltips doesn't support displaying nested JSON values

    [Bug] pydeck tooltips doesn't support displaying nested JSON values

    Description

    Trying to show

           "html": '<b>value:</b> {properties.valuePerSqm}',
    

    But it doesn't seem to support the substitution. image

    Flavors

    • [ ] React
    • [X] Python/Jupyter notebook
    • [ ] MapboxLayer
    • [ ] GoogleMapsOverlay
    • [ ] CartoLayer
    • [ ] DeckLayer/DeckRenderer for ArcGIS

    Expected Behavior

    No response

    Steps to Reproduce

    import pydeck
    
    DATA_URL = "https://raw.githubusercontent.com/visgl/deck.gl-data/master/examples/geojson/vancouver-blocks.json"
    LAND_COVER = [[[-123.0, 49.196], [-123.0, 49.324], [-123.306, 49.324], [-123.306, 49.196]]]
    
    INITIAL_VIEW_STATE = pydeck.ViewState(
      latitude=49.254,
      longitude=-123.13,
      zoom=11,
      max_zoom=16,
      pitch=45,
      bearing=0
    )
    
    geojson = pydeck.Layer(
        'GeoJsonLayer',
        DATA_URL,
        opacity=0.8,
        stroked=False,
        filled=True,
        extruded=True,
        wireframe=True,
        get_elevation='properties.valuePerSqm / 20',
        get_fill_color='[255, 255, properties.growth * 255]',
        get_line_color=[255, 255, 255],
        pickable=True
    )
    
    r = pydeck.Deck(
        layers=[geojson],
        initial_view_state=INITIAL_VIEW_STATE,
        tooltip={
           "html": '<b>value:</b> {properties.valuePerSqm}',
           "style": {
                "backgroundColor": "steelblue",
                "color": "white"
           }
        }
    )
    
    r
    

    Environment

    Logs

    No response

    bug 
    opened by andhuang-CLGX 0
  • Support multiple masks

    Support multiple masks

    For #4161

    Support up to 4 mask layers. maskId is now required to enable masking. If maskId is not found, it is treated as if maskEnabled: false.

    @felixpalmer Do we still need maskEnabled in this case?

    Screen Shot 2022-01-26 at 3 16 39 PM

    Change List

    • MaskEffect
    • MaskExtension
    • Test app
    • Unit tests
    opened by Pessimistress 1
  • Is there a way to make Hover tooltips stick on click like Folium markers in pydeck?

    Is there a way to make Hover tooltips stick on click like Folium markers in pydeck?

    Target Use Case

    So someone can view multiple tooltips at once

    Proposal

    Like folium markers? https://python-visualization.github.io/folium/quickstart.html

    feature 
    opened by andhuang-CLGX 0
  • [Bug] Mapbox integration, layer get repeated even with renderWorldCopies set to false

    [Bug] Mapbox integration, layer get repeated even with renderWorldCopies set to false

    Description

    I followed the example to use a DeckGL custom layer in Mapox.

    It works well but the Custom Layer gets repeated even if I set the renderWorldCopies to false in Mapbox.

    Is there any way we can prevent this behaviour Screen Shot 2022-01-25 at 4 41 17 PM

    Screen Shot 2022-01-25 at 4 41 27 PM ?

    Flavors

    • [ ] React
    • [ ] Python/Jupyter notebook
    • [X] MapboxLayer
    • [ ] GoogleMapsOverlay
    • [ ] CartoLayer
    • [ ] DeckLayer/DeckRenderer for ArcGIS

    Expected Behavior

    No response

    Steps to Reproduce

    var map = new mapboxgl.Map({ container: 'ParcoursMap', center: [-20.276018, 50.220830], zoom: 1.6, pitch: 25, //maxPitch: 50, bearing: 0, minZoom: 1, maxZoom: 15, renderWorldCopies: false, });

    Environment

    Logs

    No response

    bug 
    opened by inwebitrust 0
  • Felix/carto binary format

    Felix/carto binary format

    For https://github.com/visgl/deck.gl/issues/6508

    Change List

    • Add pbf dependency
    • Schema for binary data format
    • Parse pbf and display using CartoLayer
    opened by felixpalmer 0
  • Cannot read properties of null (reading 'isVisible') [Bug]

    Cannot read properties of null (reading 'isVisible') [Bug]

    Description

    Tooltip throws error in edge cases o clear way to reproduce. After look in codebase it seems that the "this.tooltip" is not there

    // If view state has changed, clear tooltip if (this.tooltip.isVisible && this.viewManager.needsRedraw()) { this.tooltip.setTooltip(null); }

    Code Loc

    Flavors

    • [X] React
    • [ ] Python/Jupyter notebook
    • [ ] MapboxLayer
    • [ ] GoogleMapsOverlay
    • [ ] CartoLayer
    • [X] DeckLayer/DeckRenderer for ArcGIS

    Expected Behavior

    Should not make an error

    Steps to Reproduce

    ` <DeckGL viewState={viewport} layers={deckGlLayers} ContextProvider={MapContext.Provider} onViewStateChange={({ viewState }) =>{ mapControl.updateViewPort({ ...viewState, }); }} controller={{inertia: true}} onLoad={() => updateMapState(true)} onError={() => {}} getCursor={({isDragging}) => isDragging ? 'grabbing' : 'default'} onClick={(e) => mapControl.clickHandler(e)} getTooltip={(e) => { if (!e.layer) return null;

                    // console.log(e.layer)
                    if (!e.object) {
                        return null;
                    }
            
                    // Sensor markers
                    if (e.object.isMarker) {
                        return e.object.name;
                    }
    
                    return null;
                }}
            >
    

    `

    Environment

    Logs

    No response

    bug 
    opened by SadikMoazzem 4
  • Allow setting FontAtlasManager LRU Cache limit

    Allow setting FontAtlasManager LRU Cache limit

    For #6575

    Background

    FontAtlasManager uses LRU Cache to keep 3 most used font atlases in memory. This is fine for typical use cases but it becomes performance bottleneck when much more than 3 fonts (or combination of font-family, font-weight ...) is needed.

    Change List

    • Introduce TextLayer.fontAtlasCacheLimit static setter to recreate the LRU cache with new limit
    • Add documentation to TexLayer
    • Add tests
    opened by urdeveloper 1
  • [Feat] Allow setting FontAtlasManager LRU Cache Limit

    [Feat] Allow setting FontAtlasManager LRU Cache Limit

    Target Use Case

    FontAtlasManager uses LRU Cache to keep 3 most used font atlases in memory. This is fine for typical use cases but it becomes performance bottleneck when much more than 3 fonts (or combination of font-family, font-weight ...) is needed.

    If you need for example 15 different fonts in your application, FontAtlasManager keeps recreating them because it can't keep all of them in memory.

    Proposal

    Introduce a function that allows setting the LRU cache limit in such use cases.

    feature 
    opened by urdeveloper 0
  • [Bug] Google map satellite 3D view rotation bug

    [Bug] Google map satellite 3D view rotation bug

    Description

    I am developing an application with is using Google Maps as a base map (using Angular front-end) and Deck.gl to render layers on top of the map. first of all, I find out that deck gl is not supporting rendering layers on the 3D view so I turned the layers off as soon as the user zoom-in in satellite view which will cause to turn on the 3D mode. after google map will reach to the level which can show 3D map there will be another feature that let user rotate the map by 90 degrees either clockwise or counterclockwise. this feature will work just for 90 degrees counterclockwise and 90 degrees back to the default view. I have checked the example on google official website which is using deck.gl as an example and appears they are facing the same issue. here is the link to an example: https://developers.google.com/maps/documentation/javascript/examples/deckgl-points

    The steps to reproduce the bug is: 1- click on satellite view 2- zoom-in to metro areas such as San Francisco up to the level where you get a tilt button on the left-bottom of the map 3- click on clockwise rotation or double click on counter clockwise rotation

    here is my browser console after facing the problem:

    zone.js:182 Uncaught TypeError: Cannot read properties of null (reading '0')
        at Module.transformMat4 (vec4.js:486:1)
        at transformVector (math-utils.js:6:18)
        at pixelsToWorld (web-mercator-utils.js:179:33)
        at WebMercatorViewport.unproject (viewport.js:87:32)
        at getBounds (get-bounds.js:14:1)
        at WebMercatorViewport.getBounds (web-mercator-viewport.js:154:30)
        at WebMercatorViewport.get subViewports [as subViewports] (web-mercator-viewport.js:101:1)
        at DrawLayersPass._drawLayers (layers-pass.js:36:1)
        at DrawLayersPass.render (layers-pass.js:9:1)
        at DeckRenderer.renderLayers (deck-renderer.js:40:1)
    

    you can see obviously some tiles will get missed and all text become funky: image

    Flavors

    • [ ] React
    • [ ] Python/Jupyter notebook
    • [ ] MapboxLayer
    • [X] GoogleMapsOverlay
    • [ ] CartoLayer
    • [X] DeckLayer/DeckRenderer for ArcGIS

    Expected Behavior

    No response

    Steps to Reproduce

    1- click on satellite view 2- zoom-in to metro areas such as San Francisco up to the level where you get a tilt button on the left-bottom of the map 3- click on clockwise rotation or double click on counter clockwise rotation

    Environment

    • Framework version: Angular version 12, googlemaps version 1.12.0, deck.gl version 8.6.4
    • Browser: Chrome Version 97.0.4692.71, Edge Version 97.0.1072.62, Safari Version 15.2
    • OS: Windows pro10/11, macOS Monterey 12.1

    Logs

    No response

    bug 
    opened by dana-ngis 3
  • Bump trim-off-newlines from 1.0.1 to 1.0.3

    Bump trim-off-newlines from 1.0.1 to 1.0.3

    Bumps trim-off-newlines from 1.0.1 to 1.0.3.

    Commits
    • c3b28d3 1.0.3
    • 6226c95 Merge pull request #4 from Trott/fix-it-again
    • c77691d fix: remediate ReDOS further
    • 76ca93c chore: pin mocha to version that works with 0.10.x
    • 8cd3f73 1.0.2
    • fcbb73d Merge pull request #3 from Trott/patch-1
    • 6d89476 fix: update regular expression to remove ReDOS
    • 0cd87f5 chore: pin xo to latest version that works with current code
    • See full diff in compare view
    Maintainer changes

    This version was pushed to npm by trott, a new releaser for trim-off-newlines since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
Releases(v8.7.0-beta.1)
  • v8.7.0-beta.1(Jan 26, 2022)

    • Add MaskExtension (#6554)
    • Add getBounds method to Attribute (#6583)
    • Update to new Google Maps API (#6579)
    • CARTO fetchMap: Fix no layer shown if one of the map layers fails (#6573)
    • Add uniqueIdProperty to mvt layer props (#6572)
    • Fix fetchMap in Carto module (#6569)
    • Migrate core/passes to TypeScript (#6488)
    • Fix TileLayer url template resolution (#6566)
    • Fix z-index of MapboxLayers (#6565)
    • Fix highlighting in GeoJsonLayer when it’s used as a sub layer (#6563)
    • Correctly calculate GLViewport with Framebuffer (#6553)
    Source code(tar.gz)
    Source code(zip)
  • v8.6.6(Jan 19, 2022)

    • Fix TileLayer url template resolution (#6566)
    • Fix z-index of MapboxLayers (#6565)
    • Fix highlighting in GeoJsonLayer when it’s used as a sub layer (#6563)
    • Bump loaders.gl to 3.1.5 (#6561)
    Source code(tar.gz)
    Source code(zip)
  • v8.7.0-alpha.11(Dec 30, 2021)

  • v8.7.0-alpha.10(Dec 28, 2021)

  • v8.7.0-alpha.9(Dec 17, 2021)

  • v8.7.0-alpha.8(Dec 13, 2021)

  • v8.7.0-alpha.7(Dec 10, 2021)

  • v8.7.0-alpha.6(Dec 9, 2021)

  • v8.7.0-alpha.5(Dec 9, 2021)

  • v8.7.0-alpha.4(Dec 9, 2021)

    • TileLayer: reduce flashing when using no-overlap strategy (#6477)
    • feat(geo): controller position (#6478)
    • chore: Bump to [email protected] (#6484)
    • chore(core): Move utils to .ts (#6452)
    • CARTO: Fix domain length for CartoColors in colorBins (#6475)
    • Migrate core/lifecycle to TypeScript (#6454)
    • feat(geo-layers): Tile3DLayer pass coordinateSystem as prop (#6466)
    • Fix project_normal in GlobeView (#6445)
    • Add flatShading prop to ColumnLayer (#6392)
    • TerrainLayer handle non-WebMercator viewports (#6461)
    • colorContinuous - Use domain length to get palette (#6447)
    • fix(geo-layers): _MeshLayer & repeating textures (#6468)
    • TileLayer support custom refinementStrategy (#6382)
    • chore: Move to @math.gl/core (#6405)
    • chore: Lint fixes (#6443)
    • chore: Move controllers to .ts (#6440)
    • chore: [email protected] (#6388)
    • feat: Typescript monorepo (#6381)
    • chore: Replace global with globalThis (#6407)
    • feat: Upgrade tooling to support TypeScript (#6390)
    Source code(tar.gz)
    Source code(zip)
  • v8.6.5(Dec 9, 2021)

    • Avoid mutating coordinateOrigin (#6491)
    • Fix MVTLayer functional highlightColor (#6479)
    • Fix crash when diffing extensions (#6474)
    • TerrainLayer handle non-WebMercator viewports (#6461)
    Source code(tar.gz)
    Source code(zip)
  • v8.7.0-alpha.3(Nov 25, 2021)

    • Fix: Rename publicToken to token (#6425)
    • Fix: CartoLayer support format prop (#6416)
    • Default to cartodb_id for uniqueIdProperty in CartoLayer (#6404)
    • Deprecate CartoBQTilerLayer and CartoSQLLayer (#6402)
    Source code(tar.gz)
    Source code(zip)
  • v8.7.0-alpha.2(Nov 16, 2021)

  • v8.6.4(Nov 14, 2021)

  • v8.7.0-alpha.1(Nov 8, 2021)

    • Add missing prop mappings for GeoJsonLayer (#6336)
    • Add fetchMap function to carto module (#6341)
    • CARTO: fix layer credentials overwrite (#6349)
    • Skip rendering out-of-DOM Google Maps (#6340)
    • [arcgis] support ES modules (#6313)
    • Multi-view picking consistency (#6306)
    Source code(tar.gz)
    Source code(zip)
  • v8.6.3(Nov 7, 2021)

  • v8.6.2(Nov 3, 2021)

  • v8.6.1(Nov 2, 2021)

  • v8.6.0(Oct 11, 2021)

    • Google Maps Overlay: Safely invoke onRender by resetting arrayBuffer (#6224)
    • Bump luma to 8.5.10 (#6267)
    • Update HexagonLayer to use the new unit system (#6260)
    • Use accurate meter size in Web Mercator projection (#6117)
    • Improve picking index encoding (#6184)
    • H3HexagonLayer: force low precision; early exit for data analysis loop (#6242)
    • TileLayer retains cache on data change (#6194)
    • Check visible recursively (#6190)
    • Use layerFilter in MapboxLayer (#6189)
    • Google overlay state synchronization (#6177)
    • Add geoColumn & columns props to CartoLayer (#6097)
    • Bug fixes in google overlay (#6083)
    • OrthographicView supports independent x/y zoom levels (#6116)
    • Only call layerFilter with top-level layers (#6049)
    • Support vector maps in google module (#5981)
    Source code(tar.gz)
    Source code(zip)
  • v8.6.0-beta.1(Oct 9, 2021)

  • v8.6.0-alpha.4(Oct 6, 2021)

    • Google Maps Overlay: Safely invoke onRender by resetting arrayBuffer (#6224)
    • Bump luma to 8.5.10 (#6267)
    • Update HexagonLayer to use the new unit system (#6260)
    • Use accurate meter size in Web Mercator projection (#6117)
    • Improve picking index encoding (#6184)
    • H3HexagonLayer: force low precision; early exit for data analysis loop (#6242)
    • TileLayer retains cache on data change (#6194)
    • Fix excessive allocation for constant attributes (#6233)
    • Fix Heatmap data update (#6231)
    • Fix diffProps when an async prop is set synchronously (#6193)
    • Fix TileLayer getTileData not using the latest loadOptions (#6209)
    • Fix missing picking radius for onClick handlers (#6208)
    • Check visible recursively (#6190)
    • TileLayer uses props.extent to cull tiles in geospatial mode (#6191)
    • Use layerFilter in MapboxLayer (#6189)
    Source code(tar.gz)
    Source code(zip)
  • v8.5.10(Sep 24, 2021)

  • v8.5.9(Sep 21, 2021)

    • Fix diffProps when an async prop is set synchronously (#6193)
    • Fix TileLayer getTileData not using the latest loadOptions (#6209)
    • [google-maps] Fix missing picking radius for onClick handlers (#6208)
    Source code(tar.gz)
    Source code(zip)
  • v8.5.8(Sep 13, 2021)

  • v8.6.0-alpha.3(Sep 9, 2021)

  • v8.6.0-alpha.2(Sep 9, 2021)

    • Drop sublayers with no data even if the _subLayerProps prop contains (#6160)
    • Heatmap - expose additional properties (#6158)
    • pydeck: Enable custom_map_style and file encoding for HTML on Windows (#6121)
    • Additional reference points for bounding volume calculation - globe view (#6148)
    • CARTO: include API error at the exception message (#6143)
    • Bump luma.gl to 8.5.5 (#6132)
    • Fix Default Values in AttributeManager add method (#6130)
    • Fix TileLayer and Tile3DLayer visiblility (#6123)
    • Add geoColumn & columns props to CartoLayer (#6097)
    • Bug fixes in google overlay (#6083)
    • OrthographicView supports independent x/y zoom levels (#6116)
    • Only call layerFilter with top-level layers (#6049)
    • Add zero _offset to Tile3DLayer (#6108)
    • Fix MVTLayer autoHighlight with binary data (#6098)
    • Improve tile traversal in GlobeView (#6106)
    • Bump loaders to 3.0.8 (#6075)
    • Scatterplot layer: smooth edges prop (#6081)
    Source code(tar.gz)
    Source code(zip)
  • v8.5.7(Sep 4, 2021)

    • Drop sublayers with no data even if the _subLayerProps prop contains (#6160)
    • HeatmapLayer - expose additional properties (#6158)
    • GlobeView - Additional reference points for bounding volume calculation (#6148)
    Source code(tar.gz)
    Source code(zip)
  • v8.5.6(Aug 28, 2021)

  • v8.5.5(Aug 26, 2021)

    • Bump luma.gl to 8.5.5 (#6132)
    • Fix Default Values in AttributeManager add method (#6130)
    • Fix TileLayer and Tile3DLayer visiblility (#6123)
    Source code(tar.gz)
    Source code(zip)
  • v8.5.4(Aug 17, 2021)

    • Fix polygon offset in Tile3DLayer (#6108)
    • Fix MVTLayer autoHighlight with binary data (#6098)
    • Improve tile traversal in GlobeView (#6106)
    • Bump loaders to 3.0.8 (#6075)
    Source code(tar.gz)
    Source code(zip)
Owner
Vis.gl
Frameworks for WebGL-powered large-scale data visualization
Vis.gl
Digital Earth Australia notebooks and tools repository

Repository for Digital Earth Australia Jupyter Notebooks: tools and workflows for geospatial analysis with Open Data Cube and xarray

Geoscience Australia 245 Jan 15, 2022
A multi-page streamlit app for the geospatial community.

A multi-page streamlit app for the geospatial community.

Qiusheng Wu 277 Jan 31, 2022
geemap - A Python package for interactive mapping with Google Earth Engine, ipyleaflet, and ipywidgets.

A Python package for interactive mapping with Google Earth Engine, ipyleaflet, and folium

Qiusheng Wu 1.6k Jan 30, 2022
Manipulation and analysis of geometric objects

Shapely Manipulation and analysis of geometric objects in the Cartesian plane. Shapely is a BSD-licensed Python package for manipulation and analysis

2.6k Jan 13, 2022
A NASA MEaSUREs project to provide automated, low latency, global glacier flow and elevation change datasets

Notebooks A NASA MEaSUREs project to provide automated, low latency, global glacier flow and elevation change datasets This repository provides tools

NASA Jet Propulsion Laboratory 8 Jan 18, 2022
This is a simple python code to get IP address and its location using python

IP address & Location finder @DEV/ED : Pavan Ananth Sharma Dependencies: ip2geotools Note: use pip install ip2geotools to install this in your termin

Pavan Ananth Sharma 1 Nov 06, 2021
Google maps for Jupyter notebooks

gmaps gmaps is a plugin for including interactive Google maps in the IPython Notebook. Let's plot a heatmap of taxi pickups in San Francisco: import g

Pascal Bugnion 728 Jan 31, 2022
Geospatial Image Processing for Python

GIPPY Gippy is a Python library for image processing of geospatial raster data. The core of the library is implemented as a C++ library, libgip, with

GIPIT 80 Aug 16, 2021
QLUSTER is a relative orbit design tool for formation flying satellite missions and space rendezvous scenarios

QLUSTER is a relative orbit design tool for formation flying satellite missions and space rendezvous scenarios, that I wrote in Python 3 for my own research and visualisation. It is currently unfinis

Samuel Low 9 Jan 07, 2022
Raster-based Spatial Analysis for Python

🌍 xarray-spatial: Raster-Based Spatial Analysis in Python πŸ“ Fast, Accurate Python library for Raster Operations ⚑ Extensible with Numba ⏩ Scalable w

makepath 508 Jan 27, 2022
🌐 Local tile server for viewing geospatial raster files with ipyleaflet or folium

🌐 Local Tile Server for Geospatial Rasters Need to visualize a rather large (gigabytes) raster you have locally? This is for you. A Flask application

Bane Sullivan 111 Jan 15, 2022
ESMAC diags - Earth System Model Aerosol-Cloud Diagnostics Package

Earth System Model Aerosol-Cloud Diagnostics Package This Earth System Model (ES

Pacific Northwest National Laboratory 1 Jan 03, 2022
This app displays interesting statistical weather records and trends which can be used in climate related research including study of global warming.

This app displays interesting statistical weather records and trends which can be used in climate related research including study of global warming.

0 Dec 26, 2021
Satellite imagery for dummies.

felicette Satellite imagery for dummies. What can you do with this tool? TL;DR: Generate JPEG earth imagery from coordinates/location name with public

Shivashis Padhi 1.7k Feb 07, 2022
A Django application that provides country choices for use with forms, flag icons static files, and a country field for models.

Django Countries A Django application that provides country choices for use with forms, flag icons static files, and a country field for models. Insta

Chris Beaven 1.1k Jan 21, 2022
Implementation of Trajectory classes and functions built on top of GeoPandas

MovingPandas MovingPandas implements a Trajectory class and corresponding methods based on GeoPandas. Visit movingpandas.org for details! You can run

Anita Graser 717 Jan 23, 2022
Python library to visualize circular plasmid maps

Plasmidviewer Plasmidviewer is a Python library to visualize plasmid maps from GenBank. This library provides only the function to visualize circular

Mori Hideto 1 Dec 11, 2021
Color correction plugin for rasterio

rio-color A rasterio plugin for applying basic color-oriented image operations to geospatial rasters. Goals No heavy dependencies: rio-color is purpos

Mapbox 100 Jan 13, 2022
Manage your XYZ Hub or HERE Data Hub spaces from Python.

XYZ Spaces for Python Manage your XYZ Hub or HERE Data Hub spaces and Interactive Map Layer from Python. FEATURED IN: Online Python Machine Learning C

HERE Technologies 30 Sep 02, 2021
A public data repository for datasets created from TransLink GTFS data.

TransLink Spatial Data What: TransLink is the statutory public transit authority for the Metro Vancouver region. This GitHub repository is a collectio

Henry Tang 3 Jan 13, 2022