Skip to content

Instantly share code, notes, and snippets.

@sandfox
Created November 9, 2012 13:11
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sandfox/85f5ab526a9158b2cd30 to your computer and use it in GitHub Desktop.
Save sandfox/85f5ab526a9158b2cd30 to your computer and use it in GitHub Desktop.
Using KDTree for geospatial lookups (slightly experimental) (this is an untested example)
<!Doctype html>
<html>
<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/zepto/1.0rc1/zepto.min.js"></script>
<script src="script.js"></script>
</head>
<a id="button" href="#">
<p>I AM A BUTTON</p>
</a>
<script type="text/javascript" src="kdtree.js"></script>
</body>
</html>
var storeTree = [];
var getNearest = function(location) {
nearest = storeTree.getNearestNeighbour({
x: location.coords.longitude,
y: location.coords.latitude
});
//if you just more than one result then use this function instead - returns an array of objects
/**
* storeTree.getNearestNeighbours({
* x: location.coords.longitude,
* y: location.coords.latitude
*}, 1); //Number of results you want returned - they are always returned as an array
*/
//data/records/XXX/.json is arbitary path
$.getJSON('data/records/' + nearest.id + '.json',
function(returnedObject) {
//Do something with the returned object
});
};
var errorFunc = function(err){
console.log(err);
}
$(document).ready(function () {
//Load up the index of stores - this is an odd way to do it
$.getJSON('data/records/index.json', function(data){
if(Array.isArray(data)) {
storeTree = new KDTree(data);
} else {
storeTree = new KDTree([]);
storeTree.rootNode = data.rootNode;
}
});
$('#button').click(function () {
navigator.geolocation.getCurrentPosition(getNearest, errorFunc, { enableHighAccuracy:true, timeout:1200, maximumAge:0 });
})
});
@sandfox
Copy link
Author

sandfox commented Nov 12, 2012

TODO - stop this using zepto if we can (or make another version which doesn't use it)
TODO - Move out kdtree into a gh repo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment