universite-gustave-eiffel / noisemodelling Goto Github PK
View Code? Open in Web Editor NEWA open-source model to compute noise maps.
Home Page: https://noisemodelling.readthedocs.io
License: GNU General Public License v3.0
A open-source model to compute noise maps.
Home Page: https://noisemodelling.readthedocs.io
License: GNU General Public License v3.0
Update the tutorial to use 3d computation
https://github.com/Ifsttar/NoiseModelling/wiki/09-Using-data-from-OpenStreetMap
Using a default height, and height or floors when available.
On wps block GetTableFromOSM
For speed field, take account of value x km/h mp/h etc..
On the new version of noisemodelling, it is possible to draw a fence manually but when it is done it cannot be saved into the database.
Various enhancements:
Execute request 2/2: create table tri_lvl as SELECT * from
BR_TriGrid((select st_expand(st_envelope(st_accum(the_geom)), -750, - 750) the_geom from ROADS_SRC),'buildings','roads_src','DB_M','',750,50,1.5,2.8,75,0,0,0.23)
Evaluate cell 1/1
ERROR Thread-248 - General error: "java.lang.NullPointerException"; SQL statement:
create table tri_lvl as SELECT * from
BR_TriGrid((select st_expand(st_envelope(st_accum(the_geom)), -750, - 750) the_geom from ROADS_SRC),'buildings','roads_src','DB_M','',750,50,1.5,2.8,75,0,0,0.23) [50000-185]
org.h2.jdbc.JdbcSQLException: General error: "java.lang.NullPointerException"; SQL statement:
create table tri_lvl as SELECT * from
BR_TriGrid((select st_expand(st_envelope(st_accum(the_geom)), -750, - 750) the_geom from ROADS_SRC),'buildings','roads_src','DB_M','',750,50,1.5,2.8,75,0,0,0.23) [50000-185]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:168)
at org.h2.message.DbException.convert(DbException.java:295)
at org.h2.command.Command.executeUpdate(Command.java:262)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:184)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158)
at org.h2gis.utilities.wrapper.StatementWrapper.execute(StatementWrapper.java:93)
at org.orbisgis.view.sqlconsole.actions.ExecuteScriptProcess.parseAndExecuteScript(ExecuteScriptProcess.java:125)
at org.orbisgis.view.sqlconsole.actions.ExecuteScriptProcess.run(ExecuteScriptProcess.java:154)
at org.orbisgis.view.background.Job.run(Job.java:87)
at org.orbisgis.view.background.RunnableBackgroundJob.run(RunnableBackgroundJob.java:71)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at org.orbisgis.noisemap.core.jdbc.TriangleNoiseMap.evaluateCell(TriangleNoiseMap.java:291)
at org.orbisgis.noisemap.h2.BR_TriGrid3D$TriangleRowSource.readRow(BR_TriGrid3D.java:275)
at org.h2.tools.SimpleResultSet.next(SimpleResultSet.java:221)
at org.h2.result.LocalResult.read(LocalResult.java:97)
at org.h2.table.FunctionTable.getResult(FunctionTable.java:198)
at org.h2.index.FunctionIndex.find(FunctionIndex.java:48)
at org.h2.index.BaseIndex.find(BaseIndex.java:127)
at org.h2.index.IndexCursor.find(IndexCursor.java:159)
at org.h2.table.TableFilter.next(TableFilter.java:329)
at org.h2.command.dml.Select.queryFlat(Select.java:532)
at org.h2.command.dml.Select.queryWithoutCache(Select.java:644)
at org.h2.command.dml.Query.query(Query.java:322)
at org.h2.command.dml.Insert.insertRows(Insert.java:167)
at org.h2.command.dml.Insert.update(Insert.java:114)
at org.h2.command.ddl.CreateTable.update(CreateTable.java:185)
at org.h2.command.CommandContainer.update(CommandContainer.java:78)
at org.h2.command.Command.executeUpdate(Command.java:254)
... 8 more
OVERALL EXECUTION TIME: 1,879 seconds
Make the Dynamic Emission function searches for the coefficients that are in the json file.
BR_PTGRID3D seem to ignore diffraction and reflection parameters.
Describe each file
Get_Lday -> Get_LDay_Tutorial
I can install the app on the PC.
It appears the following message: Orbis GIS need at least java 1.7+
, but Ive already installed java 8.0
How can I go on?
thnks,
PEre
An error is thrown when doing sound propagation with Br_TriGrid or BR_PtGrid.
Problem while generating the Triangle : false true true
org.jdelaunay.delaunay.geometries.DTriangle.<init>(DTriangle.java:128)
org.jdelaunay.delaunay.BoundaryPart.connectPoint(BoundaryPart.java:388)
org.jdelaunay.delaunay.Boundary.insertPoint(Boundary.java:206)
org.jdelaunay.delaunay.ConstrainedMesh.processDelaunay(ConstrainedMesh.java:1173)
org.orbisgis.noisemap.core.LayerJDelaunay.processDelaunay(LayerJDelaunay.java:247)
org.orbisgis.noisemap.core.LayerJDelaunay.processDelaunay(LayerJDelaunay.java:203)
org.orbisgis.noisemap.core.MeshBuilder.finishPolygonFeeding(MeshBuilder.java:335)
org.orbisgis.noisemap.core.MeshBuilder.finishPolygonFeeding(MeshBuilder.java:291)
org.orbisgis.noisemap.core.jdbc.PointNoiseMap.prepareCell(PointNoiseMap.java:80)
org.orbisgis.noisemap.core.jdbc.PointNoiseMap.evaluateCell(PointNoiseMap.java:157)
org.orbisgis.noisemap.h2.BR_PtGrid3D$PointRowSource.readRow(BR_PtGrid3D.java:198)
org.h2.tools.SimpleResultSet.next(SimpleResultSet.java:221)
org.h2.result.LocalResult.read(LocalResult.java:97)
org.h2.table.FunctionTable.getResult(FunctionTable.java:198)
org.h2.index.FunctionIndex.find(FunctionIndex.java:48)
org.h2.index.BaseIndex.find(BaseIndex.java:127)
org.h2.index.IndexCursor.find(IndexCursor.java:159)
org.h2.table.TableFilter.next(TableFilter.java:329)
org.h2.command.dml.Select.queryFlat(Select.java:574)
org.h2.command.dml.Select.queryWithoutCache(Select.java:686)
org.h2.command.dml.Query.query(Query.java:322)
org.h2.command.dml.Insert.insertRows(Insert.java:167)
org.h2.command.dml.Insert.update(Insert.java:114)
org.h2.command.ddl.CreateTable.update(CreateTable.java:185)
org.h2.command.CommandContainer.update(CommandContainer.java:78)
org.h2.command.Command.executeUpdate(Command.java:254)
org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:184)
org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158)
org.h2gis.utilities.wrapper.StatementWrapper.execute(StatementWrapper.java:93)
org.orbisgis.sqlconsole.actions.ExecuteScriptProcess.parseAndExecuteScript(ExecuteScriptProcess.java:109)
org.orbisgis.sqlconsole.actions.ExecuteScriptProcess.doInBackground(ExecuteScriptProcess.java:134)
javax.swing.SwingWorker$1.call(Unknown Source)
java.util.concurrent.FutureTask.run(Unknown Source)
javax.swing.SwingWorker.run(Unknown Source)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
Change the prefix for all sql functions.
From BR_* to NM_*
Maybe we could add an help tab somewhere for acousticians with some usefull tools or tips as:
CREATE TABLE full_grid AS SELECT * FROM ST_MakeGridPoints('BUILDINGS_NS', 500, 500);
drop table small_grid if exists;
create table small_grid as select (select b.pk from buildings_ns b where st_intersects(a.the_geom , b.the_geom)) id, a.the_geom the_geom from full_grid a;
delete from small_grid where id is not null;
This issue aims to provide insight from a new user about the project wiki.
It aims to list missing or broken links, non clear explanations and such.
Please deploy the next stable version as a maven dep so it'd be possible to use it in a groovy script using @grab.
Rename parameter road width to its true meaning as minimal distance between noise source and first receivers.
BR_EvalSource function has only default value for the road width, road pavement type,the aging of the road and the traffic flow (accelerated, decelerated or stabilized).
Update signature in order to take account of theses additional parameters.
Title !
I'm on debian and JDK: 1.8.0_222. At startup I get the following errors:
Error accessing http://nexus.orbisgis.org/content/shadows/obr-snapshot/.meta/obr.xml
Error accessing http://plugins.orbisgis.org/.meta/obr.xml
Error accessing http://nexus.orbisgis.org/content/shadows/obr-snapshot/.meta/obr.xml
Regards,
Mikael
Bonjour,
En suivant le tutoriel "Using data from OpenStreetMap", j'ai cette erreur ::
ERROR [Thread-141] (ExecuteScriptProcess.java:160) - General error: "java.lang.NullPointerException"; SQL statement:
create table tri_lvl as SELECT * from
BR_TriGrid((select st_expand(st_envelope(st_accum(the_geom)), -750, - 750) the_geom from ROADS_SRC),'buildings','roads_src','DB_M','',750,50,1.5,2.8,75,0,0,0.23) [50000-182]
org.h2.jdbc.JdbcSQLException: General error: "java.lang.NullPointerException"; SQL statement:
create table tri_lvl as SELECT * from
BR_TriGrid((select st_expand(st_envelope(st_accum(the_geom)), -750, - 750) the_geom from ROADS_SRC),'buildings','roads_src','DB_M','',750,50,1.5,2.8,75,0,0,0.23) [50000-182]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:168)
at org.h2.message.DbException.convert(DbException.java:295)
at org.h2.command.Command.executeUpdate(Command.java:262)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:184)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158)
at org.h2gis.utilities.wrapper.StatementWrapper.execute(StatementWrapper.java:93)
at org.orbisgis.view.sqlconsole.actions.ExecuteScriptProcess.parseAndExecuteScript(ExecuteScriptProcess.java:125)
at org.orbisgis.view.sqlconsole.actions.ExecuteScriptProcess.run(ExecuteScriptProcess.java:154)
at org.orbisgis.view.background.Job.run(Job.java:87)
at org.orbisgis.view.background.RunnableBackgroundJob.run(RunnableBackgroundJob.java:71)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at org.orbisgis.noisemap.core.jdbc.TriangleNoiseMap.evaluateCell(TriangleNoiseMap.java:291)
at org.orbisgis.noisemap.h2.BR_TriGrid3D$TriangleRowSource.readRow(BR_TriGrid3D.java:275)
at org.h2.tools.SimpleResultSet.next(SimpleResultSet.java:221)
at org.h2.result.LocalResult.read(LocalResult.java:97)
at org.h2.table.FunctionTable.getResult(FunctionTable.java:197)
at org.h2.index.FunctionIndex.find(FunctionIndex.java:48)
at org.h2.index.BaseIndex.find(BaseIndex.java:127)
at org.h2.index.IndexCursor.find(IndexCursor.java:159)
at org.h2.table.TableFilter.next(TableFilter.java:329)
at org.h2.command.dml.Select.queryFlat(Select.java:532)
at org.h2.command.dml.Select.queryWithoutCache(Select.java:644)
at org.h2.command.dml.Query.query(Query.java:322)
at org.h2.command.dml.Insert.insertRows(Insert.java:167)
at org.h2.command.dml.Insert.update(Insert.java:114)
at org.h2.command.ddl.CreateTable.update(CreateTable.java:185)
at org.h2.command.CommandContainer.update(CommandContainer.java:78)
at org.h2.command.Command.executeUpdate(Command.java:254)
... 8 more
De plus, comment récupérer les données réelles du trafic routier d'un lieu ? Que fait on lorsqu'on utilise le "Fake traffic"?
Cordialement
Trying to import shape files in python does not work for me.
Using shpread I get the following error:
Caught this error: OperationalError('server closed the connection unexpectedly
This probably means the server terminated abnormally
tbefore or while processing the request.
Server trace:
CALL SHPREAD('/home/USER/orbisgis_noise/orbisgis_h2gis/input_shape/buildings_shp/buildings.shp', 'buildings');
org.h2.jdbc.JdbcSQLException:
General error: "java.lang.NullPointerException" [50000-182]; SQL statement:
CALL SHPREAD('/home/USER/orbisgis_noise/orbisgis_h2gis/input_shape/buildings_shp/buildings.shp', 'buildings') [0-182]
at org.h2.message.DbException.addSQL(DbException.java:132)
at org.h2.command.Command.executeQuery(Command.java:213)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:179)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158)
at org.h2.server.pg.PgServerThread.process(PgServerThread.java:392)
at org.h2.server.pg.PgServerThread.run(PgServerThread.java:90)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLException:
Using filetable there is no error - a table is created but remains empty.
Importing a shpFile through the browser interface works - however if I want to connect to that database then - the connection fails. I assume this is some spatial plugin issue?
org.h2.jdbc.JdbcSQLException: Class "org.h2gis.functions.spatial.properties.ST_GeometryTypeCode" not found; SQL statement:
CREATE DOMAIN POINT AS GEOMETRY(1) CHECK (PUBLIC.ST_GEOMETRYTYPECODE(VALUE) = 1) [90086-182]
One more question: Is there a possibility to open the resulting databases in OrbisGis or the H2 webinterface? I cannnot connect the webinterface to an existing database - it always seems to create a new one on the fly , when trying to connect to existing database on the browserinterface-
I would be very happy about any tipps !:)
When tables or columns are not found throw a SqlException . Ex DB_M source columns missing or buildings table not found.
Our script is using your python-script (https://github.com/Ifsttar/NoiseModelling/wiki/11-Scripting-with-Python) in order to assess the noise emitted by a highway into a virtual neighborhood. See screenshot. Urban planners can provide different constellations of buildings and see the effect of building constellation onto the noise propagation. The script worked fine for many constellations of buildings. However for some constellations of buildings it fails.
If I put a building into the marked vacant gridcell, the script runs fine. Leaving the space "free" (no building, no road) , I get the error.
Shortest distance from marked square to road should be roughly 515meters. One square is 16*16meters.
Could you help me understanding , why the BR_TriGrid fails? We would like to automatically assess different virtual neighborhood designs.
For reproducing the error, I created a branch of the script here.
You can reproduce the buildings from this
You can reproduce roads, traffic from this
You can look at the stack-trace (as much as I managed to get out of it) here
There is nothing in .OrbisGis/5.1/orbisgis.log ; I guess because the OrbisGis package from https://github.com/Ifsttar/NoiseModelling/wiki/11-Scripting-with-Python works differently)
Thank you so much!
Hi,
I'm following the steps in the tutorial 07 Horizontal noise map, but I can't find Groovy console in the Plugin manager as suggested in the Groovy console documentation.
As you can see, there is only the Groovy Runtime and the WPS Groovy API.
I was not able to find a bundle from Groovy Console Github page in order to try a manual installation.
I'm using OrbisGIS 5.1.0 SNAPSHOT FR that I downloaded from the NoiseModelling installation page
Add unit test for all wps scripts.
I think we can integrate an option to switch from G to Sigma and thus have more realistic frequency absorption values.
To be continued....
See : https://www.rivm.nl/bibliotheek/rapporten/2019-0023.pdf
Table page 107
I asked a question on GIS-SE and have just downloaded v4 of OrbisGIS to have a play.
Im having problems, and I imagine this is not the place to seek help. Is there a forum or an IRC channel anywhere? I would be more than happy to put together a blog post after im done showing how i started from scratch and ended up with some results. Ive worked with IMMI in the past, and my goal is to do some noise maps for Melbourne.
I installed the noise plugin as per the instructions and have then tried to run through the Quick Start guide by running the SQL statements.
I get no errors until this line:
create table tri_lvl as SELECT * from BR_TriGrid(buildings,roads_src,'db_m',750,50,0,1.5,2.8,75,2,1,0.23);
ERROR Thread-116 - Data access error:
org.gdms.driver.DriverException: org.gdms.sql.function.FunctionException: org.noisemap.core.LayerDelaunayError: Cannot run program "triangle": CreateProcess error=2, The system cannot find the file specified
I also tried running the sql from the demonstration, but this straight away gives the error:
Running instruction 5/20 :
create table bati_indifferencie_in_fence as select b.the_geom from bati_indifferencie b,extrafence f where ST_Intersects(f.the_geom,b.the_geom);
ERROR Thread-108 - Fatal error on the job named Executing script
org.gdms.data.NoSuchTableException: The table bati_indifferencie does not exist!
Any ideas on where I am going wrong and where I should be asking this?
In the wiki, it is written :
BR_TriGrid3D(Geometry computeEnvelope,VARCHAR buildingsTable, VARCHAR heightFieldName, VARCHAR sourcesTable, VARCHAR sourcesTableSoundFieldName, VARCHAR groundTypeTable, VARCHAR demTable, double maximumPropagationDistance, double maximumWallSeekingDistance, double roadsWidth, double receiversDensification, double maximumAreaOfTriangle, int soundReflectionOrder, int soundDiffractionOrder, double wallAlpha)
In stead of :
BR_TriGrid3D(String buildingsTable, String heightFieldName, String sourcesTable, String sourcesTableSoundFieldName, String groundTypeTable, String demTable, double maximumPropagationDistance, double maximumWallSeekingDistance, double roadsWidth, double receiversDensification, double maximumAreaOfTriangle, int soundReflectionOrder, int soundDiffractionOrder, double wallAlpha)
wich is correct in the OrbisGis's "show SQL fonction list" tab.
NPE while doing computation. With version d52d986
Caused by: java.lang.NullPointerException
at org.orbisgis.noisemap.core.LayerJDelaunay.processDelaunay(LayerJDelaunay.java:279)
at org.orbisgis.noisemap.core.LayerJDelaunay.processDelaunay(LayerJDelaunay.java:203)
at org.orbisgis.noisemap.core.MeshBuilder.finishPolygonFeeding(MeshBuilder.java:335)
at org.orbisgis.noisemap.core.MeshBuilder.finishPolygonFeeding(MeshBuilder.java:291)
at org.orbisgis.noisemap.core.jdbc.PointNoiseMap.prepareCell(PointNoiseMap.java:79)
at org.orbisgis.noisemap.core.jdbc.PointNoiseMap.evaluateCell(PointNoiseMap.java:157)
at org.orbisgis.noisemap.h2.BR_PtGrid3D$PointRowSource.readRow(BR_PtGrid3D.java:198)
at org.h2.tools.SimpleResultSet.next(SimpleResultSet.java:221)
BR_EvalSource function has only default value for the road width, road pavement type,the aging of the road and the traffic flow (accelerated, decelerated or stabilized).
Moreover there is feedback about an error of 4 dB(A) on the result. Have to check all conditional branching on https://github.com/Ifsttar/NoiseMap/blob/master/noisemap-core/src/main/java/org/orbisgis/noisemap/core/EvaluateRoadSource.java .
Got additional rows for the result of br_ptgrid. Check for processed receivers using a synchronized hash map.
Set DBA_FORGET_SOURCE as a input parameter
Can we get the output level from propagation method not only in dB(A) but also per frequency ?
Module | Développé | Cas Test + Validation (CSTB) |
---|---|---|
Emission Cnossos | OK | OK |
Propagation Sol Plan | Ok | OK |
Propagation Sol Diff G | Ok | Ok |
Propagation Topo | Ok | Ok |
Meteo | Ok | Ok |
Diffraction Arrête horizontale | En partie | En partie |
Diffraction Arrête Verticale | En partie | Non |
Réflexion | Ok | Ok |
Réflexion + Diffraction ? | En partie | Non |
Retrodiffraction | Non | Non |
Janvier 2019 (?!?) | Non | Non |
Matrice Att | Ok | Non |
EN 1793-1:2013 | Non | Non |
Handle no geometry column from here https://github.com/Ifsttar/NoiseModelling/blob/master/noisemap-core/src/main/java/org/orbisgis/noisemap/core/jdbc/JdbcNoiseMap.java#L173
It will be cool to update the wiki with a documentation to explain :
-What are the inputs and outputs data
Ce serait bien d'afficher la barre de couleurs quand on visualise une carte de bruit calculée sous noisemap.
Hi all, I hope you are all well!
I'm really interested in using this software, but I'm struggling to get it set up (my computing knowledge isn't really up to these standards!).
I have Java installed, I have Orbisgis installed and running, and I have the NoiseModel folder downloaded. What I can't figure out is how to get them to work together - does NoiseModel need to be opened via Orbisgis?
Please accept my appolgies for such a basic question, and thanks in advance for any help offered.
Best
AT
I think it could be great to add a z-coordinate in the following tutorial:
https://github.com/Ifsttar/NoiseModelling/wiki/04-Industrial-sound-sources-application
Maybe via the ST_UpdateZ H2GIS function ?
http://www.h2gis.org/docs/dev/ST_UpdateZ/
On the discretization step of Line Source to Point source, the openings betweens buildings must be searched.
'''
If projection is not used, errors of 10 dB and more can occur,
if the receiver is behind such a gap.
'''
Paper_CalculationMethodsSoundPropagation_Probst_DAGA08.pdf
Probst, W.: “Methods for the Calculation of Sound Propagation”, DAGA 2008
when I compute the Attenuation matrix on higher scales than 1x1 grid, (2x2 or 4x4) the matrix doesn't compute the attenuation for the majority of the receivers and for the ones which are computed, it does not match with their ID. The resulting output file is much smaller than expected and the IDs don't match.
For 1x1 grid, it works fine
Could it be possible to compute road emission with Cnossos method?
BR_PtGrid3D(String buildingsTable, String heightFieldName,String sourcesTable, String receiversTable, String sourcesTableSoundFieldName, String groundTypeTable, double maximumPropagationDistance, double maximumWallSeekingDistance, int soundReflectionOrder, int soundDiffractionOrder, double wallAlpha)
Missing "dem table" in the method definition.
In Pt_grid3D, the heigth of the sound sources and receivers should be relative to calculated DEM from buildings.
Is your feature request related to a problem? Please describe.
NoiseModelling DEM table needs to be a point cloud. Usually dem are provided as a .ASC file. H2GIS 1.5.x is not able to read this format
Describe the solution you'd like
Add a WPS block in order to read ASC file format.
Format description here
Use Scanner class
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#Scanner(java.io.InputStream)
Describe alternatives you've considered
Implement as an H2GIS driver extension in Java.
I cant find the OSGi jar file to install the NoiseModelling plugin in OrbisGIS. How do I install the Plugin?
BR_TriGrid(3D) and BR_PtGrid(3D) should not read noise level of sound sources and output the attenuation level for each visible sound sources. Then update all tutorials in wikis.
SourceID | ReceiverID | ATT100HZ | ATT125HZ |
---|---|---|---|
12 | 1 | 6.15 | 5.15 |
15 | 1 | 4.15 | 4.25 |
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.