Skip to content

Commit c137061

Browse files
committed
Add pyproj and methods to set center and zoom
1 parent 44610a5 commit c137061

File tree

6 files changed

+28
-2
lines changed

6 files changed

+28
-2
lines changed

docs/examples/concepts/basic_map.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@
77
m.add_control(ol.FullScreenControl())
88

99
# m.add_view_call("setZoom", 5)
10-
m.set_zoom(5)
10+
m.set_zoom(12)
11+
m.set_center(lonlat=(-122.4, 37.74))
1112
m.save()

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ dependencies = [
1010
"eval-type-backport>=0.2.2",
1111
"jinja2>=3.1.6",
1212
"pydantic>=2.5.3",
13+
"pyproj>=3.6.1",
1314
]
1415

1516
# [project.scripts]

src/openlayers/map.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ def set_zoom(self, zoom_level: float | int) -> None:
6464
zoom_level (float | int): The zoom level of the view
6565
"""
6666
self.add_view_call("setZoom", zoom_level)
67+
68+
def set_center(self, lonlat: tuple[float, float] = None, center: tuple[float, float] = None) -> None:
69+
from .utils import default_crs_transformer
70+
71+
center = center or default_crs_transformer().transform(*lonlat)
72+
self.add_view_call("setCenter", center)
6773

6874
def add_layer(self, layer: LayerT | LayerLike | dict) -> None:
6975
"""Add a layer to the map

src/openlayers/utils.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22

33
import base64
44
from pathlib import Path
5-
5+
from pyproj import Transformer, CRS
66

77
def create_icon_src_from_file(filename: str) -> bytes:
88
with open(filename, "rb") as f:
99
encoded_image = base64.b64encode(f.read()).decode("utf-8")
1010

1111
image_type = Path(filename).suffix.replace(".", "")
1212
return f"data:image/{image_type};base64," + encoded_image
13+
14+
def default_crs_transformer() -> Transformer:
15+
crs_from = CRS.from_epsg(4326)
16+
crs_to = CRS.from_epsg(3857)
17+
return Transformer.from_crs(crs_from=crs_from, crs_to=crs_to, always_xy=True)

tests/test_utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from openlayers.utils import default_crs_transformer
2+
3+
def test_crs_transformer() -> None:
4+
lon = -122.4
5+
lat = 37.74
6+
7+
transformer = default_crs_transformer()
8+
center = (lon, lat)
9+
coords = transformer.transform(*center)
10+
11+
print(coords)

uv.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)