Skip to content

Commit 66115e1

Browse files
committed
Add icon style to geopandas
1 parent d2d656b commit 66115e1

File tree

3 files changed

+297
-4
lines changed

3 files changed

+297
-4
lines changed
Lines changed: 289 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,289 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 1,
6+
"id": "39739f98",
7+
"metadata": {},
8+
"outputs": [],
9+
"source": [
10+
"import openlayers as ol\n",
11+
"from openlayers.geopandas import GeoDataFrame"
12+
]
13+
},
14+
{
15+
"cell_type": "code",
16+
"execution_count": 2,
17+
"id": "c84609d7-996a-4316-a156-c39cebaef37d",
18+
"metadata": {},
19+
"outputs": [],
20+
"source": [
21+
"data = \"https://maplibre.org/maplibre-gl-js/docs/assets/earthquakes.geojson\""
22+
]
23+
},
24+
{
25+
"cell_type": "code",
26+
"execution_count": 3,
27+
"id": "fb037c28",
28+
"metadata": {},
29+
"outputs": [],
30+
"source": [
31+
"gdf = GeoDataFrame.from_file(data)"
32+
]
33+
},
34+
{
35+
"cell_type": "code",
36+
"execution_count": 4,
37+
"id": "88729a9d-5ea2-48fd-ace8-5010f6e2a04b",
38+
"metadata": {},
39+
"outputs": [
40+
{
41+
"data": {
42+
"text/html": [
43+
"<div>\n",
44+
"<style scoped>\n",
45+
" .dataframe tbody tr th:only-of-type {\n",
46+
" vertical-align: middle;\n",
47+
" }\n",
48+
"\n",
49+
" .dataframe tbody tr th {\n",
50+
" vertical-align: top;\n",
51+
" }\n",
52+
"\n",
53+
" .dataframe thead th {\n",
54+
" text-align: right;\n",
55+
" }\n",
56+
"</style>\n",
57+
"<table border=\"1\" class=\"dataframe\">\n",
58+
" <thead>\n",
59+
" <tr style=\"text-align: right;\">\n",
60+
" <th></th>\n",
61+
" <th>id</th>\n",
62+
" <th>mag</th>\n",
63+
" <th>time</th>\n",
64+
" <th>felt</th>\n",
65+
" <th>tsunami</th>\n",
66+
" <th>geometry</th>\n",
67+
" </tr>\n",
68+
" </thead>\n",
69+
" <tbody>\n",
70+
" <tr>\n",
71+
" <th>0</th>\n",
72+
" <td>ak16994521</td>\n",
73+
" <td>2.30</td>\n",
74+
" <td>1507425650893</td>\n",
75+
" <td>NaN</td>\n",
76+
" <td>0</td>\n",
77+
" <td>POINT Z (-151.5129 63.1016 0)</td>\n",
78+
" </tr>\n",
79+
" <tr>\n",
80+
" <th>1</th>\n",
81+
" <td>ak16994519</td>\n",
82+
" <td>1.70</td>\n",
83+
" <td>1507425289659</td>\n",
84+
" <td>NaN</td>\n",
85+
" <td>0</td>\n",
86+
" <td>POINT Z (-150.4048 63.1224 105.5)</td>\n",
87+
" </tr>\n",
88+
" <tr>\n",
89+
" <th>2</th>\n",
90+
" <td>ak16994517</td>\n",
91+
" <td>1.60</td>\n",
92+
" <td>1507424832518</td>\n",
93+
" <td>NaN</td>\n",
94+
" <td>0</td>\n",
95+
" <td>POINT Z (-151.3597 63.0781 0)</td>\n",
96+
" </tr>\n",
97+
" <tr>\n",
98+
" <th>3</th>\n",
99+
" <td>ci38021336</td>\n",
100+
" <td>1.42</td>\n",
101+
" <td>1507423898710</td>\n",
102+
" <td>NaN</td>\n",
103+
" <td>0</td>\n",
104+
" <td>POINT Z (-118.497 34.29967 7.64)</td>\n",
105+
" </tr>\n",
106+
" <tr>\n",
107+
" <th>4</th>\n",
108+
" <td>us2000b2nn</td>\n",
109+
" <td>4.20</td>\n",
110+
" <td>1507422626990</td>\n",
111+
" <td>NaN</td>\n",
112+
" <td>0</td>\n",
113+
" <td>POINT Z (-87.6901 12.0623 46.41)</td>\n",
114+
" </tr>\n",
115+
" <tr>\n",
116+
" <th>...</th>\n",
117+
" <td>...</td>\n",
118+
" <td>...</td>\n",
119+
" <td>...</td>\n",
120+
" <td>...</td>\n",
121+
" <td>...</td>\n",
122+
" <td>...</td>\n",
123+
" </tr>\n",
124+
" <tr>\n",
125+
" <th>6102</th>\n",
126+
" <td>uw61304877</td>\n",
127+
" <td>1.15</td>\n",
128+
" <td>1504836765080</td>\n",
129+
" <td>NaN</td>\n",
130+
" <td>0</td>\n",
131+
" <td>POINT Z (-122.56833 48.69917 3.29)</td>\n",
132+
" </tr>\n",
133+
" <tr>\n",
134+
" <th>6103</th>\n",
135+
" <td>us2000ahu8</td>\n",
136+
" <td>3.70</td>\n",
137+
" <td>1504836433340</td>\n",
138+
" <td>2.0</td>\n",
139+
" <td>0</td>\n",
140+
" <td>POINT Z (-111.4569 42.6238 5)</td>\n",
141+
" </tr>\n",
142+
" <tr>\n",
143+
" <th>6104</th>\n",
144+
" <td>nc72888096</td>\n",
145+
" <td>2.03</td>\n",
146+
" <td>1504835142230</td>\n",
147+
" <td>4.0</td>\n",
148+
" <td>0</td>\n",
149+
" <td>POINT Z (-122.05367 37.83517 7.59)</td>\n",
150+
" </tr>\n",
151+
" <tr>\n",
152+
" <th>6105</th>\n",
153+
" <td>ak16821829</td>\n",
154+
" <td>1.50</td>\n",
155+
" <td>1504834613166</td>\n",
156+
" <td>NaN</td>\n",
157+
" <td>0</td>\n",
158+
" <td>POINT Z (-163.7652 67.5597 6.1)</td>\n",
159+
" </tr>\n",
160+
" <tr>\n",
161+
" <th>6106</th>\n",
162+
" <td>hv61900626</td>\n",
163+
" <td>2.91</td>\n",
164+
" <td>1504833891990</td>\n",
165+
" <td>NaN</td>\n",
166+
" <td>0</td>\n",
167+
" <td>POINT Z (-155.01183 19.39933 2.609)</td>\n",
168+
" </tr>\n",
169+
" </tbody>\n",
170+
"</table>\n",
171+
"<p>6107 rows × 6 columns</p>\n",
172+
"</div>"
173+
],
174+
"text/plain": [
175+
" id mag time felt tsunami \\\n",
176+
"0 ak16994521 2.30 1507425650893 NaN 0 \n",
177+
"1 ak16994519 1.70 1507425289659 NaN 0 \n",
178+
"2 ak16994517 1.60 1507424832518 NaN 0 \n",
179+
"3 ci38021336 1.42 1507423898710 NaN 0 \n",
180+
"4 us2000b2nn 4.20 1507422626990 NaN 0 \n",
181+
"... ... ... ... ... ... \n",
182+
"6102 uw61304877 1.15 1504836765080 NaN 0 \n",
183+
"6103 us2000ahu8 3.70 1504836433340 2.0 0 \n",
184+
"6104 nc72888096 2.03 1504835142230 4.0 0 \n",
185+
"6105 ak16821829 1.50 1504834613166 NaN 0 \n",
186+
"6106 hv61900626 2.91 1504833891990 NaN 0 \n",
187+
"\n",
188+
" geometry \n",
189+
"0 POINT Z (-151.5129 63.1016 0) \n",
190+
"1 POINT Z (-150.4048 63.1224 105.5) \n",
191+
"2 POINT Z (-151.3597 63.0781 0) \n",
192+
"3 POINT Z (-118.497 34.29967 7.64) \n",
193+
"4 POINT Z (-87.6901 12.0623 46.41) \n",
194+
"... ... \n",
195+
"6102 POINT Z (-122.56833 48.69917 3.29) \n",
196+
"6103 POINT Z (-111.4569 42.6238 5) \n",
197+
"6104 POINT Z (-122.05367 37.83517 7.59) \n",
198+
"6105 POINT Z (-163.7652 67.5597 6.1) \n",
199+
"6106 POINT Z (-155.01183 19.39933 2.609) \n",
200+
"\n",
201+
"[6107 rows x 6 columns]"
202+
]
203+
},
204+
"execution_count": 4,
205+
"metadata": {},
206+
"output_type": "execute_result"
207+
}
208+
],
209+
"source": [
210+
"gdf"
211+
]
212+
},
213+
{
214+
"cell_type": "code",
215+
"execution_count": 7,
216+
"id": "fa678da4-ead3-489c-9296-5907060d9077",
217+
"metadata": {},
218+
"outputs": [],
219+
"source": [
220+
"m = gdf.ol.icon(icon_src=\"https://upload.wikimedia.org/wikipedia/commons/7/7c/201408_cat.png\", icon_scale=0.1).explore()"
221+
]
222+
},
223+
{
224+
"cell_type": "code",
225+
"execution_count": 9,
226+
"id": "f25f4d6d-bf6a-4c0c-9f99-99382b8e9dfb",
227+
"metadata": {},
228+
"outputs": [
229+
{
230+
"data": {
231+
"application/vnd.jupyter.widget-view+json": {
232+
"model_id": "4b717fb6022b4d05b03bfda16129f179",
233+
"version_major": 2,
234+
"version_minor": 1
235+
},
236+
"text/plain": [
237+
"MapWidget(calls=[{'method': 'addLayer', 'args': ({'id': 'geopandas', 'source': {'@@geojson': {'type': 'Feature…"
238+
]
239+
},
240+
"execution_count": 9,
241+
"metadata": {},
242+
"output_type": "execute_result"
243+
}
244+
],
245+
"source": [
246+
"m"
247+
]
248+
},
249+
{
250+
"cell_type": "code",
251+
"execution_count": 1,
252+
"id": "74dea72b-2158-4347-984f-6d62c130c01e",
253+
"metadata": {},
254+
"outputs": [],
255+
"source": [
256+
"# gdf[0:10]"
257+
]
258+
},
259+
{
260+
"cell_type": "code",
261+
"execution_count": null,
262+
"id": "beca60c5-3925-45f1-a7d5-1a409deb6272",
263+
"metadata": {},
264+
"outputs": [],
265+
"source": []
266+
}
267+
],
268+
"metadata": {
269+
"kernelspec": {
270+
"display_name": "Python 3 (ipykernel)",
271+
"language": "python",
272+
"name": "python3"
273+
},
274+
"language_info": {
275+
"codemirror_mode": {
276+
"name": "ipython",
277+
"version": 3
278+
},
279+
"file_extension": ".py",
280+
"mimetype": "text/x-python",
281+
"name": "python",
282+
"nbconvert_exporter": "python",
283+
"pygments_lexer": "ipython3",
284+
"version": "3.11.11"
285+
}
286+
},
287+
"nbformat": 4,
288+
"nbformat_minor": 5
289+
}

notebooks/layers/geojson.ipynb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"cells": [
33
{
44
"cell_type": "code",
5-
"execution_count": 1,
5+
"execution_count": null,
66
"id": "60fa6ce0-0354-44d5-8250-eb84224c70ef",
77
"metadata": {},
88
"outputs": [],
@@ -130,7 +130,7 @@
130130
],
131131
"metadata": {
132132
"kernelspec": {
133-
"display_name": "Python 3 (ipykernel)",
133+
"display_name": ".venv",
134134
"language": "python",
135135
"name": "python3"
136136
},

src/openlayers/geopandas.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ def explore(
8686
layer_id (str): The ID of the layer
8787
webgl (bool): Whether the layer should be added to the map
8888
as `WebGLVectorLayer` or as `VectorLayer`
89+
90+
Returns:
91+
A new `MapWidget` instance
8992
"""
9093
layer = self.to_layer(style=style, layer_id=layer_id, webgl=webgl)
9194

@@ -104,11 +107,12 @@ def color_category(self, column: str) -> Self:
104107
self._default_style.circle_fill_color = ["get", COLOR_COLUMN]
105108
return self
106109

107-
108110
def icon(self, icon_src: str, icon_scale: float = 1, **kwargs) -> Self:
109-
# TODO: implement
111+
# TODO: Use style model instead
112+
self._default_style = {"icon-src": icon_src, "icon-scale": icon_scale} | kwargs
110113
return self
111114

115+
112116
@pd.api.extensions.register_dataframe_accessor("openlayers")
113117
class OpenLayersAccessor(OLAccessor): ...
114118

0 commit comments

Comments
 (0)