{"id":18914596,"url":"https://github.com/helium/kdtree","last_synced_at":"2025-04-15T08:31:23.018Z","repository":{"id":57512976,"uuid":"115957386","full_name":"helium/kdtree","owner":"helium","description":"Simple kdtree library in erlang","archived":false,"fork":false,"pushed_at":"2019-07-02T22:13:48.000Z","size":2139,"stargazers_count":11,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T18:54:37.722Z","etag":null,"topics":["erlang","erlang-library","erlang-otp","kdtree","kdtrees"],"latest_commit_sha":null,"homepage":null,"language":"Erlang","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/helium.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-01-02T00:09:40.000Z","updated_at":"2025-03-13T04:47:23.000Z","dependencies_parsed_at":"2022-08-31T22:51:48.412Z","dependency_job_id":null,"html_url":"https://github.com/helium/kdtree","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helium%2Fkdtree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helium%2Fkdtree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helium%2Fkdtree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helium%2Fkdtree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/helium","download_url":"https://codeload.github.com/helium/kdtree/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249035485,"owners_count":21202092,"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","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"}},"keywords":["erlang","erlang-library","erlang-otp","kdtree","kdtrees"],"created_at":"2024-11-08T10:12:07.141Z","updated_at":"2025-04-15T08:31:22.671Z","avatar_url":"https://github.com/helium.png","language":"Erlang","funding_links":[],"categories":[],"sub_categories":[],"readme":"kdtree\n=====\n\nErlang implementation of kdtree\n\nImplementation:\n-----\n* Uses [haversine distance](https://en.wikipedia.org/wiki/Haversine_formula) to approximate the distance between two GPS coordinates.\n* Building a tree from a list of coordinates takes O(nlog(n)) time complexity.\n* I've added a placeholder on the node which allows you to put in any value/data. I use it to add PIDs as an example.\n* Search takes O(log(n)) time complexity.\n\nBuild\n-----\n\n    $ make\n\nTest\n-----\n\n    $ make test\n\nTypecheck\n-----\n\n    $ make typecheck\n\n#### Example:\n```Erlang\n1\u003e List = [{{48.55321,-125.02235}, make_ref()},\n1\u003e {{45.26664,-66.06525}, make_ref()},\n1\u003e {{51.64982,-121.28594}, make_ref()},\n1\u003e {{51.6675,-121.29361}, make_ref()},\n1\u003e {{47.811,-53.97733}, make_ref()},\n1\u003e {{51.685,-121.29861}, make_ref()},\n1\u003e {{63.89335,-139.1991}, make_ref()},\n1\u003e {{51.84983,-121.60273}, make_ref()}].\n[{{48.55321,-125.02235},\n  #Ref\u003c0.3804993279.2739142657.109428\u003e},\n {{45.26664,-66.06525},#Ref\u003c0.3804993279.2739142657.109429\u003e},\n {{51.64982,-121.28594},#Ref\u003c0.3804993279.2739142657.109430\u003e},\n {{51.6675,-121.29361},#Ref\u003c0.3804993279.2739142657.109431\u003e},\n {{47.811,-53.97733},#Ref\u003c0.3804993279.2739142657.109432\u003e},\n {{51.685,-121.29861},#Ref\u003c0.3804993279.2739142657.109433\u003e},\n {{63.89335,-139.1991},#Ref\u003c0.3804993279.2739142657.109434\u003e},\n {{51.84983,-121.60273},\n  #Ref\u003c0.3804993279.2739142657.109435\u003e}]\n2\u003e Tree = kdtree:from_list(List).\n{node,{51.6675,-121.29361},\n      #Ref\u003c0.3804993279.2739142657.109431\u003e,\n      {node,{51.64982,-121.28594},\n            #Ref\u003c0.3804993279.2739142657.109430\u003e,\n            {node,{48.55321,-125.02235},\n                  #Ref\u003c0.3804993279.2739142657.109428\u003e,\n                  {node,{45.26664,-66.06525},\n                        #Ref\u003c0.3804993279.2739142657.109429\u003e,undefined,undefined},\n                  undefined},\n            {node,{47.811,-53.97733},\n                  #Ref\u003c0.3804993279.2739142657.109432\u003e,undefined,undefined}},\n      {node,{63.89335,-139.1991},\n            #Ref\u003c0.3804993279.2739142657.109434\u003e,\n            {node,{51.685,-121.29861},\n                  #Ref\u003c0.3804993279.2739142657.109433\u003e,undefined,undefined},\n            {node,{51.84983,-121.60273},\n                  #Ref\u003c0.3804993279.2739142657.109435\u003e,undefined,undefined}}}\n3\u003e kdtree:nearest(Tree, {51.685,-121.29861}).\n{{{51.6675,-121.29361},#Ref\u003c0.3804993279.2739142657.109431\u003e},\n 1.2286600794979432}\n4\u003e kdtree:nearby(Tree, {51.685,-121.29861}, 10).\n[{{51.64982,-121.28594},\n  #Ref\u003c0.3804993279.2739142657.109430\u003e},\n {{51.6675,-121.29361},#Ref\u003c0.3804993279.2739142657.109431\u003e}]\n```\n\nReferences\n-----\n[k-d tree](https://en.wikipedia.org/wiki/K-d_tree)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelium%2Fkdtree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhelium%2Fkdtree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelium%2Fkdtree/lists"}