flet-map 0.0.1__py3-none-any.whl → 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flet-map might be problematic. Click here for more details.
- flet_map/__init__.py +30 -1
- flet_map/circle_layer.py +156 -0
- flet_map/map.py +674 -0
- flet_map/map_layer.py +26 -0
- flet_map/marker_layer.py +183 -0
- flet_map/polygon_layer.py +262 -0
- flet_map/polyline_layer.py +292 -0
- flet_map/rich_attribution.py +141 -0
- flet_map/simple_attribution.py +86 -0
- flet_map/text_source_attribution.py +87 -0
- flet_map/tile_layer.py +278 -0
- flet_map-0.1.0.dist-info/METADATA +168 -0
- flet_map-0.1.0.dist-info/RECORD +34 -0
- {flet_map-0.0.1.dist-info → flet_map-0.1.0.dist-info}/WHEEL +2 -1
- flet_map-0.1.0.dist-info/top_level.txt +2 -0
- flutter/flet_map/CHANGELOG.md +3 -0
- flutter/flet_map/LICENSE +201 -0
- flutter/flet_map/README.md +3 -0
- flutter/flet_map/analysis_options.yaml +4 -0
- flutter/flet_map/lib/flet_map.dart +3 -0
- flutter/flet_map/lib/src/circle_layer.dart +43 -0
- flutter/flet_map/lib/src/create_control.dart +70 -0
- flutter/flet_map/lib/src/map.dart +140 -0
- flutter/flet_map/lib/src/marker_layer.dart +50 -0
- flutter/flet_map/lib/src/polygon_layer.dart +68 -0
- flutter/flet_map/lib/src/polyline_layer.dart +80 -0
- flutter/flet_map/lib/src/rich_attribution.dart +61 -0
- flutter/flet_map/lib/src/simple_attribution.dart +37 -0
- flutter/flet_map/lib/src/text_source_attribution.dart +29 -0
- flutter/flet_map/lib/src/tile_layer.dart +80 -0
- flutter/flet_map/lib/src/utils/attribution_alignment.dart +12 -0
- flutter/flet_map/lib/src/utils/map.dart +280 -0
- flutter/flet_map/pubspec.lock +831 -0
- flutter/flet_map/pubspec.yaml +21 -0
- .DS_Store +0 -0
- flet_map/.DS_Store +0 -0
- flet_map-0.0.1.dist-info/.DS_Store +0 -0
- flet_map-0.0.1.dist-info/METADATA +0 -14
- flet_map-0.0.1.dist-info/RECORD +0 -7
flet_map/tile_layer.py
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import Any, Dict, List, Optional
|
|
3
|
+
|
|
4
|
+
from flet.core.control import OptionalNumber
|
|
5
|
+
from flet_map.map import MapLatitudeLongitudeBounds
|
|
6
|
+
from flet_map.map_layer import MapLayer
|
|
7
|
+
from flet.core.ref import Ref
|
|
8
|
+
from flet.core.types import OptionalControlEventCallable
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class MapTileLayerEvictErrorTileStrategy(Enum):
|
|
12
|
+
DISPOSE = "dispose"
|
|
13
|
+
NOT_VISIBLE = "notVisible"
|
|
14
|
+
NOT_VISIBLE_RESPECT_MARGIN = "notVisibleRespectMargin"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TileLayer(MapLayer):
|
|
18
|
+
"""
|
|
19
|
+
The Map's main layer.
|
|
20
|
+
Displays square raster images in a continuous grid, sourced from the provided utl_template.
|
|
21
|
+
|
|
22
|
+
-----
|
|
23
|
+
|
|
24
|
+
Online docs: https://flet.dev/docs/controls/maptilelayer
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(
|
|
28
|
+
self,
|
|
29
|
+
url_template: str,
|
|
30
|
+
fallback_url: Optional[str] = None,
|
|
31
|
+
subdomains: Optional[List[str]] = None,
|
|
32
|
+
tile_bounds: Optional[MapLatitudeLongitudeBounds] = None,
|
|
33
|
+
tile_size: OptionalNumber = None,
|
|
34
|
+
min_native_zoom: Optional[int] = None,
|
|
35
|
+
max_native_zoom: Optional[int] = None,
|
|
36
|
+
zoom_reverse: Optional[bool] = None,
|
|
37
|
+
zoom_offset: OptionalNumber = None,
|
|
38
|
+
keep_buffer: Optional[int] = None,
|
|
39
|
+
pan_buffer: Optional[int] = None,
|
|
40
|
+
enable_tms: Optional[bool] = None,
|
|
41
|
+
keep_alive: Optional[bool] = None,
|
|
42
|
+
enable_retina_mode: Optional[bool] = None,
|
|
43
|
+
additional_options: Optional[Dict[str, str]] = None,
|
|
44
|
+
max_zoom: OptionalNumber = None,
|
|
45
|
+
min_zoom: OptionalNumber = None,
|
|
46
|
+
error_image_src: Optional[str] = None,
|
|
47
|
+
evict_error_tile_strategy: Optional[MapTileLayerEvictErrorTileStrategy] = None,
|
|
48
|
+
on_image_error: OptionalControlEventCallable = None,
|
|
49
|
+
#
|
|
50
|
+
# MapLayer
|
|
51
|
+
#
|
|
52
|
+
ref: Optional[Ref] = None,
|
|
53
|
+
visible: Optional[bool] = None,
|
|
54
|
+
data: Any = None,
|
|
55
|
+
):
|
|
56
|
+
|
|
57
|
+
MapLayer.__init__(
|
|
58
|
+
self,
|
|
59
|
+
ref=ref,
|
|
60
|
+
visible=visible,
|
|
61
|
+
data=data,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
self.url_template = url_template
|
|
65
|
+
self.fallback_url = fallback_url
|
|
66
|
+
self.tile_size = tile_size
|
|
67
|
+
self.min_native_zoom = min_native_zoom
|
|
68
|
+
self.max_native_zoom = max_native_zoom
|
|
69
|
+
self.zoom_reverse = zoom_reverse
|
|
70
|
+
self.zoom_offset = zoom_offset
|
|
71
|
+
self.keep_buffer = keep_buffer
|
|
72
|
+
self.pan_buffer = pan_buffer
|
|
73
|
+
self.enable_tms = enable_tms
|
|
74
|
+
self.keep_alive = keep_alive
|
|
75
|
+
self.max_zoom = max_zoom
|
|
76
|
+
self.min_zoom = min_zoom
|
|
77
|
+
self.error_image_src = error_image_src
|
|
78
|
+
self.enable_retina_mode = enable_retina_mode
|
|
79
|
+
self.on_image_error = on_image_error
|
|
80
|
+
self.tile_bounds = tile_bounds
|
|
81
|
+
self.evict_error_tile_strategy = evict_error_tile_strategy
|
|
82
|
+
self.subdomains = subdomains
|
|
83
|
+
self.additional_options = additional_options
|
|
84
|
+
|
|
85
|
+
def _get_control_name(self):
|
|
86
|
+
return "map_tile_layer"
|
|
87
|
+
|
|
88
|
+
def before_update(self):
|
|
89
|
+
super().before_update()
|
|
90
|
+
assert self.url_template, "url_template is required"
|
|
91
|
+
if isinstance(self.__tile_bounds, MapLatitudeLongitudeBounds):
|
|
92
|
+
self._set_attr_json("tileBounds", self.__tile_bounds)
|
|
93
|
+
if isinstance(self.__subdomains, list):
|
|
94
|
+
self._set_attr_json("subdomains", self.__subdomains)
|
|
95
|
+
if isinstance(self.__additional_options, dict):
|
|
96
|
+
self._set_attr_json("additionalOptions", self.__additional_options)
|
|
97
|
+
|
|
98
|
+
# url_template
|
|
99
|
+
@property
|
|
100
|
+
def url_template(self) -> str:
|
|
101
|
+
return self._get_attr("urlTemplate")
|
|
102
|
+
|
|
103
|
+
@url_template.setter
|
|
104
|
+
def url_template(self, value: str):
|
|
105
|
+
self._set_attr("urlTemplate", value)
|
|
106
|
+
|
|
107
|
+
# fallback_url
|
|
108
|
+
@property
|
|
109
|
+
def fallback_url(self) -> Optional[str]:
|
|
110
|
+
return self._get_attr("fallbackUrl")
|
|
111
|
+
|
|
112
|
+
@fallback_url.setter
|
|
113
|
+
def fallback_url(self, value: Optional[str]):
|
|
114
|
+
self._set_attr("fallbackUrl", value)
|
|
115
|
+
|
|
116
|
+
# subdomains
|
|
117
|
+
@property
|
|
118
|
+
def subdomains(self) -> Optional[List[str]]:
|
|
119
|
+
return self.__subdomains
|
|
120
|
+
|
|
121
|
+
@subdomains.setter
|
|
122
|
+
def subdomains(self, value: Optional[List[str]]):
|
|
123
|
+
self.__subdomains = value
|
|
124
|
+
|
|
125
|
+
# additional_options
|
|
126
|
+
@property
|
|
127
|
+
def additional_options(self) -> Optional[Dict[str, str]]:
|
|
128
|
+
return self.__additional_options
|
|
129
|
+
|
|
130
|
+
@additional_options.setter
|
|
131
|
+
def additional_options(self, value: Optional[Dict[str, str]]):
|
|
132
|
+
self.__additional_options = value
|
|
133
|
+
|
|
134
|
+
# tile_bounds
|
|
135
|
+
@property
|
|
136
|
+
def tile_bounds(self) -> Optional[MapLatitudeLongitudeBounds]:
|
|
137
|
+
return self.__tile_bounds
|
|
138
|
+
|
|
139
|
+
@tile_bounds.setter
|
|
140
|
+
def tile_bounds(self, value: Optional[MapLatitudeLongitudeBounds]):
|
|
141
|
+
self.__tile_bounds = value
|
|
142
|
+
|
|
143
|
+
# tile_size
|
|
144
|
+
@property
|
|
145
|
+
def tile_size(self) -> float:
|
|
146
|
+
return self._get_attr("tileSize", data_type="float", def_value=256.0)
|
|
147
|
+
|
|
148
|
+
@tile_size.setter
|
|
149
|
+
def tile_size(self, value: OptionalNumber):
|
|
150
|
+
assert value is None or value >= 0, "tile_size cannot be negative"
|
|
151
|
+
self._set_attr("tileSize", value)
|
|
152
|
+
|
|
153
|
+
# min_native_zoom
|
|
154
|
+
@property
|
|
155
|
+
def min_native_zoom(self) -> int:
|
|
156
|
+
return self._get_attr("minNativeZoom", data_type="int", def_value=0.0)
|
|
157
|
+
|
|
158
|
+
@min_native_zoom.setter
|
|
159
|
+
def min_native_zoom(self, value: Optional[int]):
|
|
160
|
+
assert value is None or value >= 0, "min_native_zoom cannot be negative"
|
|
161
|
+
self._set_attr("minNativeZoom", value)
|
|
162
|
+
|
|
163
|
+
# max_native_zoom
|
|
164
|
+
@property
|
|
165
|
+
def max_native_zoom(self) -> int:
|
|
166
|
+
return self._get_attr("maxNativeZoom", data_type="int", def_value=19)
|
|
167
|
+
|
|
168
|
+
@max_native_zoom.setter
|
|
169
|
+
def max_native_zoom(self, value: Optional[int]):
|
|
170
|
+
assert value is None or value >= 0, "max_native_zoom cannot be negative"
|
|
171
|
+
self._set_attr("maxNativeZoom", value)
|
|
172
|
+
|
|
173
|
+
# zoom_reverse
|
|
174
|
+
@property
|
|
175
|
+
def zoom_reverse(self) -> bool:
|
|
176
|
+
return self._get_attr("zoomReverse", data_type="bool", def_value=False)
|
|
177
|
+
|
|
178
|
+
@zoom_reverse.setter
|
|
179
|
+
def zoom_reverse(self, value: Optional[bool]):
|
|
180
|
+
self._set_attr("zoomReverse", value)
|
|
181
|
+
|
|
182
|
+
# zoom_offset
|
|
183
|
+
@property
|
|
184
|
+
def zoom_offset(self) -> float:
|
|
185
|
+
return self._get_attr("zoomOffset", data_type="float", def_value=0.0)
|
|
186
|
+
|
|
187
|
+
@zoom_offset.setter
|
|
188
|
+
def zoom_offset(self, value: OptionalNumber):
|
|
189
|
+
assert value is None or value >= 0, "zoom_offset cannot be negative"
|
|
190
|
+
self._set_attr("zoomOffset", value)
|
|
191
|
+
|
|
192
|
+
# keep_buffer
|
|
193
|
+
@property
|
|
194
|
+
def keep_buffer(self) -> int:
|
|
195
|
+
return self._get_attr("keepBuffer", data_type="int", def_value=2)
|
|
196
|
+
|
|
197
|
+
@keep_buffer.setter
|
|
198
|
+
def keep_buffer(self, value: Optional[int]):
|
|
199
|
+
self._set_attr("keepBuffer", value)
|
|
200
|
+
|
|
201
|
+
# pan_buffer
|
|
202
|
+
@property
|
|
203
|
+
def pan_buffer(self) -> int:
|
|
204
|
+
return self._get_attr("panBuffer", data_type="int", def_value=2)
|
|
205
|
+
|
|
206
|
+
@pan_buffer.setter
|
|
207
|
+
def pan_buffer(self, value: Optional[int]):
|
|
208
|
+
self._set_attr("panBuffer", value)
|
|
209
|
+
|
|
210
|
+
# enable_tms
|
|
211
|
+
@property
|
|
212
|
+
def enable_tms(self) -> bool:
|
|
213
|
+
return self._get_attr("enableTms", data_type="bool", def_value=False)
|
|
214
|
+
|
|
215
|
+
@enable_tms.setter
|
|
216
|
+
def enable_tms(self, value: Optional[bool]):
|
|
217
|
+
self._set_attr("enableTms", value)
|
|
218
|
+
|
|
219
|
+
# enable_retina_mode
|
|
220
|
+
@property
|
|
221
|
+
def enable_retina_mode(self) -> bool:
|
|
222
|
+
return self._get_attr("enableRetinaMode", data_type="bool", def_value=False)
|
|
223
|
+
|
|
224
|
+
@enable_retina_mode.setter
|
|
225
|
+
def enable_retina_mode(self, value: Optional[bool]):
|
|
226
|
+
self._set_attr("enableRetinaMode", value)
|
|
227
|
+
|
|
228
|
+
# max_zoom
|
|
229
|
+
@property
|
|
230
|
+
def max_zoom(self) -> float:
|
|
231
|
+
return self._get_attr("maxZoom", data_type="float", def_value=float("inf"))
|
|
232
|
+
|
|
233
|
+
@max_zoom.setter
|
|
234
|
+
def max_zoom(self, value: OptionalNumber):
|
|
235
|
+
assert value is None or value >= 0, "max_zoom cannot be negative"
|
|
236
|
+
self._set_attr("maxZoom", value)
|
|
237
|
+
|
|
238
|
+
# min_zoom
|
|
239
|
+
@property
|
|
240
|
+
def min_zoom(self) -> float:
|
|
241
|
+
return self._get_attr("minZoom", data_type="float", def_value=0.0)
|
|
242
|
+
|
|
243
|
+
@min_zoom.setter
|
|
244
|
+
def min_zoom(self, value: OptionalNumber):
|
|
245
|
+
assert value is None or value >= 0, "min_zoom cannot be negative"
|
|
246
|
+
self._set_attr("minZoom", value)
|
|
247
|
+
|
|
248
|
+
# error_image_src
|
|
249
|
+
@property
|
|
250
|
+
def error_image_src(self) -> Optional[str]:
|
|
251
|
+
return self._get_attr("errorImageSrc")
|
|
252
|
+
|
|
253
|
+
@error_image_src.setter
|
|
254
|
+
def error_image_src(self, value: Optional[str]):
|
|
255
|
+
self._set_attr("errorImageSrc", value)
|
|
256
|
+
|
|
257
|
+
# evict_error_tile_strategy
|
|
258
|
+
@property
|
|
259
|
+
def evict_error_tile_strategy(self) -> Optional[MapTileLayerEvictErrorTileStrategy]:
|
|
260
|
+
return self.__evict_error_tile_strategy
|
|
261
|
+
|
|
262
|
+
@evict_error_tile_strategy.setter
|
|
263
|
+
def evict_error_tile_strategy(
|
|
264
|
+
self, value: Optional[MapTileLayerEvictErrorTileStrategy]
|
|
265
|
+
):
|
|
266
|
+
self.__evict_error_tile_strategy = value
|
|
267
|
+
self._set_enum_attr(
|
|
268
|
+
"evictErrorTileStrategy", value, MapTileLayerEvictErrorTileStrategy
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
# on_image_error
|
|
272
|
+
@property
|
|
273
|
+
def on_image_error(self) -> OptionalControlEventCallable:
|
|
274
|
+
return self._get_event_handler("imageError")
|
|
275
|
+
|
|
276
|
+
@on_image_error.setter
|
|
277
|
+
def on_image_error(self, handler: OptionalControlEventCallable):
|
|
278
|
+
self._add_event_handler("imageError", handler)
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: flet-map
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Map control for Flet
|
|
5
|
+
Author-email: Flet contributors <hello@flet.dev>
|
|
6
|
+
Project-URL: Homepage, https://flet.dev
|
|
7
|
+
Project-URL: Documentation, https://flet.dev/docs/controls/map
|
|
8
|
+
Project-URL: Repository, https://github.com/flet-dev/flet-map
|
|
9
|
+
Project-URL: Issues, https://github.com/flet-dev/flet-map/issues
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Requires-Python: >=3.8
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: flet>=0.25.2
|
|
14
|
+
|
|
15
|
+
# Map control for Flet
|
|
16
|
+
|
|
17
|
+
`Map` control for Flet.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Add `flet-map` as dependency (`pyproject.toml` or `requirements.txt`) to your Flet project.
|
|
22
|
+
|
|
23
|
+
## Example
|
|
24
|
+
|
|
25
|
+
```py
|
|
26
|
+
|
|
27
|
+
import random
|
|
28
|
+
import flet as ft
|
|
29
|
+
import flet_map as map
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def main(page: ft.Page):
|
|
33
|
+
marker_layer_ref = ft.Ref[map.MarkerLayer]()
|
|
34
|
+
circle_layer_ref = ft.Ref[map.CircleLayer]()
|
|
35
|
+
|
|
36
|
+
def handle_tap(e: map.MapTapEvent):
|
|
37
|
+
print(e)
|
|
38
|
+
if e.name == "tap":
|
|
39
|
+
marker_layer_ref.current.markers.append(
|
|
40
|
+
map.Marker(
|
|
41
|
+
content=ft.Icon(
|
|
42
|
+
ft.Icons.LOCATION_ON, color=ft.cupertino_colors.DESTRUCTIVE_RED
|
|
43
|
+
),
|
|
44
|
+
coordinates=e.coordinates,
|
|
45
|
+
)
|
|
46
|
+
)
|
|
47
|
+
elif e.name == "secondary_tap":
|
|
48
|
+
circle_layer_ref.current.circles.append(
|
|
49
|
+
map.CircleMarker(
|
|
50
|
+
radius=random.randint(5, 10),
|
|
51
|
+
coordinates=e.coordinates,
|
|
52
|
+
color=ft.Colors.random_color(),
|
|
53
|
+
border_color=ft.Colors.random_color(),
|
|
54
|
+
border_stroke_width=4,
|
|
55
|
+
)
|
|
56
|
+
)
|
|
57
|
+
page.update()
|
|
58
|
+
|
|
59
|
+
def handle_event(e: map.MapEvent):
|
|
60
|
+
print(e)
|
|
61
|
+
|
|
62
|
+
page.add(
|
|
63
|
+
ft.Text("Click anywhere to add a Marker, right-click to add a CircleMarker."),
|
|
64
|
+
map.Map(
|
|
65
|
+
expand=True,
|
|
66
|
+
initial_center=map.MapLatitudeLongitude(15, 10),
|
|
67
|
+
initial_zoom=4.2,
|
|
68
|
+
interaction_configuration=map.MapInteractionConfiguration(
|
|
69
|
+
flags=map.MapInteractiveFlag.ALL
|
|
70
|
+
),
|
|
71
|
+
on_init=lambda e: print(f"Initialized Map"),
|
|
72
|
+
on_tap=handle_tap,
|
|
73
|
+
on_secondary_tap=handle_tap,
|
|
74
|
+
on_long_press=handle_tap,
|
|
75
|
+
on_event=lambda e: print(e),
|
|
76
|
+
layers=[
|
|
77
|
+
map.TileLayer(
|
|
78
|
+
url_template="https://tile.openstreetmap.org/{z}/{x}/{y}.png",
|
|
79
|
+
on_image_error=lambda e: print("TileLayer Error"),
|
|
80
|
+
),
|
|
81
|
+
map.RichAttribution(
|
|
82
|
+
attributions=[
|
|
83
|
+
map.TextSourceAttribution(
|
|
84
|
+
text="OpenStreetMap Contributors",
|
|
85
|
+
on_click=lambda e: e.page.launch_url(
|
|
86
|
+
"https://openstreetmap.org/copyright"
|
|
87
|
+
),
|
|
88
|
+
),
|
|
89
|
+
map.TextSourceAttribution(
|
|
90
|
+
text="Flet",
|
|
91
|
+
on_click=lambda e: e.page.launch_url("https://flet.dev"),
|
|
92
|
+
),
|
|
93
|
+
]
|
|
94
|
+
),
|
|
95
|
+
map.SimpleAttribution(
|
|
96
|
+
text="Flet",
|
|
97
|
+
alignment=ft.alignment.top_right,
|
|
98
|
+
on_click=lambda e: print("Clicked SimpleAttribution"),
|
|
99
|
+
),
|
|
100
|
+
map.MarkerLayer(
|
|
101
|
+
ref=marker_layer_ref,
|
|
102
|
+
markers=[
|
|
103
|
+
map.Marker(
|
|
104
|
+
content=ft.Icon(ft.Icons.LOCATION_ON),
|
|
105
|
+
coordinates=map.MapLatitudeLongitude(30, 15),
|
|
106
|
+
),
|
|
107
|
+
map.Marker(
|
|
108
|
+
content=ft.Icon(ft.Icons.LOCATION_ON),
|
|
109
|
+
coordinates=map.MapLatitudeLongitude(10, 10),
|
|
110
|
+
),
|
|
111
|
+
map.Marker(
|
|
112
|
+
content=ft.Icon(ft.Icons.LOCATION_ON),
|
|
113
|
+
coordinates=map.MapLatitudeLongitude(25, 45),
|
|
114
|
+
),
|
|
115
|
+
],
|
|
116
|
+
),
|
|
117
|
+
map.CircleLayer(
|
|
118
|
+
ref=circle_layer_ref,
|
|
119
|
+
circles=[
|
|
120
|
+
map.CircleMarker(
|
|
121
|
+
radius=10,
|
|
122
|
+
coordinates=map.MapLatitudeLongitude(16, 24),
|
|
123
|
+
color=ft.Colors.RED,
|
|
124
|
+
border_color=ft.Colors.BLUE,
|
|
125
|
+
border_stroke_width=4,
|
|
126
|
+
),
|
|
127
|
+
],
|
|
128
|
+
),
|
|
129
|
+
map.PolygonLayer(
|
|
130
|
+
polygons=[
|
|
131
|
+
map.PolygonMarker(
|
|
132
|
+
label="Popular Touristic Area",
|
|
133
|
+
label_text_style=ft.TextStyle(
|
|
134
|
+
color=ft.Colors.BLACK,
|
|
135
|
+
size=15,
|
|
136
|
+
weight=ft.FontWeight.BOLD,
|
|
137
|
+
),
|
|
138
|
+
color=ft.Colors.with_opacity(0.3, ft.Colors.BLUE),
|
|
139
|
+
coordinates=[
|
|
140
|
+
map.MapLatitudeLongitude(10, 10),
|
|
141
|
+
map.MapLatitudeLongitude(30, 15),
|
|
142
|
+
map.MapLatitudeLongitude(25, 45),
|
|
143
|
+
],
|
|
144
|
+
),
|
|
145
|
+
],
|
|
146
|
+
),
|
|
147
|
+
map.PolylineLayer(
|
|
148
|
+
polylines=[
|
|
149
|
+
map.PolylineMarker(
|
|
150
|
+
border_stroke_width=3,
|
|
151
|
+
border_color=ft.Colors.RED,
|
|
152
|
+
gradient_colors=[ft.Colors.BLACK, ft.Colors.BLACK],
|
|
153
|
+
color=ft.Colors.with_opacity(0.6, ft.Colors.GREEN),
|
|
154
|
+
coordinates=[
|
|
155
|
+
map.MapLatitudeLongitude(10, 10),
|
|
156
|
+
map.MapLatitudeLongitude(30, 15),
|
|
157
|
+
map.MapLatitudeLongitude(25, 45),
|
|
158
|
+
],
|
|
159
|
+
),
|
|
160
|
+
],
|
|
161
|
+
),
|
|
162
|
+
],
|
|
163
|
+
),
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
ft.app(main)
|
|
168
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
flet_map/__init__.py,sha256=xmGk-KtjPbkpMoj3kR40zmzTQF4mGwtq_lyC0M8groQ,927
|
|
2
|
+
flet_map/circle_layer.py,sha256=TBydZRXPvRvdkIutUMux8hQQwVzeb-yYjVjkByb68os,4111
|
|
3
|
+
flet_map/map.py,sha256=MkRKtESgSgo2DWjCQAiwOWt7ywR6L_NF3CNwEeidEfw,23150
|
|
4
|
+
flet_map/map_layer.py,sha256=9Uwn3vzuDevpBjH9gH8YIA0xnqog7u1rLiZEpVPI_wM,490
|
|
5
|
+
flet_map/marker_layer.py,sha256=PXNPTxmpzFVu3-ltPjsaPBbTLX8EwVOXX9slv_S9Dpc,4576
|
|
6
|
+
flet_map/polygon_layer.py,sha256=ovxQX_qzg6CJ2hfZy2VWmz68Z1eoiohduPs63ZxjIUo,7877
|
|
7
|
+
flet_map/polyline_layer.py,sha256=eCTxA64Of-Q8V69XetHdHlIQl9aDQz-QiYYurTUQxp0,8560
|
|
8
|
+
flet_map/rich_attribution.py,sha256=1-GqK75MiDN0EU4YUCqFLvcXFNmpoulHwVF4ai-0hv8,4575
|
|
9
|
+
flet_map/simple_attribution.py,sha256=31b6WEwSOZWDO5WtEpYcV8mI-vaXR5DPqbOc_tDCNLA,2149
|
|
10
|
+
flet_map/text_source_attribution.py,sha256=BPqT2Ph8kISnBnfzs5v_i-uKEP5JZfxwe-wZ7qEdBRE,2340
|
|
11
|
+
flet_map/tile_layer.py,sha256=7pNIvrKbzggry7oUXWYNt5xySybEJNe3e2FUAS2Q42s,9113
|
|
12
|
+
flutter/flet_map/CHANGELOG.md,sha256=66sWepPaeTc9_lzcYIGU55AlxSU5Z1XVtknXpzd_-p8,40
|
|
13
|
+
flutter/flet_map/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
14
|
+
flutter/flet_map/README.md,sha256=ABBaDRlbz2HalnmHeD_Y8KyT1JCh4Axkl1cqv4vFZqI,56
|
|
15
|
+
flutter/flet_map/analysis_options.yaml,sha256=32kjGAc-zF87inWaH5M46yGZWQDTwrwfvNLHeAocfG4,154
|
|
16
|
+
flutter/flet_map/pubspec.lock,sha256=U5N7CBWNVdN5z-4SMc1YjF6LJKSj77OK87SQ_Jj1CyA,24554
|
|
17
|
+
flutter/flet_map/pubspec.yaml,sha256=8YTcl_p4ZoQmKhpY4fiFOPKsnag9LnPhl3k_eOKARtU,493
|
|
18
|
+
flutter/flet_map/lib/flet_map.dart,sha256=PdaEb2aoyBwp978wal3-9I0docgp0eUzcAub3kw7MUs,91
|
|
19
|
+
flutter/flet_map/lib/src/circle_layer.dart,sha256=HYfop2lkeZnxb4tXtUWps1FMrQWiuHkQRP8QEinh3pI,1482
|
|
20
|
+
flutter/flet_map/lib/src/create_control.dart,sha256=JjtTXKyYAxbrA3Ys0P6OmC9wtplFr-iezzr3N3gTtaQ,1814
|
|
21
|
+
flutter/flet_map/lib/src/map.dart,sha256=EUOWt0LDRXodGl0B-fjTUbKt48JCAp2ruWuFSkHjw8o,5152
|
|
22
|
+
flutter/flet_map/lib/src/marker_layer.dart,sha256=KYk9Sdo8cV8objkIjmwnurx0ByKlCrAoHy09h_i_k2k,1731
|
|
23
|
+
flutter/flet_map/lib/src/polygon_layer.dart,sha256=iuYUwu2qNKT-duzdxbYtffAal9PS6wDOfYALLuknAOE,2667
|
|
24
|
+
flutter/flet_map/lib/src/polyline_layer.dart,sha256=pDBoScHBhOpRjSOddW09OYLDP09V211T4UEQS17hTgM,3122
|
|
25
|
+
flutter/flet_map/lib/src/rich_attribution.dart,sha256=jFmjrvSZjem5aXFP22SXmtwckQYkYoDc-b2M441W54U,2226
|
|
26
|
+
flutter/flet_map/lib/src/simple_attribution.dart,sha256=9Ac2pL7MaIDlZ-e5SrHHRDwxgx9D3YZwRh-5buLMXew,1141
|
|
27
|
+
flutter/flet_map/lib/src/text_source_attribution.dart,sha256=fwqZ_T9dvRZdBgaMGSNJkjtdLAodKR3VNSgw9guL06g,865
|
|
28
|
+
flutter/flet_map/lib/src/tile_layer.dart,sha256=UqvnaCr4QquUs5KnuBB7la085cCfGWvjaqjX6E2qIO0,3092
|
|
29
|
+
flutter/flet_map/lib/src/utils/attribution_alignment.dart,sha256=xuj188pAUG2mfcBVNbyUSZGVz-dlJua-bnu5fdojMQQ,382
|
|
30
|
+
flutter/flet_map/lib/src/utils/map.dart,sha256=c8ynRMHtl6GGEgXJYL0Vwk8LYdKW-3MsW0ybz6LMnCw,9205
|
|
31
|
+
flet_map-0.1.0.dist-info/METADATA,sha256=AtoHA3SzxxSj_vEzn1KZp6EOxuUS8o5gXObJTNqsGGQ,6245
|
|
32
|
+
flet_map-0.1.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
33
|
+
flet_map-0.1.0.dist-info/top_level.txt,sha256=HjaN5dGb0-hj6ciqBzy1aqisp22P0mbT98qC8rvoEjg,17
|
|
34
|
+
flet_map-0.1.0.dist-info/RECORD,,
|