ssb-sgis 0.3.7__py3-none-any.whl → 0.3.9__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.
- sgis/__init__.py +6 -3
- sgis/geopandas_tools/buffer_dissolve_explode.py +13 -9
- sgis/geopandas_tools/centerlines.py +110 -47
- sgis/geopandas_tools/cleaning.py +331 -0
- sgis/geopandas_tools/conversion.py +17 -7
- sgis/geopandas_tools/duplicates.py +67 -49
- sgis/geopandas_tools/general.py +15 -1
- sgis/geopandas_tools/neighbors.py +12 -0
- sgis/geopandas_tools/overlay.py +26 -17
- sgis/geopandas_tools/polygon_operations.py +281 -100
- sgis/geopandas_tools/polygons_as_rings.py +72 -10
- sgis/geopandas_tools/sfilter.py +8 -8
- sgis/helpers.py +20 -3
- sgis/io/{dapla.py → dapla_functions.py} +28 -6
- sgis/io/write_municipality_data.py +13 -7
- sgis/maps/examine.py +10 -7
- sgis/maps/explore.py +102 -25
- sgis/maps/map.py +32 -6
- sgis/maps/maps.py +40 -58
- sgis/maps/tilesources.py +61 -0
- sgis/networkanalysis/closing_network_holes.py +89 -62
- sgis/networkanalysis/cutting_lines.py +11 -5
- sgis/networkanalysis/finding_isolated_networks.py +1 -1
- sgis/networkanalysis/nodes.py +1 -1
- sgis/networkanalysis/traveling_salesman.py +8 -4
- sgis/parallel/parallel.py +66 -12
- sgis/raster/raster.py +29 -27
- {ssb_sgis-0.3.7.dist-info → ssb_sgis-0.3.9.dist-info}/METADATA +6 -3
- ssb_sgis-0.3.9.dist-info/RECORD +59 -0
- {ssb_sgis-0.3.7.dist-info → ssb_sgis-0.3.9.dist-info}/WHEEL +1 -1
- sgis/geopandas_tools/snap_polygons.py +0 -0
- ssb_sgis-0.3.7.dist-info/RECORD +0 -58
- {ssb_sgis-0.3.7.dist-info → ssb_sgis-0.3.9.dist-info}/LICENSE +0 -0
sgis/parallel/parallel.py
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import functools
|
|
2
|
+
import inspect
|
|
2
3
|
import itertools
|
|
3
4
|
import multiprocessing
|
|
5
|
+
from collections.abc import Callable, Collection, Iterable
|
|
4
6
|
from pathlib import Path
|
|
5
7
|
from typing import Any
|
|
6
|
-
|
|
8
|
+
|
|
7
9
|
|
|
8
10
|
try:
|
|
9
11
|
import dapla as dp
|
|
@@ -20,12 +22,19 @@ from ..helpers import LocalFunctionError, dict_zip, dict_zip_union, in_jupyter
|
|
|
20
22
|
|
|
21
23
|
|
|
22
24
|
try:
|
|
23
|
-
from ..io.
|
|
25
|
+
from ..io.dapla_functions import exists, read_geopandas
|
|
24
26
|
from ..io.write_municipality_data import write_municipality_data
|
|
25
27
|
except ImportError:
|
|
26
28
|
pass
|
|
27
29
|
|
|
28
30
|
|
|
31
|
+
def turn_args_into_kwargs(func: Callable, args: tuple, index_start: int):
|
|
32
|
+
if not isinstance(args, tuple):
|
|
33
|
+
raise TypeError("args should be a tuple (it should not be unpacked with *)")
|
|
34
|
+
argnames = inspect.getfullargspec(func).args[index_start:]
|
|
35
|
+
return {name: value for value, name in zip(args, argnames, strict=False)}
|
|
36
|
+
|
|
37
|
+
|
|
29
38
|
class Parallel:
|
|
30
39
|
"""Run functions in parallell.
|
|
31
40
|
|
|
@@ -51,9 +60,13 @@ class Parallel:
|
|
|
51
60
|
offered through joblib's Parallel class.
|
|
52
61
|
context: Start method for the processes. Defaults to 'spawn'
|
|
53
62
|
to avoid frozen processes.
|
|
63
|
+
maxtasksperchild: Number of tasks a worker process can complete before
|
|
64
|
+
it will exit and be replaced with a fresh worker process, to enable
|
|
65
|
+
unused resources to be freed. Defaults to 10 to
|
|
54
66
|
**kwargs: Keyword arguments to be passed to either
|
|
55
67
|
multiprocessing.Pool or joblib.Parallel, depending
|
|
56
|
-
on the backend.
|
|
68
|
+
on the backend. Not to be confused with the kwargs passed to functions in
|
|
69
|
+
the map and starmap methods.
|
|
57
70
|
"""
|
|
58
71
|
|
|
59
72
|
def __init__(
|
|
@@ -61,9 +74,11 @@ class Parallel:
|
|
|
61
74
|
processes: int,
|
|
62
75
|
backend: str = "multiprocessing",
|
|
63
76
|
context: str = "spawn",
|
|
77
|
+
maxtasksperchild: int = 10,
|
|
64
78
|
**kwargs,
|
|
65
79
|
):
|
|
66
80
|
self.processes = int(processes)
|
|
81
|
+
self.maxtasksperchild = maxtasksperchild
|
|
67
82
|
self.backend = backend
|
|
68
83
|
self.context = context
|
|
69
84
|
self.kwargs = kwargs
|
|
@@ -74,14 +89,17 @@ class Parallel:
|
|
|
74
89
|
self,
|
|
75
90
|
func: Callable,
|
|
76
91
|
iterable: Collection,
|
|
92
|
+
args: tuple | None = None,
|
|
77
93
|
kwargs: dict | None = None,
|
|
78
94
|
) -> list[Any]:
|
|
79
|
-
"""Run functions in parallel with items of an iterable as
|
|
95
|
+
"""Run functions in parallel with items of an iterable as 0th arguemnt.
|
|
80
96
|
|
|
81
97
|
Args:
|
|
82
98
|
func: Function to be run.
|
|
83
99
|
iterable: An iterable where each item will be passed to func as
|
|
84
|
-
|
|
100
|
+
0th positional argument.
|
|
101
|
+
Args: Positional arguments passed to 'func' starting from the 1st argument.
|
|
102
|
+
The 0th argument will be reserved for the values of 'iterable'.
|
|
85
103
|
kwargs: Keyword arguments passed to 'func'. Must be passed as a dict,
|
|
86
104
|
not unpacked into separate keyword arguments.
|
|
87
105
|
|
|
@@ -101,14 +119,21 @@ class Parallel:
|
|
|
101
119
|
>>> results
|
|
102
120
|
[2, 4, 6]
|
|
103
121
|
|
|
104
|
-
With kwargs.
|
|
122
|
+
With args and kwargs.
|
|
105
123
|
|
|
106
124
|
>>> iterable = [1, 2, 3]
|
|
107
125
|
>>> def x2(x, plus, minus):
|
|
108
126
|
... return x * 2 + plus - minus
|
|
109
127
|
>>> p = sg.Parallel(4, backend="loky")
|
|
110
|
-
|
|
111
|
-
>>>
|
|
128
|
+
...
|
|
129
|
+
>>> # these three are the same
|
|
130
|
+
>>> results1 = p.map(x2, iterable, args=(2, 1))
|
|
131
|
+
>>> results2 = p.map(x2, iterable, kwargs=dict(plus=2, minus=1))
|
|
132
|
+
>>> results3 = p.map(x2, iterable, args=(2,), kwargs=dict(minus=1))
|
|
133
|
+
>>> assert results1 == results2 == results3
|
|
134
|
+
...
|
|
135
|
+
>>> results1
|
|
136
|
+
[3, 5, 7]
|
|
112
137
|
|
|
113
138
|
If in Jupyter the function should be defined in another module.
|
|
114
139
|
And if using the multiprocessing backend, the code should be
|
|
@@ -122,9 +147,15 @@ class Parallel:
|
|
|
122
147
|
[2, 4, 6]
|
|
123
148
|
"""
|
|
124
149
|
|
|
150
|
+
if args:
|
|
151
|
+
# start at index 1, meaning the 0th argument (the iterable) is still available
|
|
152
|
+
args_as_kwargs = turn_args_into_kwargs(func, args, index_start=1)
|
|
153
|
+
else:
|
|
154
|
+
args_as_kwargs = {}
|
|
155
|
+
|
|
125
156
|
self.validate_execution(func)
|
|
126
157
|
|
|
127
|
-
kwargs = self._validate_kwargs(kwargs)
|
|
158
|
+
kwargs = self._validate_kwargs(kwargs) | args_as_kwargs
|
|
128
159
|
|
|
129
160
|
func_with_kwargs = functools.partial(func, **kwargs)
|
|
130
161
|
|
|
@@ -141,7 +172,7 @@ class Parallel:
|
|
|
141
172
|
|
|
142
173
|
if self.backend == "multiprocessing":
|
|
143
174
|
with multiprocessing.get_context(self.context).Pool(
|
|
144
|
-
processes, **self.kwargs
|
|
175
|
+
processes, maxtasksperchild=self.maxtasksperchild, **self.kwargs
|
|
145
176
|
) as pool:
|
|
146
177
|
return pool.map(func_with_kwargs, iterable)
|
|
147
178
|
|
|
@@ -154,6 +185,7 @@ class Parallel:
|
|
|
154
185
|
self,
|
|
155
186
|
func: Callable,
|
|
156
187
|
iterable: Collection[Iterable[Any]],
|
|
188
|
+
args: tuple | None = None,
|
|
157
189
|
kwargs: dict | None = None,
|
|
158
190
|
) -> list[Any]:
|
|
159
191
|
"""Run functions in parallel where items of the iterable are unpacked.
|
|
@@ -165,6 +197,8 @@ class Parallel:
|
|
|
165
197
|
func: Function to be run.
|
|
166
198
|
iterable: An iterable of iterables, where each item will be
|
|
167
199
|
unpacked as positional argument to the function.
|
|
200
|
+
Args: Positional arguments passed to 'func' starting at argument position
|
|
201
|
+
n + 1, where n is the length of the iterables inside the iterable.
|
|
168
202
|
kwargs: Keyword arguments passed to 'func'. Must be passed as a dict,
|
|
169
203
|
not unpacked into separate keyword arguments.
|
|
170
204
|
|
|
@@ -184,6 +218,17 @@ class Parallel:
|
|
|
184
218
|
>>> results
|
|
185
219
|
[3, 5, 7]
|
|
186
220
|
|
|
221
|
+
With args and kwargs. Since the iterables inside 'iterable' are of length 2,
|
|
222
|
+
'args' will start at argument number three, e.i. 'c'.
|
|
223
|
+
|
|
224
|
+
>>> iterable = [(1, 2), (2, 3), (3, 4)]
|
|
225
|
+
>>> def add(a, b, c, *, d):
|
|
226
|
+
... return a + b + c + d
|
|
227
|
+
>>> p = sg.Parallel(3, backend="loky")
|
|
228
|
+
>>> results = p.starmap(add, iterable, args=(1,), kwargs={"d": 0.1})
|
|
229
|
+
>>> results
|
|
230
|
+
[4.1, 6.1, 8.1]
|
|
231
|
+
|
|
187
232
|
If in Jupyter the function should be defined in another module.
|
|
188
233
|
And if using the multiprocessing backend, the code should be
|
|
189
234
|
guarded by if __name__ == "__main__".
|
|
@@ -196,9 +241,18 @@ class Parallel:
|
|
|
196
241
|
[3, 5, 7]
|
|
197
242
|
|
|
198
243
|
"""
|
|
244
|
+
if args:
|
|
245
|
+
# starting the count at the length of the iterables inside the iterables
|
|
246
|
+
iterable = list(iterable)
|
|
247
|
+
args_as_kwargs = turn_args_into_kwargs(
|
|
248
|
+
func, args, index_start=len(iterable[0])
|
|
249
|
+
)
|
|
250
|
+
else:
|
|
251
|
+
args_as_kwargs = {}
|
|
252
|
+
|
|
199
253
|
self.validate_execution(func)
|
|
200
254
|
|
|
201
|
-
kwargs = self._validate_kwargs(kwargs)
|
|
255
|
+
kwargs = self._validate_kwargs(kwargs) | args_as_kwargs
|
|
202
256
|
|
|
203
257
|
func_with_kwargs = functools.partial(func, **kwargs)
|
|
204
258
|
|
|
@@ -215,7 +269,7 @@ class Parallel:
|
|
|
215
269
|
|
|
216
270
|
if self.backend == "multiprocessing":
|
|
217
271
|
with multiprocessing.get_context(self.context).Pool(
|
|
218
|
-
processes, **self.kwargs
|
|
272
|
+
processes, maxtasksperchild=self.maxtasksperchild, **self.kwargs
|
|
219
273
|
) as pool:
|
|
220
274
|
return pool.starmap(func_with_kwargs, iterable)
|
|
221
275
|
|
sgis/raster/raster.py
CHANGED
|
@@ -2,10 +2,10 @@ import numbers
|
|
|
2
2
|
import re
|
|
3
3
|
import uuid
|
|
4
4
|
import warnings
|
|
5
|
+
from collections.abc import Callable
|
|
5
6
|
from copy import copy, deepcopy
|
|
6
7
|
from json import loads
|
|
7
8
|
from pathlib import Path
|
|
8
|
-
from collections.abc import Callable
|
|
9
9
|
|
|
10
10
|
import geopandas as gpd
|
|
11
11
|
import matplotlib.pyplot as plt
|
|
@@ -73,18 +73,18 @@ class Raster(RasterBase):
|
|
|
73
73
|
|
|
74
74
|
Read tif file.
|
|
75
75
|
|
|
76
|
-
>>> path = 'https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/dtm_10.tif'
|
|
76
|
+
>>> path = 'https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/raster/dtm_10.tif'
|
|
77
77
|
>>> raster = sg.Raster.from_path(path)
|
|
78
78
|
>>> raster
|
|
79
|
-
Raster(shape=(1, 201, 201), res=10, crs=ETRS89 / UTM zone 33N (N-E), path=https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/dtm_10.tif)
|
|
79
|
+
Raster(shape=(1, 201, 201), res=10, crs=ETRS89 / UTM zone 33N (N-E), path=https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/raster/dtm_10.tif)
|
|
80
80
|
|
|
81
81
|
Load the entire image as an numpy ndarray.
|
|
82
82
|
Operations are done in place to save memory.
|
|
83
83
|
The array is stored in the array attribute.
|
|
84
84
|
|
|
85
|
-
>>>
|
|
86
|
-
>>>
|
|
87
|
-
>>>
|
|
85
|
+
>>> raster.load()
|
|
86
|
+
>>> raster.array[raster.array < 0] = 0
|
|
87
|
+
>>> raster.array
|
|
88
88
|
[[[ 0. 0. 0. ... 158.4 155.6 152.6]
|
|
89
89
|
[ 0. 0. 0. ... 158. 154.8 151.9]
|
|
90
90
|
[ 0. 0. 0. ... 158.5 155.1 152.3]
|
|
@@ -95,41 +95,43 @@ class Raster(RasterBase):
|
|
|
95
95
|
|
|
96
96
|
Save as tif file.
|
|
97
97
|
|
|
98
|
-
>>>
|
|
98
|
+
>>> raster.write("path/to/file.tif")
|
|
99
99
|
|
|
100
100
|
Convert to GeoDataFrame.
|
|
101
101
|
|
|
102
|
-
>>> gdf =
|
|
102
|
+
>>> gdf = raster.to_gdf(column="elevation")
|
|
103
103
|
>>> gdf
|
|
104
|
-
elevation geometry
|
|
105
|
-
0 1.9 POLYGON ((-25665.000 6676005.000, -25665.000 6...
|
|
106
|
-
1 11.0 POLYGON ((-25655.000 6676005.000, -25655.000 6...
|
|
107
|
-
2 18.1 POLYGON ((-25645.000 6676005.000, -25645.000 6...
|
|
108
|
-
3 15.8 POLYGON ((-25635.000 6676005.000, -25635.000 6...
|
|
109
|
-
4 11.6 POLYGON ((-25625.000 6676005.000, -25625.000 6...
|
|
110
|
-
... ... ...
|
|
111
|
-
25096 13.4 POLYGON ((-24935.000 6674005.000, -24935.000 6...
|
|
112
|
-
25097 9.4 POLYGON ((-24925.000 6674005.000, -24925.000 6...
|
|
113
|
-
25098 5.3 POLYGON ((-24915.000 6674005.000, -24915.000 6...
|
|
114
|
-
25099 2.3 POLYGON ((-24905.000 6674005.000, -24905.000 6...
|
|
115
|
-
25100 0.1 POLYGON ((-24895.000 6674005.000, -24895.000 6...
|
|
104
|
+
elevation geometry band_index
|
|
105
|
+
0 1.9 POLYGON ((-25665.000 6676005.000, -25665.000 6... 1
|
|
106
|
+
1 11.0 POLYGON ((-25655.000 6676005.000, -25655.000 6... 1
|
|
107
|
+
2 18.1 POLYGON ((-25645.000 6676005.000, -25645.000 6... 1
|
|
108
|
+
3 15.8 POLYGON ((-25635.000 6676005.000, -25635.000 6... 1
|
|
109
|
+
4 11.6 POLYGON ((-25625.000 6676005.000, -25625.000 6... 1
|
|
110
|
+
... ... ... ...
|
|
111
|
+
25096 13.4 POLYGON ((-24935.000 6674005.000, -24935.000 6... 1
|
|
112
|
+
25097 9.4 POLYGON ((-24925.000 6674005.000, -24925.000 6... 1
|
|
113
|
+
25098 5.3 POLYGON ((-24915.000 6674005.000, -24915.000 6... 1
|
|
114
|
+
25099 2.3 POLYGON ((-24905.000 6674005.000, -24905.000 6... 1
|
|
115
|
+
25100 0.1 POLYGON ((-24895.000 6674005.000, -24895.000 6... 1
|
|
116
116
|
|
|
117
117
|
The image can also be clipped by a mask while loading.
|
|
118
118
|
|
|
119
|
-
>>> small_circle =
|
|
120
|
-
>>> raster = sg.Raster.from_path(path).clip(small_circle
|
|
121
|
-
Raster(shape=(1,
|
|
119
|
+
>>> small_circle = raster_as_polygons.unary_union.centroid.buffer(50)
|
|
120
|
+
>>> raster = sg.Raster.from_path(path).clip(small_circle)
|
|
121
|
+
Raster(shape=(1, 10, 10), res=10, crs=ETRS89 / UTM zone 33N (N-E), path=https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/raster/dtm_10.tif)
|
|
122
122
|
|
|
123
123
|
Construct raster from GeoDataFrame.
|
|
124
124
|
The arrays are put on top of each other in a 3 dimensional array.
|
|
125
125
|
|
|
126
|
-
>>>
|
|
127
|
-
>>>
|
|
128
|
-
|
|
126
|
+
>>> raster_as_polygons["elevation_x2"] = raster_as_polygons["elevation"] * 2
|
|
127
|
+
>>> raster_from_polygons = sg.Raster.from_gdf(raster_as_polygons, columns=["elevation", "elevation_x2"], res=20)
|
|
128
|
+
>>> raster_from_polygons
|
|
129
|
+
Raster(shape=(2, 100, 100), res=20, raster_id=-260056673995, crs=ETRS89 / UTM zone 33N (N-E), path=None)
|
|
129
130
|
|
|
130
131
|
Calculate zonal statistics for each polygon in 'gdf'.
|
|
131
132
|
|
|
132
|
-
>>> zonal =
|
|
133
|
+
>>> zonal = raster.zonal(raster_as_polygons, aggfunc=["sum", np.mean])
|
|
134
|
+
>>> zonal
|
|
133
135
|
sum mean geometry
|
|
134
136
|
0 1.9 1.9 POLYGON ((-25665.000 6676005.000, -25665.000 6...
|
|
135
137
|
1 11.0 11.0 POLYGON ((-25655.000 6676005.000, -25655.000 6...
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ssb-sgis
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.9
|
|
4
4
|
Summary: GIS functions used at Statistics Norway.
|
|
5
5
|
Home-page: https://github.com/statisticsnorway/ssb-sgis
|
|
6
6
|
License: MIT
|
|
7
7
|
Author: Statistics Norway
|
|
8
8
|
Author-email: ort@ssb.no
|
|
9
|
-
Requires-Python: >=3.10,<
|
|
9
|
+
Requires-Python: >=3.10,<4
|
|
10
10
|
Classifier: Development Status :: 3 - Alpha
|
|
11
11
|
Classifier: License :: OSI Approved :: MIT License
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
16
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
16
17
|
Requires-Dist: branca (>=0.6.0)
|
|
17
18
|
Requires-Dist: folium (>=0.14.0)
|
|
@@ -44,6 +45,8 @@ Description-Content-Type: text/markdown
|
|
|
44
45
|
|
|
45
46
|
GIS Python tools used in [Statistics Norway](https://www.ssb.no/en).
|
|
46
47
|
|
|
48
|
+
See documentation [here](https://statisticsnorway.github.io/ssb-sgis/reference/index.html).
|
|
49
|
+
|
|
47
50
|
[][pypi_]
|
|
48
51
|
[][status]
|
|
49
52
|
[][python version]
|
|
@@ -88,7 +91,7 @@ roads = sg.read_parquet_url(
|
|
|
88
91
|
"https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/roads_oslo_2022.parquet"
|
|
89
92
|
)
|
|
90
93
|
|
|
91
|
-
connected_roads = sg.get_connected_components(roads).
|
|
94
|
+
connected_roads = sg.get_connected_components(roads).loc[lambda x: x["connected"] == 1]
|
|
92
95
|
|
|
93
96
|
directed_roads = sg.make_directed_network_norway(
|
|
94
97
|
connected_roads,
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
sgis/__init__.py,sha256=L27d20iJn8LBWwmE7raQy8DWKr8b6eAuTdj22QAVIww,3601
|
|
2
|
+
sgis/exceptions.py,sha256=ztMp4sB9xxPvwj2IEsO5kOaB4FmHuU_7-M2pZ7qaxTs,576
|
|
3
|
+
sgis/geopandas_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
sgis/geopandas_tools/bounds.py,sha256=7REImJZQq35BmvznCcih92mzrVYmX43pIznA8PTeU6Y,17616
|
|
5
|
+
sgis/geopandas_tools/buffer_dissolve_explode.py,sha256=5y6tZlp2-4uYHylD2BBqY95BVRi5-y6H3RIf-jGUCvc,12166
|
|
6
|
+
sgis/geopandas_tools/centerlines.py,sha256=96jZpORHm-As4MoT8ImHPCoq2UDyBhKKw98a84Qes-A,14142
|
|
7
|
+
sgis/geopandas_tools/cleaning.py,sha256=QMG4m3itM0GSwR3QsSOhD_eHhzC-yVFa7JuS85aDAdo,11548
|
|
8
|
+
sgis/geopandas_tools/conversion.py,sha256=xogsnMDOrlMj2fS1mYEpYLOXvDT6UC993Dd_yfnHIqw,17242
|
|
9
|
+
sgis/geopandas_tools/duplicates.py,sha256=GuplKTQ7lRz0jtzWyTGVcSDieX6i8Aswt9Kh_W_DR4g,10422
|
|
10
|
+
sgis/geopandas_tools/general.py,sha256=M0Axq4GDRuxuAlZjZTNF2DQVp7dN9uquI6LZ-1q_bYw,18649
|
|
11
|
+
sgis/geopandas_tools/geocoding.py,sha256=n47aFQMm4yX1MsPnTM4dFjwegCA1ZmGUDj1uyu7OJV4,691
|
|
12
|
+
sgis/geopandas_tools/geometry_types.py,sha256=9kv-CZFDp98QJykhkY1ZTT7gaH3s1-Q3FcozEFk4mvk,7147
|
|
13
|
+
sgis/geopandas_tools/neighbors.py,sha256=7jtO1ZWv71Gj0sI5OdbrfqhVqAHiHkkzxvBUZEn8M80,15047
|
|
14
|
+
sgis/geopandas_tools/overlay.py,sha256=iLI92P_ZN7OIWkSmFLzoJPs_RkiTMdM4zWwjwhu2hFQ,14693
|
|
15
|
+
sgis/geopandas_tools/point_operations.py,sha256=Cpa02sf_W8nI6FvzJGO9jNM_ZOwIz8nDhKxNdQTqom4,6897
|
|
16
|
+
sgis/geopandas_tools/polygon_operations.py,sha256=VIZaHvxL-ucV5xaXLbDdZP9JMOM1qFWQ_91_KP24N2A,35737
|
|
17
|
+
sgis/geopandas_tools/polygons_as_rings.py,sha256=4NzdEuGD9BXKuXxcDEMt-qIoxmdq-nuwKqfjxdW3fJA,10276
|
|
18
|
+
sgis/geopandas_tools/sfilter.py,sha256=LVTWRPbY2TNngubSTmdNpZjdP-E9CbMKU1oDrBYnhYQ,8513
|
|
19
|
+
sgis/helpers.py,sha256=JG6Px77gNH7p3GqCyGQlu1z0wuUcxdho4VtfCfcr1-s,6066
|
|
20
|
+
sgis/io/_is_dapla.py,sha256=TZhVjrSfNmpNSRbt2C7L8OHXWnlmJ2euNX8IUY7xAjI,459
|
|
21
|
+
sgis/io/dapla_functions.py,sha256=16-1WzKqa2l3hWL2uJOLHnhOLdm_iIPkH6rN44SO0ek,7622
|
|
22
|
+
sgis/io/opener.py,sha256=Y5CzWFCJz_XweBTEHVysLOKhSEEXdrPsBk_7a63XmBg,538
|
|
23
|
+
sgis/io/read_parquet.py,sha256=GSW2NDy4-XosbamPEzB1xhWxFAPHuGEJZglfQ-V6DzY,3774
|
|
24
|
+
sgis/io/write_municipality_data.py,sha256=-EDUP6TcQCVEUT8XVwYVcqhYkzoltu9PpbjTTf8-afE,6457
|
|
25
|
+
sgis/maps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
sgis/maps/examine.py,sha256=UwGOuVnmO0nmnQm-7TSJQQs1AT1YW7RVA7w-kh56O7c,8073
|
|
27
|
+
sgis/maps/explore.py,sha256=_YhRF6PiwQcfmVrYZr0Lk4rKKq_2Dz3Cv7Txlk-C4kQ,27857
|
|
28
|
+
sgis/maps/httpserver.py,sha256=z9D66SizO9GIZKaSLIqpFWnwOZZh-kiuVPjFt3WZr8o,1902
|
|
29
|
+
sgis/maps/legend.py,sha256=buHo_UwzPYHIs7kS6H_xETekIR8m9R4PACXfTTMYQWE,20680
|
|
30
|
+
sgis/maps/map.py,sha256=Ba0xp_DJhT9QYTIfwsMphEyrd2oL_ReDEAt-s6tcfm0,22806
|
|
31
|
+
sgis/maps/maps.py,sha256=p8ksh-pkUxGtDwkVKq8zVghGokXLapqbencMi1YGlOg,18197
|
|
32
|
+
sgis/maps/thematicmap.py,sha256=6aVPciftW1YjxjRVQDipxayl3aI3tHpYiZ3HfpnSavc,14132
|
|
33
|
+
sgis/maps/tilesources.py,sha256=gGqNJ4d0PkIP72lZe2c5OMJsxJHz2DVsczw7QSjn96M,2733
|
|
34
|
+
sgis/networkanalysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
|
+
sgis/networkanalysis/_get_route.py,sha256=qWnMabeyIdCKOlnFYNYQUrnl_iBdSSequtsbWAbPIM4,6308
|
|
36
|
+
sgis/networkanalysis/_od_cost_matrix.py,sha256=6plN-cpGib8RL7_LhMxo09RJOMR2mjj7M02T4NgLnCA,2151
|
|
37
|
+
sgis/networkanalysis/_points.py,sha256=aQzn_E_-N-hbtoWMxOzm3PFiwO3O0_AUk9-EOoay_24,4206
|
|
38
|
+
sgis/networkanalysis/_service_area.py,sha256=7bOf1I6yzDJMQxYFCtjQw9lpW7YNStVbX8z-QS8Nyec,5336
|
|
39
|
+
sgis/networkanalysis/closing_network_holes.py,sha256=L7g5Z7qr9oH8JaJ8oqDNrkg2bwAcgh0tuXZCB_1MfGg,13329
|
|
40
|
+
sgis/networkanalysis/cutting_lines.py,sha256=SiEJXIBMJvBBsHgT_FwV5h97i0Z2TFNwSh1dMS93KQQ,14267
|
|
41
|
+
sgis/networkanalysis/directednetwork.py,sha256=2l_qBH7wyEd3HMBfMG_0i_xyHUFKbyB1vTDRYI3olnA,11217
|
|
42
|
+
sgis/networkanalysis/finding_isolated_networks.py,sha256=IZWWotvnvxSgK5lXtByiynL13aWJRPl1HhNpyf0ddSU,3370
|
|
43
|
+
sgis/networkanalysis/network.py,sha256=UvPPIEfZCjoLBIyHFuSsWXYarku2l3CHrkhX3iiGkl4,7686
|
|
44
|
+
sgis/networkanalysis/networkanalysis.py,sha256=raz5T5Va5xvnLJC7tNkPx57ZUIdm1aEeqMMpOZPGDqQ,67276
|
|
45
|
+
sgis/networkanalysis/networkanalysisrules.py,sha256=UMSo5-a8OF-0yzDgjxNcU0TpMjOpVrqrejgHikMRsXU,12607
|
|
46
|
+
sgis/networkanalysis/nodes.py,sha256=p87X0JRrxL7XGEDWe4K6meWqKqZMD2f_jM6zptuBRRQ,6844
|
|
47
|
+
sgis/networkanalysis/traveling_salesman.py,sha256=UBa4ZPwcAgUeqgYt-Uvr_2g3BKsOvNfTfvKMGjoRuTY,5558
|
|
48
|
+
sgis/parallel/parallel.py,sha256=sE6SPKb0-Wo9trn769N9kLc_WOYWxUSl7lAdSQidumk,16050
|
|
49
|
+
sgis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
+
sgis/raster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
+
sgis/raster/base.py,sha256=FOXdHl6yT9ge-Ofk4UreeN6LUBL6inNIExGGD1OHF0s,5385
|
|
52
|
+
sgis/raster/elevationraster.py,sha256=yrE6dg0NgJp0KmrJqdygF74tKbnnwgLQ4rfwBELCYSY,2867
|
|
53
|
+
sgis/raster/raster.py,sha256=ZwtHpG86xwy83tz3Xhi72ZGuAX0_hIo6FAL_8j4VvYo,40862
|
|
54
|
+
sgis/raster/sentinel.py,sha256=0x1HwebRRTCExmsMAXwnct23eMXDBj_KHz8CoP0NOxI,1025
|
|
55
|
+
sgis/raster/zonal.py,sha256=P2bJ8Uvnrc4U1JbyBsKEhjGNaU4FOvRNmxOOF9EzM34,3249
|
|
56
|
+
ssb_sgis-0.3.9.dist-info/LICENSE,sha256=lL2h0dNKGTKAE0CjTy62SDbRennVD1xPgM5LzGqhKeo,1074
|
|
57
|
+
ssb_sgis-0.3.9.dist-info/METADATA,sha256=2ovVu6h0d07YqCoDVaPVvXzA2xEBico1uOzhuGMDs8I,9163
|
|
58
|
+
ssb_sgis-0.3.9.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
59
|
+
ssb_sgis-0.3.9.dist-info/RECORD,,
|
|
File without changes
|
ssb_sgis-0.3.7.dist-info/RECORD
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
sgis/__init__.py,sha256=mvhHbxLAYQfaI-1-M4X85JvCZxRGiEGnBXNKaFaOcpE,3448
|
|
2
|
-
sgis/exceptions.py,sha256=ztMp4sB9xxPvwj2IEsO5kOaB4FmHuU_7-M2pZ7qaxTs,576
|
|
3
|
-
sgis/geopandas_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
sgis/geopandas_tools/bounds.py,sha256=7REImJZQq35BmvznCcih92mzrVYmX43pIznA8PTeU6Y,17616
|
|
5
|
-
sgis/geopandas_tools/buffer_dissolve_explode.py,sha256=8cyI6Hdc6n2k0wNKN4l5wHJ1k_UUjbNy-aMberXh9Kw,11997
|
|
6
|
-
sgis/geopandas_tools/centerlines.py,sha256=9pejh7K34MfANTGxt2Lk4Ras1SJChWS20VuyZCPZ1aA,11762
|
|
7
|
-
sgis/geopandas_tools/conversion.py,sha256=QOgPN4QQEn9N3vS4gRARVROMrXl7ojZyuYg1VsamYf0,16963
|
|
8
|
-
sgis/geopandas_tools/duplicates.py,sha256=HO-AeZzG95hJvoNVlx7G8IvzB_jfoJpnXDhbVqKbfhU,9741
|
|
9
|
-
sgis/geopandas_tools/general.py,sha256=TD9zY3Ogn0GbBQyUHlYddt8P8aL1_nY0wuaCDbf80mI,18181
|
|
10
|
-
sgis/geopandas_tools/geocoding.py,sha256=n47aFQMm4yX1MsPnTM4dFjwegCA1ZmGUDj1uyu7OJV4,691
|
|
11
|
-
sgis/geopandas_tools/geometry_types.py,sha256=9kv-CZFDp98QJykhkY1ZTT7gaH3s1-Q3FcozEFk4mvk,7147
|
|
12
|
-
sgis/geopandas_tools/neighbors.py,sha256=NfxWGA_itbs0vaqhCefqyhEKsS4uf-f6TZERPN9KJrM,14735
|
|
13
|
-
sgis/geopandas_tools/overlay.py,sha256=x-kQ3V_SEzcivYHUYIYAviheD637jXaK-7dqeEwyQao,14423
|
|
14
|
-
sgis/geopandas_tools/point_operations.py,sha256=Cpa02sf_W8nI6FvzJGO9jNM_ZOwIz8nDhKxNdQTqom4,6897
|
|
15
|
-
sgis/geopandas_tools/polygon_operations.py,sha256=OxKuMqlvpHmFX5fRB9anx_8szK8-UuJEoWPyUyDN_Y0,28679
|
|
16
|
-
sgis/geopandas_tools/polygons_as_rings.py,sha256=Om0VJZVr1Kafzd8YeEIoiLhUCRpzAwNaJZ0vyajJ72I,8219
|
|
17
|
-
sgis/geopandas_tools/sfilter.py,sha256=kN7Pdrm6-xFknrnH5YbS4sTBT7EEIjcR5ts7EE4sbms,8434
|
|
18
|
-
sgis/geopandas_tools/snap_polygons.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
sgis/helpers.py,sha256=vcJCYIe35keVQdNqYjGz57f06a2Qs61YC3LbBceDTfE,5580
|
|
20
|
-
sgis/io/_is_dapla.py,sha256=TZhVjrSfNmpNSRbt2C7L8OHXWnlmJ2euNX8IUY7xAjI,459
|
|
21
|
-
sgis/io/dapla.py,sha256=N9JX4tFVcDmqQj5rwkM7B5zXiETgBsl1nTWGCwP7NTE,6970
|
|
22
|
-
sgis/io/opener.py,sha256=Y5CzWFCJz_XweBTEHVysLOKhSEEXdrPsBk_7a63XmBg,538
|
|
23
|
-
sgis/io/read_parquet.py,sha256=GSW2NDy4-XosbamPEzB1xhWxFAPHuGEJZglfQ-V6DzY,3774
|
|
24
|
-
sgis/io/write_municipality_data.py,sha256=pM-IG85Q6KBj9NK9grlYvGXEe-ohj1tdr58S9tCiaoE,6218
|
|
25
|
-
sgis/maps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
-
sgis/maps/examine.py,sha256=fLLA7NfHql-mj_45oQkyPSqS0Gw1O_25v1tlreUn65c,7996
|
|
27
|
-
sgis/maps/explore.py,sha256=wsYRw5Qro1Ok9zMAl2zs95AHcE4kIC25y075nfWvWDE,25518
|
|
28
|
-
sgis/maps/httpserver.py,sha256=z9D66SizO9GIZKaSLIqpFWnwOZZh-kiuVPjFt3WZr8o,1902
|
|
29
|
-
sgis/maps/legend.py,sha256=buHo_UwzPYHIs7kS6H_xETekIR8m9R4PACXfTTMYQWE,20680
|
|
30
|
-
sgis/maps/map.py,sha256=CAFnnqHt2IxdygNiTZNOPqLm6iIbXErhMCFw8wDDvUQ,21690
|
|
31
|
-
sgis/maps/maps.py,sha256=aWfn3ssqpy-7c0uFd7R4bcjCMw5Klvnp7Jz_zcH2Bds,18424
|
|
32
|
-
sgis/maps/thematicmap.py,sha256=6aVPciftW1YjxjRVQDipxayl3aI3tHpYiZ3HfpnSavc,14132
|
|
33
|
-
sgis/networkanalysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
-
sgis/networkanalysis/_get_route.py,sha256=qWnMabeyIdCKOlnFYNYQUrnl_iBdSSequtsbWAbPIM4,6308
|
|
35
|
-
sgis/networkanalysis/_od_cost_matrix.py,sha256=6plN-cpGib8RL7_LhMxo09RJOMR2mjj7M02T4NgLnCA,2151
|
|
36
|
-
sgis/networkanalysis/_points.py,sha256=aQzn_E_-N-hbtoWMxOzm3PFiwO3O0_AUk9-EOoay_24,4206
|
|
37
|
-
sgis/networkanalysis/_service_area.py,sha256=7bOf1I6yzDJMQxYFCtjQw9lpW7YNStVbX8z-QS8Nyec,5336
|
|
38
|
-
sgis/networkanalysis/closing_network_holes.py,sha256=u-aKPd1p7u3AmnI2ryCksWAP6BHRqZdu80J8TxVQ9sU,12413
|
|
39
|
-
sgis/networkanalysis/cutting_lines.py,sha256=7hG8Po-oFQMSD6DdDmHZc1nqRqcy7HcXxWCFUfWaMOs,14168
|
|
40
|
-
sgis/networkanalysis/directednetwork.py,sha256=2l_qBH7wyEd3HMBfMG_0i_xyHUFKbyB1vTDRYI3olnA,11217
|
|
41
|
-
sgis/networkanalysis/finding_isolated_networks.py,sha256=rwgS1GN24BbhZTkk-XB3iKunErEs4YKHlbWCQprevYU,3359
|
|
42
|
-
sgis/networkanalysis/network.py,sha256=UvPPIEfZCjoLBIyHFuSsWXYarku2l3CHrkhX3iiGkl4,7686
|
|
43
|
-
sgis/networkanalysis/networkanalysis.py,sha256=raz5T5Va5xvnLJC7tNkPx57ZUIdm1aEeqMMpOZPGDqQ,67276
|
|
44
|
-
sgis/networkanalysis/networkanalysisrules.py,sha256=UMSo5-a8OF-0yzDgjxNcU0TpMjOpVrqrejgHikMRsXU,12607
|
|
45
|
-
sgis/networkanalysis/nodes.py,sha256=YVN9N3YJFoO3Zu8sF0sP4vynSNYzy1YN9sBdH1vM86M,6854
|
|
46
|
-
sgis/networkanalysis/traveling_salesman.py,sha256=5m_Lf5En99Q8hnvAZAvN7RWZjBP1Tzdaz97DhZNkCZ0,5426
|
|
47
|
-
sgis/parallel/parallel.py,sha256=DXmvH893Dgcx5QwxOpPZi1QBzscMorEAIzwGYf3nJrU,13509
|
|
48
|
-
sgis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
-
sgis/raster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
-
sgis/raster/base.py,sha256=FOXdHl6yT9ge-Ofk4UreeN6LUBL6inNIExGGD1OHF0s,5385
|
|
51
|
-
sgis/raster/elevationraster.py,sha256=yrE6dg0NgJp0KmrJqdygF74tKbnnwgLQ4rfwBELCYSY,2867
|
|
52
|
-
sgis/raster/raster.py,sha256=vWwLwr2lg5j0GBfU0g9KZoIqOPd5klGWfHxGHExZbpg,40524
|
|
53
|
-
sgis/raster/sentinel.py,sha256=0x1HwebRRTCExmsMAXwnct23eMXDBj_KHz8CoP0NOxI,1025
|
|
54
|
-
sgis/raster/zonal.py,sha256=P2bJ8Uvnrc4U1JbyBsKEhjGNaU4FOvRNmxOOF9EzM34,3249
|
|
55
|
-
ssb_sgis-0.3.7.dist-info/LICENSE,sha256=lL2h0dNKGTKAE0CjTy62SDbRennVD1xPgM5LzGqhKeo,1074
|
|
56
|
-
ssb_sgis-0.3.7.dist-info/METADATA,sha256=yKdWxxjxRBvnmY0Yk6tJ1AJeTaitGArS9jZOX6QJ1K4,9011
|
|
57
|
-
ssb_sgis-0.3.7.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
|
|
58
|
-
ssb_sgis-0.3.7.dist-info/RECORD,,
|
|
File without changes
|