{"id":4347,"name":"terrainbook","description":"\"Computational modelling of terrains\" book: source code + PDF","url":"https://github.com/tudelft3d/terrainbook","last_synced_at":"2025-09-04T17:20:26.416Z","repository":{"id":45052743,"uuid":"173781802","full_name":"tudelft3d/terrainbook","owner":"tudelft3d","description":"\"Computational modelling of terrains\" book: source code + PDF","archived":false,"fork":false,"pushed_at":"2025-07-28T11:30:23.000Z","size":108096,"stargazers_count":121,"open_issues_count":4,"forks_count":17,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-07-28T13:23:27.173Z","etag":null,"topics":["book","dtm","gis","pointcloud","terrain","tin"],"latest_commit_sha":null,"homepage":"https://tudelft3d.github.io/terrainbook/","language":"TeX","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tudelft3d.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-04T16:33:31.000Z","updated_at":"2025-07-28T11:30:28.000Z","dependencies_parsed_at":"2023-02-16T08:01:04.988Z","dependency_job_id":"dd0d6a53-84c5-451f-bbe1-8307dab3159e","html_url":"https://github.com/tudelft3d/terrainbook","commit_stats":{"total_commits":566,"total_committers":8,"mean_commits":70.75,"dds":0.1537102473498233,"last_synced_commit":"75b6207511acf113d293772d3dbc7a8450a2d59b"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/tudelft3d/terrainbook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tudelft3d%2Fterrainbook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tudelft3d%2Fterrainbook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tudelft3d%2Fterrainbook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tudelft3d%2Fterrainbook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tudelft3d","download_url":"https://codeload.github.com/tudelft3d/terrainbook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tudelft3d%2Fterrainbook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273642307,"owners_count":25142347,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"tudelft3d","name":"3D geoinformation research group at TU Delft","uuid":"1544391","kind":"organization","description":"","email":null,"website":"https://3d.bk.tudelft.nl","location":"Delft, the Netherlands","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1544391?v=4","repositories_count":52,"last_synced_at":"2023-03-23T00:14:57.184Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/tudelft3d","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-03T14:25:49.636Z","updated_at":"2023-03-23T00:14:58.084Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tudelft3d","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tudelft3d/repositories"},"packages":[],"commits":{"id":1323480,"full_name":"tudelft3d/terrainbook","default_branch":"main","committers":[{"name":"Hugo Ledoux","email":"h.ledoux@tudelft.nl","login":null,"count":479},{"name":"Ylannl","email":"r.y.peters@tudelft.nl","login":null,"count":37},{"name":"Zhaiyu Chen","email":"24312770+realczy","login":"realczy","count":23},{"name":"Ken Arroyo Ohori","email":"k.ohori@tudelft.nl","login":null,"count":14},{"name":"Maarten Pronk","email":"git@evetion.nl","login":null,"count":7},{"name":"Ken Arroyo Ohori","email":"g.a.k.arroyoohori@tudelft.nl","login":null,"count":4},{"name":"Balázs Dukai","email":"balazs.dukai@gmail.com","login":null,"count":1},{"name":"Leon","email":"lpowalka@e-point.pl","login":null,"count":1}],"total_commits":566,"total_committers":8,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":70.75,"dds":0.1537102473498233,"past_year_committers":[{"name":"Hugo Ledoux","email":"h.ledoux@tudelft.nl","login":null,"count":76},{"name":"Ken Arroyo Ohori","email":"k.ohori@tudelft.nl","login":null,"count":6},{"name":"Maarten Pronk","email":"git@evetion.nl","login":null,"count":1}],"past_year_total_commits":83,"past_year_total_committers":3,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":27.666666666666668,"past_year_dds":0.08433734939759041,"last_synced_at":"2024-01-28T11:47:13.840Z","last_synced_commit":"75b6207511acf113d293772d3dbc7a8450a2d59b","created_at":"2023-09-11T15:36:42.446Z","updated_at":"2024-01-28T11:47:13.841Z","commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/tudelft3d%2Fterrainbook/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-09-04T00:00:25.936Z","repositories_count":5480019,"commits_count":853389012,"contributors_count":31098138,"owners_count":906558,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"tudelft3d/terrainbook","html_url":"https://github.com/tudelft3d/terrainbook","last_synced_at":"2025-08-31T07:50:50.951Z","status":null,"issues_count":44,"pull_requests_count":8,"avg_time_to_close_issue":5462180.275,"avg_time_to_close_pull_request":97474.5,"issues_closed_count":40,"pull_requests_closed_count":8,"pull_request_authors_count":5,"issue_authors_count":14,"avg_comments_per_issue":0.6363636363636364,"avg_comments_per_pull_request":0.875,"merged_pull_requests_count":7,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":2534362.75,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":4,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-09-11T15:37:08.198Z","updated_at":"2025-09-03T04:58:16.732Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/tudelft3d%2Fterrainbook","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/tudelft3d%2Fterrainbook/issues","issue_labels_count":{"enhancement":2},"pull_request_labels_count":{},"issue_author_associations_count":{"MEMBER":34,"NONE":17,"CONTRIBUTOR":1},"pull_request_author_associations_count":{"MEMBER":6,"NONE":6,"CONTRIBUTOR":2,"COLLABORATOR":1},"issue_authors":{"hugoledoux":33,"zfengyan":2,"jaspervdv":2,"pratyush1611":2,"Julievandenbrink":1,"CorLaHu":1,"mdjong1":1,"LaurensVanRijssel":1,"AnnaLisa12345":1,"MCHU-1999":1,"ZokszY":1,"lucjonker":1,"xiaoai-li":1,"rkh00":1,"Mschn-k":1,"Dobberzoon":1,"kenohori":1},"pull_request_authors":{"chenzhaiyu":4,"michelbeeren":2,"ZokszY":2,"balazsdukai":1,"evetion":1,"johhyeji":1,"DaanSchlosser":1,"Ylannl":1,"Alcardens":1,"leoleonsio":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-09-03T00:00:08.273Z","repositories_count":10054011,"issues_count":30898665,"pull_requests_count":92703059,"authors_count":10588296,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"enhancement":1},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"MEMBER":8,"NONE":2,"CONTRIBUTOR":1},"past_year_pull_request_author_associations_count":{"NONE":4,"CONTRIBUTOR":2,"COLLABORATOR":1},"past_year_issue_authors":{"hugoledoux":8,"lucjonker":1,"MCHU-1999":1,"ZokszY":1},"past_year_pull_request_authors":{"ZokszY":2,"michelbeeren":2,"DaanSchlosser":1,"Alcardens":1,"evetion":1},"maintainers":[{"login":"hugoledoux","count":33,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/hugoledoux"},{"login":"chenzhaiyu","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/chenzhaiyu"},{"login":"balazsdukai","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/balazsdukai"},{"login":"evetion","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/evetion"},{"login":"kenohori","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/kenohori"},{"login":"Ylannl","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Ylannl"}],"active_maintainers":[{"login":"hugoledoux","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/hugoledoux"},{"login":"evetion","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/evetion"}]},"events":{"total":{"CreateEvent":3,"ReleaseEvent":2,"IssuesEvent":19,"WatchEvent":15,"DeleteEvent":1,"IssueCommentEvent":14,"PushEvent":30,"PullRequestReviewEvent":5,"PullRequestReviewCommentEvent":3,"PullRequestEvent":15,"ForkEvent":7},"last_year":{"CreateEvent":3,"ReleaseEvent":2,"IssuesEvent":19,"WatchEvent":15,"DeleteEvent":1,"IssueCommentEvent":14,"PushEvent":30,"PullRequestReviewEvent":5,"PullRequestReviewCommentEvent":3,"PullRequestEvent":15,"ForkEvent":7}},"keywords":["book","dtm","gis","pointcloud","terrain","tin"],"dependencies":[{"ecosystem":"rubygems","filepath":"docs/Gemfile.lock","sha":null,"kind":"lockfile","created_at":"2023-02-16T08:01:04.420Z","updated_at":"2023-02-16T08:01:04.420Z","repository_link":"https://github.com/tudelft3d/terrainbook/blob/main/docs/Gemfile.lock","dependencies":[{"id":7707408587,"package_name":"jekyll-theme-minimal","ecosystem":"rubygems","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":7707408588,"package_name":"activesupport","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":7707408589,"package_name":"addressable","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":7707408590,"package_name":"ast","ecosystem":"rubygems","requirements":"2.4.2","direct":false,"kind":"runtime","optional":false},{"id":7707408591,"package_name":"colorator","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":7707408592,"package_name":"concurrent-ruby","ecosystem":"rubygems","requirements":"1.1.10","direct":false,"kind":"runtime","optional":false},{"id":7707408593,"package_name":"em-websocket","ecosystem":"rubygems","requirements":"0.5.3","direct":false,"kind":"runtime","optional":false},{"id":7707408594,"package_name":"ethon","ecosystem":"rubygems","requirements":"0.15.0","direct":false,"kind":"runtime","optional":false},{"id":7707408596,"package_name":"ffi","ecosystem":"rubygems","requirements":"1.15.5","direct":false,"kind":"runtime","optional":false},{"id":7707408595,"package_name":"eventmachine","ecosystem":"rubygems","requirements":"1.2.7","direct":false,"kind":"runtime","optional":false},{"id":7707408597,"package_name":"forwardable-extended","ecosystem":"rubygems","requirements":"2.6.0","direct":false,"kind":"runtime","optional":false},{"id":7707408598,"package_name":"html-proofer","ecosystem":"rubygems","requirements":"3.19.4","direct":false,"kind":"runtime","optional":false},{"id":7707408600,"package_name":"http_parser.rb","ecosystem":"rubygems","requirements":"0.8.0","direct":false,"kind":"runtime","optional":false},{"id":7707408601,"package_name":"i18n","ecosystem":"rubygems","requirements":"1.11.0","direct":false,"kind":"runtime","optional":false},{"id":7707408603,"package_name":"jekyll","ecosystem":"rubygems","requirements":"4.2.2","direct":false,"kind":"runtime","optional":false},{"id":7707408604,"package_name":"jekyll-sass-converter","ecosystem":"rubygems","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":7707408605,"package_name":"jekyll-seo-tag","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":7707408606,"package_name":"jekyll-watch","ecosystem":"rubygems","requirements":"2.2.1","direct":false,"kind":"runtime","optional":false},{"id":7707408607,"package_name":"json","ecosystem":"rubygems","requirements":"2.6.2","direct":false,"kind":"runtime","optional":false},{"id":7707408608,"package_name":"kramdown","ecosystem":"rubygems","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":7707408610,"package_name":"kramdown-parser-gfm","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":7707408611,"package_name":"liquid","ecosystem":"rubygems","requirements":"4.0.3","direct":false,"kind":"runtime","optional":false},{"id":7707408612,"package_name":"listen","ecosystem":"rubygems","requirements":"3.7.1","direct":false,"kind":"runtime","optional":false},{"id":7707408613,"package_name":"mercenary","ecosystem":"rubygems","requirements":"0.4.0","direct":false,"kind":"runtime","optional":false},{"id":7707408614,"package_name":"minitest","ecosystem":"rubygems","requirements":"5.16.2","direct":false,"kind":"runtime","optional":false},{"id":7707408615,"package_name":"nokogiri","ecosystem":"rubygems","requirements":"1.13.6","direct":false,"kind":"runtime","optional":false},{"id":7707408616,"package_name":"parallel","ecosystem":"rubygems","requirements":"1.22.1","direct":false,"kind":"runtime","optional":false},{"id":7707408617,"package_name":"parser","ecosystem":"rubygems","requirements":"3.1.2.0","direct":false,"kind":"runtime","optional":false},{"id":7707408618,"package_name":"pathutil","ecosystem":"rubygems","requirements":"0.16.2","direct":false,"kind":"runtime","optional":false},{"id":7707408619,"package_name":"public_suffix","ecosystem":"rubygems","requirements":"4.0.7","direct":false,"kind":"runtime","optional":false},{"id":7707408621,"package_name":"racc","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":7707408622,"package_name":"rack","ecosystem":"rubygems","requirements":"2.2.4","direct":false,"kind":"runtime","optional":false},{"id":7707408623,"package_name":"rainbow","ecosystem":"rubygems","requirements":"3.1.1","direct":false,"kind":"runtime","optional":false},{"id":7707408624,"package_name":"rb-fsevent","ecosystem":"rubygems","requirements":"0.11.1","direct":false,"kind":"runtime","optional":false},{"id":7707408625,"package_name":"rb-inotify","ecosystem":"rubygems","requirements":"0.10.1","direct":false,"kind":"runtime","optional":false},{"id":7707408626,"package_name":"regexp_parser","ecosystem":"rubygems","requirements":"2.5.0","direct":false,"kind":"runtime","optional":false},{"id":7707408627,"package_name":"rexml","ecosystem":"rubygems","requirements":"3.2.5","direct":false,"kind":"runtime","optional":false},{"id":7707408628,"package_name":"rouge","ecosystem":"rubygems","requirements":"3.29.0","direct":false,"kind":"runtime","optional":false},{"id":7707408629,"package_name":"rubocop","ecosystem":"rubygems","requirements":"1.31.2","direct":false,"kind":"runtime","optional":false},{"id":7707408630,"package_name":"rubocop-ast","ecosystem":"rubygems","requirements":"1.19.1","direct":false,"kind":"runtime","optional":false},{"id":7707408632,"package_name":"rubocop-github","ecosystem":"rubygems","requirements":"0.18.0","direct":false,"kind":"runtime","optional":false},{"id":7707408635,"package_name":"rubocop-performance","ecosystem":"rubygems","requirements":"1.14.2","direct":false,"kind":"runtime","optional":false},{"id":7707408636,"package_name":"rubocop-rails","ecosystem":"rubygems","requirements":"2.15.2","direct":false,"kind":"runtime","optional":false},{"id":7707408637,"package_name":"ruby-progressbar","ecosystem":"rubygems","requirements":"1.11.0","direct":false,"kind":"runtime","optional":false},{"id":7707408639,"package_name":"safe_yaml","ecosystem":"rubygems","requirements":"1.0.5","direct":false,"kind":"runtime","optional":false},{"id":7707408640,"package_name":"sassc","ecosystem":"rubygems","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":7707408641,"package_name":"terminal-table","ecosystem":"rubygems","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":7707408642,"package_name":"typhoeus","ecosystem":"rubygems","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":7707408643,"package_name":"tzinfo","ecosystem":"rubygems","requirements":"2.0.4","direct":false,"kind":"runtime","optional":false},{"id":7707408645,"package_name":"unicode-display_width","ecosystem":"rubygems","requirements":"1.8.0","direct":false,"kind":"runtime","optional":false},{"id":7707408646,"package_name":"w3c_validators","ecosystem":"rubygems","requirements":"1.3.7","direct":false,"kind":"runtime","optional":false},{"id":7707408648,"package_name":"yell","ecosystem":"rubygems","requirements":"2.2.2","direct":false,"kind":"runtime","optional":false},{"id":7707408651,"package_name":"zeitwerk","ecosystem":"rubygems","requirements":"2.6.0","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"docs/jekyll-theme-minimal.gemspec","sha":null,"kind":"manifest","created_at":"2023-02-16T08:01:04.564Z","updated_at":"2023-02-16T08:01:04.564Z","repository_link":"https://github.com/tudelft3d/terrainbook/blob/main/docs/jekyll-theme-minimal.gemspec","dependencies":[{"id":7707412214,"package_name":"jekyll","ecosystem":"rubygems","requirements":"\u003e 3.5, \u003c 5.0","direct":true,"kind":"runtime","optional":false},{"id":7707412218,"package_name":"jekyll-seo-tag","ecosystem":"rubygems","requirements":"~\u003e 2.0","direct":true,"kind":"runtime","optional":false},{"id":7707412220,"package_name":"html-proofer","ecosystem":"rubygems","requirements":"~\u003e 3.0","direct":true,"kind":"development","optional":false},{"id":7707412222,"package_name":"rubocop-github","ecosystem":"rubygems","requirements":"~\u003e 0.16","direct":true,"kind":"development","optional":false},{"id":7707412224,"package_name":"w3c_validators","ecosystem":"rubygems","requirements":"~\u003e 1.3","direct":true,"kind":"development","optional":false}]}],"score":6.907755278982137,"created_at":"2025-09-04T15:50:11.188Z","updated_at":"2025-10-07T08:05:02.061Z","avatar_url":"https://github.com/tudelft3d.png","language":"TeX","category":null,"sub_category":null,"monthly_downloads":0,"funding_links":[],"readme_doi_urls":["https://doi.org/10.5281/zenodo.3992107"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["3dgis","citygml","cityjson","laz","yaml-cpp"],"project_url":"https://science.ecosyste.ms/api/v1/projects/4347","html_url":"https://science.ecosyste.ms/projects/4347","bibtex_url":"https://science.ecosyste.ms/projects/4347/export.bibtex","apalike_url":"https://science.ecosyste.ms/projects/4347/export.apalike"}