go-spatial / tegola-osm Goto Github PK
View Code? Open in Web Editor NEWVarious scripts for importing and running a mirror of OSM with tegola
Home Page: https://demo.tegola.io
License: MIT License
Various scripts for importing and running a mirror of OSM with tegola
Home Page: https://demo.tegola.io
License: MIT License
Where tags include "maritime"=>"yes" and/or "boundary_type"=>"maritime", make a column in osm_admin_areas called "maritime" and set to 1 or yes. There may be one or more additional maritime tag indicators. We should search the existing db to see.
Where tags include "boundary_disputed"=>*, make a column in osm_admin_areas called "disputed" and set to 1 or yes. There may be one or more additional disputed tag indicators. We should search the existing db to see.
Hi,
Thank you so much for all the hard work involved in putting this sample config together. It has been really helpful for me.
I'm running into a small problem and it is most probably due to my misunderstanding of the instructions in the Readme.
It seems to suggest after importing all the data in steps 1 & 2 that there will be 3 databases.
Yet the tegola.toml file only asks for the details for the first two databases. Where do I specify the details for number 3?
When I try to run tegola with the tegola.toml file I'm getting the following error:
./tegola serve --config tegola.toml
2020-06-25 20:45:02 [INFO] root.go:61: Loading config file: tegola.toml
2020-06-25 20:45:02 [INFO] config.go:209: loading local config (tegola.toml)
Error: could not register providers: error fetching geometry type for layer (land_8-20): ERROR: relation "land_polygons" does not exist (SQLSTATE 42P01)
I assume this is because I havent configured tegola to use the 3rd DB which has the osm land data.
Or am I misreading the instructions?
The only modifications I made to the tegola.toml file are the following
# OpenStreetMap (OSM)
[[providers]]
name = "osm"
type = "postgis"
host = "localhost"
port = "5432"
database = "open_street_map" #<= name of the db which contains the data from the pbf file in step 1
user = "myuser"
password = "xxxx"
...
...
# Natural Earth
[[providers]]
name = "ne"
type = "postgis"
host = "localhost"
port = "5432"
database = "natural_earth"
user = "myuser"
password = "xxxx"
The current named layer "admin_lines" should be renamed "country_lines" to remain consistent with the other two country_lines named layers that are from essentially the same data (natural earth admin 0 boundary lines land) but at different resolutions. This was a mistake on my part when I originally assigned named layers.
osm_land.sh
inserts data into the tegola
-owned database containing the osm.pbf import.
natural_earth.sh
creates a database outside of the osm.pbf import data. I'll argue that this data may well be of use to the analyst outside of the tegola context and should/could be owned by a different user. It's sensible that a PostgreSQL cluster only needs one copy of Natural Earth Data.
Isn't it the same for the osm land polygon data? One copy could serve multiple metro extracts? One copy could be used in contexts other than tegola?
When I run natural_earth.sh on master on my Arm M1 macbook pro I get the error described in the title.
For instance, if I comment out all of the ne source urls in the script except for the last one and run the script I get this:
./natural_earth.sh
NOTICE: extension "postgis" already exists, skipping
CREATE EXTENSION
fetching https://naciscdn.org/naturalearth/10m/physical/ne_10m_ocean.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3114k 100 3114k 0 0 1936k 0 0:00:01 0:00:01 --:--:-- 1941k
Archive: 0.zip
inflating: 0/ne_10m_ocean.README.html
extracting: 0/ne_10m_ocean.VERSION.txt
extracting: 0/ne_10m_ocean.cpg
inflating: 0/ne_10m_ocean.dbf
inflating: 0/ne_10m_ocean.prj
inflating: 0/ne_10m_ocean.shp
inflating: 0/ne_10m_ocean.shx
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: tolerance condition error
ERROR 1: Reprojection failed, err = -20, further errors will be suppressed on the transform object.
This is the GDALversion I am using:
ogr2ogr --version
GDAL 3.4.1, released 2021/12/27
I have also been able to reproduce this on an intel s3 instance so I do not think this is ARM related.
I posted a question on the GDAL mailing list re: the above and I received this answer:
This dataset includes latitude up to 90 degree north, which projects to infinity in EPSG:3857. You should use the -clipsrc option of ogr2ogr to for example cut at 85 degree
I'm not exactly sure how to use this option correctly. Looking at some examples online I found this
-clipsrc -180.1 -85.0511 180.1 85.0511
and tried it like so:
OGR_ENABLE_PARTIAL_REPROJECTION=true ogr2ogr -unsetFieldWidth -t_srs EPSG:3857 -clipsrc -180.1 -85.0511 180.1 85.0511 -nlt PROMOTE_TO_MULTI -f PostgreSQL PG:"dbname='ne' host='localhost' port='5432' user='myuser' password=''redacted" ne_10m_ocean.shp
The command no longer fails and I find 3 rows in the created table but just because there were no errors doesn't mean its the correct fix for this problem.
Could you confirm this is indeed a bug and the above is the correct fix?
http://demo.tegola.io/openlayers/
Should point to /styles/hot-osm.json
Hi ,
can somebody explain performance of tegola-osm to perform import of planet.pbf to postgres database ??
how much time it may take for plannet data to push into postgres??
@PetersonGIS is looking at this. Looks like we have a newer version (0.41.0) of mapbox-gl-js now.
Tegola implementation for Redis caching system
I'm currently creating a website and I'd like to integrate a slippy map as it seems to be called. For several reasons, I want to host my own vector tile server. I tried/tested some existing solutions (tileserver/t-rex, kartotherian, OpenMapTiles, mapbox/tilelive, geoserver, tilezen/tileserver) and tegola meets my criteria (light, fast, a minimum of documentation, simple to install, to configure, to deploy using docker...).
I'm still new to all this GIS stuff but I think I now understand the whole process: we get an OpenStreetMap data extract, populate a PostreSQL database with this data + add a spatial extension and indexes, create a tile server configuration file to provide tile layers (= SQL queries), start the tile server and on client side, use a JS library (Mapbox GL in my case) which uses a 'style' file which describe what are the tile sources and how to style (as CSS do for HTML content) them.
Except a typo here and there, your documentation is clear and I can successfully display a map. I can use the tegola generated "debugger" style but my main goal is to use something more user-friendly. For some time, I though I'd have to build my own style at hand using maputnik editor and layers tegola provides, adding custom layers as needed.
I stumbled upon maputnik/osm-liberty github project and that's exactly what I need, at least to start with. Unfortunately, they use openmaptiles as their vector source. I changed that to my own tegola URL but I got several errors saying something like (for instance) park source layer was used but not found. It seems openmaptiles has designed their own vector tile schema ("park" is one of the styled layer but not exposed by tegola).
Would it be possible to add a sample TOML file exposing these layers ? All projects use OpenStreetMap and NaturalEarth data + imposm3 or osm2psql to transfer them to PostreSQL database server so I guess table names/structures are the same and that SQL queries can be imported from a project to another.
Thanks!
admin_countries_3-4 comes from ne_10m_admin_0_counries. In all other cases the 10m datasets from natural earth are assigned a "5-6" suffix whereas 50m datasets are assigned a "3-4" suffix. Since this comes from a 10m dataset it should be "admin_countries_5-6" to remain consistent.
Hi Jochen,
Just took a look at OSMI an found an area SouthWest of NewOrleans where numerous Islands have been deleted. This will cause your scripts to complain in addition to Rio de la Plata.
I have no idea to whom I should report this for checking.
http://tools.geofabrik.de/osmi/?view=coastline&lon=-90.94147&lat=29.32662&zoom=10&opacity=0.58&overlays=coastline,coastline_error_lines,line_not_a_ring,line_overlap,line_invalid,line_direction,questionable,coastline_error_points,unconnected,intersections,not_a_ring,double_node,tagged_node
Best regards
Christian
The osm_transport_lines lines table has a ref field used for cartographic highway shield text. It sometimes contains non-conforming characters (e.g., ";"), multiple refs, or extra words (e.g., "Toll"). The data should ideally be cleaned up prior to its display. See the following examples:
This is how we'd like the shield to look:
This is how the shields can look bad if the data is not cleaned up:
An additional item to consider would be separating the number(s) so that the map maker can also choose to create number-only shields such as:
v0.4.0-rc2. Just following steps in the README.
Imported a metro extract using the current imposm3.json
. Executing postgis_index.sql
against my db results in
BEGIN
CREATE INDEX ON osm_transport_lines_gen0 (type);
CREATE INDEX
CREATE INDEX ON osm_transport_lines_gen1 (type);
CREATE INDEX
CREATE INDEX ON osm_transport_lines (type);
CREATE INDEX
CREATE INDEX ON osm_admin_areas (admin_areas_level);
psql:postgis_index.sql:9: ERROR: column "admin_areas_level" does not exist
CREATE INDEX ON osm_landuse_areas_gen0 (type);
psql:postgis_index.sql:10: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_lines (type);
psql:postgis_index.sql:11: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_lines_gen0 (type);
psql:postgis_index.sql:12: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_lines_gen1 (type);
psql:postgis_index.sql:13: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_areas (type);
psql:postgis_index.sql:14: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_areas_gen0 (type);
psql:postgis_index.sql:15: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_areas_gen1 (type);
psql:postgis_index.sql:16: ERROR: current transaction is aborted, commands ignored until end of transaction block
COMMIT;
ROLLBACK
and indeed that column seems not to exist.
# \d osm_admin_areas
Table "public.osm_admin_areas"
Column | Type | Modifiers
-------------+-------------------------+--------------------------------------------------------------
id | integer | not null default nextval('osm_admin_areas_id_seq'::regclass)
osm_id | bigint |
name | character varying |
type | character varying |
admin_level | integer |
tags | hstore |
geometry | geometry(Geometry,3857) |
Indexes:
"osm_admin_areas_pkey" PRIMARY KEY, btree (id)
"osm_admin_areas_geom" gist (geometry)
"osm_admin_areas_osm_id_idx" btree (osm_id)
The following deprecation warnings are being output using the most recent version of imposm. We need to update the mapping file accordingly:
[Sep 18 21:00:25] [INFO] [mapping] warn: exclude_tags filter is deprecated and will be removed. See require and reject filter.
[Sep 18 21:00:25] [INFO] [mapping] warn: exclude_tags filter is deprecated and will be removed. See require and reject filter.
[Sep 18 21:00:25] [INFO] [mapping] warn: exclude_tags filter is deprecated and will be removed. See require and reject filter.
[Sep 18 21:00:25] [INFO] [mapping] warn: pseudoarea type is deprecated and will be removed. See area and webmerc_area type.
[Sep 18 21:00:25] [INFO] [mapping] warn: pseudoarea type is deprecated and will be removed. See area and webmerc_area type.
[Sep 18 21:00:25] [INFO] [mapping] warn: pseudoarea type is deprecated and will be removed. See area and webmerc_area type.
[Sep 18 21:00:25] [INFO] [mapping] warn: exclude_tags filter is deprecated and will be removed. See require and reject filter.
[Sep 18 21:00:25] [INFO] [mapping] warn: exclude_tags filter is deprecated and will be removed. See require and reject filter.
[Sep 18 21:00:25] [INFO] [mapping] warn: pseudoarea type is deprecated and will be removed. See area and webmerc_area type.
[Sep 18 21:00:25] [INFO] [mapping] warn: pseudoarea type is deprecated and will be removed. See area and webmerc_area type.
[Sep 18 21:00:25] [INFO] [mapping] warn: pseudoarea type is deprecated and will be removed. See area and webmerc_area type.
Replace existing Natural Earth data with new v4 data and also add Natural Earth data such that all data used in the quick-start .mxd and .qgs are available to tegola-osm users.
The data used in the quick-start is here: https://github.com/nvkelso/natural-earth-vector/tree/master/packages/Natural_Earth_quick_start.
Check to see if there's a satellite layer underneath the night vision styles as there should be. I just changed the night vision 3d style to a transparent background layer so the satellite should show up but it doesn't.
http://demo.tegola.io/mapbox/#15/32.7227/-117.1512 points to the style in the root.
add the following to imposm3.json transport_lines, mapping:
"route" { "mapping": { "route": [ "ferry" ] } }
Once that is in place, the styles can be updated to include ferry line symbology.
Somehow we missed putting tunnels and bridges in the SQL for transport_lines_gen1.
This issue is a follow up to to go-spatial/tegola#144. The goal is to setup an example tegola config file which uses the schema generated by osm2pgsql.
http://planet.openstreetmap.org is available over https, and will start redirecting to https on 2018-05-07.
Your project seems to be recommending curl in README.md, which will not follow redirects by default.
Would it please be possible to update all files from http://planet.openstreetmap.org
to httpS://planet.openstreetmap.org
before then?
Ideally, would it be possible to make all requests to openstreetmap.org over https?
The database has already been run with this newest list, but this natural_earth.sh in this repo hasn't been updated to reflect that yet.
dataurls=(
"http://naciscdn.org/naturalearth/110m/cultural/ne_110m_admin_0_boundary_lines_land.zip"
"http://naciscdn.org/naturalearth/110m/cultural/ne_110m_admin_0_countries.zip"
"http://naciscdn.org/naturalearth/110m/cultural/ne_110m_admin_1_states_provinces_lines.zip"
"http://naciscdn.org/naturalearth/110m/cultural/ne_110m_populated_places.zip"
"http://naciscdn.org/naturalearth/110m/physical/ne_110m_coastline.zip"
"http://naciscdn.org/naturalearth/110m/physical/ne_110m_geography_marine_polys.zip"
"http://naciscdn.org/naturalearth/110m/physical/ne_110m_geography_regions_polys.zip"
"http://naciscdn.org/naturalearth/110m/physical/ne_110m_rivers_lake_centerlines.zip"
"http://naciscdn.org/naturalearth/110m/physical/ne_110m_lakes.zip"
"http://naciscdn.org/naturalearth/110m/physical/ne_110m_glaciated_areas.zip"
"http://naciscdn.org/naturalearth/110m/physical/ne_110m_land.zip"
"http://naciscdn.org/naturalearth/110m/physical/ne_110m_ocean.zip"
"http://naciscdn.org/naturalearth/50m/cultural/ne_50m_admin_0_boundary_lines_land.zip"
"http://naciscdn.org/naturalearth/50m/cultural/ne_50m_admin_0_boundary_lines_disputed_areas.zip"
"http://naciscdn.org/naturalearth/50m/cultural/ne_50m_admin_0_boundary_lines_maritime_indicator.zip"
"http://naciscdn.org/naturalearth/50m/cultural/ne_50m_admin_0_countries.zip"
"http://naciscdn.org/naturalearth/50m/cultural/ne_50m_admin_0_map_subunits.zip"
"http://naciscdn.org/naturalearth/50m/cultural/ne_50m_admin_1_states_provinces_lakes.zip"
"http://naciscdn.org/naturalearth/50m/cultural/ne_50m_admin_1_states_provinces_lines.zip"
"http://naciscdn.org/naturalearth/50m/cultural/ne_50m_populated_places.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_geographic_lines.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_coastline.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_antarctic_ice_shelves_lines.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_antarctic_ice_shelves_polys.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_geography_marine_polys.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_geography_regions_elevation_points.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_geography_regions_polys.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_rivers_lake_centerlines.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_lakes.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_glaciated_areas.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_land.zip"
"http://naciscdn.org/naturalearth/50m/physical/ne_50m_ocean.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_admin_0_boundary_lines_land.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_admin_0_boundary_lines_disputed_areas.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_parks_and_protected_lands.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_admin_0_boundary_lines_map_units.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_admin_0_boundary_lines_maritime_indicator.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_admin_0_countries.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_admin_0_map_subunits.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_admin_1_states_provinces_lines.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_populated_places.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_roads.zip"
"http://naciscdn.org/naturalearth/10m/cultural/ne_10m_urban_areas.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_geographic_lines.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_coastline.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_antarctic_ice_shelves_lines.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_antarctic_ice_shelves_polys.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_geography_marine_polys.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_geography_regions_elevation_points.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_geography_regions_points.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_geography_regions_polys.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_rivers_lake_centerlines.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_lakes_historic.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_lakes.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_glaciated_areas.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_land.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_minor_islands.zip"
"http://naciscdn.org/naturalearth/10m/physical/ne_10m_ocean.zip"
)
The as_numeric
function is really primitive right now. It's mainly used for converting building heights in text format to numeric format so the values can be used for building extrusions when rendered. OSM has various ways to represent heights per: https://wiki.openstreetmap.org/wiki/Key:height. A new function should be put together than handles the various OSM height formats and also allows for conversion between meters / feet.
Replace Tegola v0.5.0 with v0.6.0 on the public-facing server. Use environment variables, available in this release, to configure the app in production and update related files here in the repo.
Currently the tegola-osm demo styles (HOTOSM, mobility, camo, night vision, osgeo) draw from a v3 natural earth database. We also have an extensive v4 database used in the Natural Earth Quickstart demo style. This issue is to move from the v3 database to the v4 database for all styles.
These zoom levels need to be optimized in terms of simplification, use of the simplified land polygons etc.
https://github.com/go-spatial/tegola-osm/blob/master/natural_earth.sh#L59 et al define a location that doesn't work any more. The locations at the gist linked from nvkelso/natural-earth-vector#581 (comment) seem to be the preferred ones now. Example:
https://naturalearth.s3.amazonaws.com/10m_cultural/ne_10m_admin_0_boundary_lines_land.zip
Military polygons can overlap with water areas. To allow the water to show through, these polygons should be changed from a solid fill to a hatch fill. A representative problem area here: http://demo.tegola.io/?z=14.7978&lat=33.2106&lng=-117.3977&style=hot-osm&src=ec2&lib=mapbox
The database connection and permissions should be tested before downloading the land polygons.
The script should test if the files have been downloaded and use them if found rather than naively downloading them again.
Hello Tegola-Team,
thanks for the great job and the contribution to the OSM World. I noticed that this repository doesn't contain a license. I guess it should be licensed under MIT as your main repository (https://github.com/go-spatial/tegola/blob/v0.15.x/LICENSE.md). Am i right? Can you add a license to clarify this?
The named layer "country_polygons" in tegola.toml is assigned to admin_boundaries_11-12 and admin_boundaries_13-20 and while they do both come from the osm layer called "osm_admin_areas" it seems that in fact they are not areas, they are lines. Not only that but these layers contain far more than just country boundaries as they include all the admin levels available in osm from countries to states to cities to municipalities and more. Therefore, their named layer should be changed to something like "admin_lines."
i followed instruction , when trying to index the new shape included via land.sh i get this error
psql -d tegola -a -f postgis_index.sql
/*
Adds indexes to OSM table columns to increase query performance per the tegola configuration.
*/
BEGIN;
BEGIN
CREATE INDEX ON osm_transport_lines_gen0 (type);
psql:postgis_index.sql:6: ERROR: relation "osm_transport_lines_gen0" does not exist
CREATE INDEX ON osm_transport_lines_gen1 (type);
psql:postgis_index.sql:7: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_transport_lines (type);
psql:postgis_index.sql:8: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_admin_areas (admin_level);
psql:postgis_index.sql:9: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_landuse_areas_gen0 (type);
psql:postgis_index.sql:10: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_lines (type);
psql:postgis_index.sql:11: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_lines_gen0 (type);
psql:postgis_index.sql:12: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_lines_gen1 (type);
psql:postgis_index.sql:13: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_areas (type);
psql:postgis_index.sql:14: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_areas_gen0 (type);
psql:postgis_index.sql:15: ERROR: current transaction is aborted, commands ignored until end of transaction block
CREATE INDEX ON osm_water_areas_gen1 (type);
psql:postgis_index.sql:16: ERROR: current transaction is aborted, commands ignored until end of transaction block
COMMIT;
ROLLBACK
i tried to manually downlaod the file and import the shape using ogr but still those relations are not created .
when i run the map i receive no table for osm staff
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.