Skip to content

Commit

Permalink
Merge pull request #23 from openstreetmap-polska/dev
Browse files Browse the repository at this point in the history
Release to main
  • Loading branch information
Zaczero authored Aug 15, 2023
2 parents 9c8ea34 + 5db19a0 commit f458e50
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 8 deletions.
27 changes: 20 additions & 7 deletions models/bbox.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from itertools import chain
from typing import NamedTuple, Self, Sequence

from shapely.geometry import Polygon
Expand Down Expand Up @@ -31,13 +32,25 @@ def from_tuple(cls, bbox: tuple[float, float, float, float]) -> Self:
def to_tuple(self) -> tuple[float, float, float, float]:
return (self.p1.lon, self.p1.lat, self.p2.lon, self.p2.lat)

def to_polygon(self) -> Polygon:
return Polygon([
(self.p1.lon, self.p1.lat),
(self.p2.lon, self.p1.lat),
(self.p2.lon, self.p2.lat),
(self.p1.lon, self.p2.lat),
(self.p1.lon, self.p1.lat)])
def to_polygon(self, *, nodes_per_edge: int = 2) -> Polygon:
if nodes_per_edge <= 2:
return Polygon([
(self.p1.lon, self.p1.lat),
(self.p2.lon, self.p1.lat),
(self.p2.lon, self.p2.lat),
(self.p1.lon, self.p2.lat),
(self.p1.lon, self.p1.lat)
])

x_interval = (self.p2.lon - self.p1.lon) / (nodes_per_edge - 1)
y_interval = (self.p2.lat - self.p1.lat) / (nodes_per_edge - 1)

bottom_edge = tuple((self.p1.lon + i * x_interval, self.p1.lat) for i in range(nodes_per_edge))
top_edge = tuple((self.p1.lon + i * x_interval, self.p2.lat) for i in range(nodes_per_edge))
left_edge = tuple((self.p1.lon, self.p1.lat + i * y_interval) for i in range(1, nodes_per_edge - 1))
right_edge = tuple((self.p2.lon, self.p1.lat + i * y_interval) for i in range(1, nodes_per_edge - 1))

return Polygon(chain(bottom_edge, right_edge, reversed(top_edge), reversed(left_edge)))

def correct_for_dateline(self) -> Sequence[Self]:
if self.p1.lon > self.p2.lon:
Expand Down
1 change: 1 addition & 0 deletions shell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ with pkgs; let
'';

devShellHook = ''
export LD_LIBRARY_PATH="${lib.makeLibraryPath commonBuildInputs}"
export PIPENV_VENV_IN_PROJECT=1
export PIPENV_VERBOSITY=-1
[ ! -f .venv/bin/activate ] && pipenv sync --dev
Expand Down
2 changes: 1 addition & 1 deletion states/country_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ async def get_countries_within(self, bbox_or_pos: BBox | LonLat) -> Sequence[Cou
'geometry': {
'$geoIntersects': {
'$geometry': mapping(
bbox_or_pos.extend(0.1).to_polygon()
bbox_or_pos.to_polygon(nodes_per_edge=8)
if isinstance(bbox_or_pos, BBox) else
Point(bbox_or_pos.lon, bbox_or_pos.lat))
}
Expand Down

0 comments on commit f458e50

Please sign in to comment.