Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Joseph Siddons
GeoSpatialTools
Commits
01f7c77e
Commit
01f7c77e
authored
5 months ago
by
Joseph Siddons
Browse files
Options
Download
Email Patches
Plain Diff
feat(kdtree_query): Querying KDTree now returns list of neighbours
parent
f9bc5809
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
13 additions
and
10 deletions
+13
-10
GeoSpatialTools/kdtree.py
GeoSpatialTools/kdtree.py
+13
-10
No files found.
GeoSpatialTools/kdtree.py
View file @
01f7c77e
...
...
@@ -96,7 +96,7 @@ class KDTree:
else
:
return
self
.
child_right
.
delete
(
point
)
def
query
(
self
,
point
)
->
tuple
[
Record
|
None
,
float
]:
def
query
(
self
,
point
)
->
tuple
[
list
[
Record
]
,
float
]:
"""Find the nearest Record within the KDTree to a query Record"""
if
point
.
lon
<
0
:
point2
=
Record
(
point
.
lon
+
360
,
point
.
lat
)
...
...
@@ -106,32 +106,35 @@ class KDTree:
r1
,
d1
=
self
.
_query
(
point
)
r2
,
d2
=
self
.
_query
(
point2
)
if
d1
<=
d2
:
r
=
r
1
r
eturn
r1
,
d
1
else
:
r
=
r2
return
r
,
point
.
distance
(
r
)
return
r2
,
d2
def
_query
(
self
,
point
:
Record
,
current_best
:
Record
|
None
=
None
,
current_best
:
list
[
Record
]
|
None
=
None
,
best_distance
:
float
=
inf
,
)
->
tuple
[
Record
|
None
,
float
]:
)
->
tuple
[
list
[
Record
],
float
]:
if
current_best
is
None
:
current_best
=
list
()
if
not
self
.
split
:
for
p
in
self
.
points
:
dist
=
point
.
distance
(
p
)
if
dist
<
best_distance
:
current_best
=
p
current_best
=
[
p
]
best_distance
=
dist
elif
dist
==
best_distance
:
current_best
.
append
(
p
)
return
current_best
,
best_distance
if
getattr
(
point
,
self
.
variable
)
<
self
.
partition_value
:
if
getattr
(
point
,
self
.
variable
)
<
=
self
.
partition_value
:
current_best
,
best_distance
=
self
.
child_left
.
_query
(
point
,
current_best
,
best_distance
)
if
(
point
.
distance
(
self
.
_get_partition_record
(
point
))
<
best_distance
<
=
best_distance
):
current_best
,
best_distance
=
self
.
child_right
.
_query
(
point
,
current_best
,
best_distance
...
...
@@ -142,7 +145,7 @@ class KDTree:
)
if
(
point
.
distance
(
self
.
_get_partition_record
(
point
))
<
best_distance
<
=
best_distance
):
current_best
,
best_distance
=
self
.
child_left
.
_query
(
point
,
current_best
,
best_distance
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment