desdeo 1.2__py3-none-any.whl → 2.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.
Files changed (182) hide show
  1. desdeo/__init__.py +8 -8
  2. desdeo/adm/ADMAfsar.py +551 -0
  3. desdeo/adm/ADMChen.py +414 -0
  4. desdeo/adm/BaseADM.py +119 -0
  5. desdeo/adm/__init__.py +11 -0
  6. desdeo/api/README.md +73 -0
  7. desdeo/api/__init__.py +15 -0
  8. desdeo/api/app.py +50 -0
  9. desdeo/api/config.py +90 -0
  10. desdeo/api/config.toml +64 -0
  11. desdeo/api/db.py +27 -0
  12. desdeo/api/db_init.py +85 -0
  13. desdeo/api/db_models.py +164 -0
  14. desdeo/api/malaga_db_init.py +27 -0
  15. desdeo/api/models/__init__.py +266 -0
  16. desdeo/api/models/archive.py +23 -0
  17. desdeo/api/models/emo.py +128 -0
  18. desdeo/api/models/enautilus.py +69 -0
  19. desdeo/api/models/gdm/gdm_aggregate.py +139 -0
  20. desdeo/api/models/gdm/gdm_base.py +69 -0
  21. desdeo/api/models/gdm/gdm_score_bands.py +114 -0
  22. desdeo/api/models/gdm/gnimbus.py +138 -0
  23. desdeo/api/models/generic.py +104 -0
  24. desdeo/api/models/generic_states.py +401 -0
  25. desdeo/api/models/nimbus.py +158 -0
  26. desdeo/api/models/preference.py +128 -0
  27. desdeo/api/models/problem.py +717 -0
  28. desdeo/api/models/reference_point_method.py +18 -0
  29. desdeo/api/models/session.py +49 -0
  30. desdeo/api/models/state.py +463 -0
  31. desdeo/api/models/user.py +52 -0
  32. desdeo/api/models/utopia.py +25 -0
  33. desdeo/api/routers/_EMO.backup +309 -0
  34. desdeo/api/routers/_NAUTILUS.py +245 -0
  35. desdeo/api/routers/_NAUTILUS_navigator.py +233 -0
  36. desdeo/api/routers/_NIMBUS.py +765 -0
  37. desdeo/api/routers/__init__.py +5 -0
  38. desdeo/api/routers/emo.py +497 -0
  39. desdeo/api/routers/enautilus.py +237 -0
  40. desdeo/api/routers/gdm/gdm_aggregate.py +234 -0
  41. desdeo/api/routers/gdm/gdm_base.py +420 -0
  42. desdeo/api/routers/gdm/gdm_score_bands/gdm_score_bands_manager.py +398 -0
  43. desdeo/api/routers/gdm/gdm_score_bands/gdm_score_bands_routers.py +377 -0
  44. desdeo/api/routers/gdm/gnimbus/gnimbus_manager.py +698 -0
  45. desdeo/api/routers/gdm/gnimbus/gnimbus_routers.py +591 -0
  46. desdeo/api/routers/generic.py +233 -0
  47. desdeo/api/routers/nimbus.py +705 -0
  48. desdeo/api/routers/problem.py +307 -0
  49. desdeo/api/routers/reference_point_method.py +93 -0
  50. desdeo/api/routers/session.py +100 -0
  51. desdeo/api/routers/test.py +16 -0
  52. desdeo/api/routers/user_authentication.py +520 -0
  53. desdeo/api/routers/utils.py +187 -0
  54. desdeo/api/routers/utopia.py +230 -0
  55. desdeo/api/schema.py +100 -0
  56. desdeo/api/tests/__init__.py +0 -0
  57. desdeo/api/tests/conftest.py +151 -0
  58. desdeo/api/tests/test_enautilus.py +330 -0
  59. desdeo/api/tests/test_models.py +1179 -0
  60. desdeo/api/tests/test_routes.py +1075 -0
  61. desdeo/api/utils/_database.py +263 -0
  62. desdeo/api/utils/_logger.py +29 -0
  63. desdeo/api/utils/database.py +36 -0
  64. desdeo/api/utils/emo_database.py +40 -0
  65. desdeo/core.py +34 -0
  66. desdeo/emo/__init__.py +159 -0
  67. desdeo/emo/hooks/archivers.py +188 -0
  68. desdeo/emo/methods/EAs.py +541 -0
  69. desdeo/emo/methods/__init__.py +0 -0
  70. desdeo/emo/methods/bases.py +12 -0
  71. desdeo/emo/methods/templates.py +111 -0
  72. desdeo/emo/operators/__init__.py +1 -0
  73. desdeo/emo/operators/crossover.py +1282 -0
  74. desdeo/emo/operators/evaluator.py +114 -0
  75. desdeo/emo/operators/generator.py +459 -0
  76. desdeo/emo/operators/mutation.py +1224 -0
  77. desdeo/emo/operators/scalar_selection.py +202 -0
  78. desdeo/emo/operators/selection.py +1778 -0
  79. desdeo/emo/operators/termination.py +286 -0
  80. desdeo/emo/options/__init__.py +108 -0
  81. desdeo/emo/options/algorithms.py +435 -0
  82. desdeo/emo/options/crossover.py +164 -0
  83. desdeo/emo/options/generator.py +131 -0
  84. desdeo/emo/options/mutation.py +260 -0
  85. desdeo/emo/options/repair.py +61 -0
  86. desdeo/emo/options/scalar_selection.py +66 -0
  87. desdeo/emo/options/selection.py +127 -0
  88. desdeo/emo/options/templates.py +383 -0
  89. desdeo/emo/options/termination.py +143 -0
  90. desdeo/explanations/__init__.py +6 -0
  91. desdeo/explanations/explainer.py +100 -0
  92. desdeo/explanations/utils.py +90 -0
  93. desdeo/gdm/__init__.py +22 -0
  94. desdeo/gdm/gdmtools.py +45 -0
  95. desdeo/gdm/score_bands.py +114 -0
  96. desdeo/gdm/voting_rules.py +50 -0
  97. desdeo/mcdm/__init__.py +41 -0
  98. desdeo/mcdm/enautilus.py +338 -0
  99. desdeo/mcdm/gnimbus.py +484 -0
  100. desdeo/mcdm/nautili.py +345 -0
  101. desdeo/mcdm/nautilus.py +477 -0
  102. desdeo/mcdm/nautilus_navigator.py +656 -0
  103. desdeo/mcdm/nimbus.py +417 -0
  104. desdeo/mcdm/pareto_navigator.py +269 -0
  105. desdeo/mcdm/reference_point_method.py +186 -0
  106. desdeo/problem/__init__.py +83 -0
  107. desdeo/problem/evaluator.py +561 -0
  108. desdeo/problem/external/__init__.py +18 -0
  109. desdeo/problem/external/core.py +356 -0
  110. desdeo/problem/external/pymoo_provider.py +266 -0
  111. desdeo/problem/external/runtime.py +44 -0
  112. desdeo/problem/gurobipy_evaluator.py +562 -0
  113. desdeo/problem/infix_parser.py +341 -0
  114. desdeo/problem/json_parser.py +944 -0
  115. desdeo/problem/pyomo_evaluator.py +487 -0
  116. desdeo/problem/schema.py +1829 -0
  117. desdeo/problem/simulator_evaluator.py +348 -0
  118. desdeo/problem/sympy_evaluator.py +244 -0
  119. desdeo/problem/testproblems/__init__.py +88 -0
  120. desdeo/problem/testproblems/benchmarks_server.py +120 -0
  121. desdeo/problem/testproblems/binh_and_korn_problem.py +88 -0
  122. desdeo/problem/testproblems/cake_problem.py +185 -0
  123. desdeo/problem/testproblems/dmitry_forest_problem_discrete.py +71 -0
  124. desdeo/problem/testproblems/dtlz2_problem.py +102 -0
  125. desdeo/problem/testproblems/forest_problem.py +283 -0
  126. desdeo/problem/testproblems/knapsack_problem.py +163 -0
  127. desdeo/problem/testproblems/mcwb_problem.py +831 -0
  128. desdeo/problem/testproblems/mixed_variable_dimenrions_problem.py +83 -0
  129. desdeo/problem/testproblems/momip_problem.py +172 -0
  130. desdeo/problem/testproblems/multi_valued_constraints.py +119 -0
  131. desdeo/problem/testproblems/nimbus_problem.py +143 -0
  132. desdeo/problem/testproblems/pareto_navigator_problem.py +89 -0
  133. desdeo/problem/testproblems/re_problem.py +492 -0
  134. desdeo/problem/testproblems/river_pollution_problems.py +440 -0
  135. desdeo/problem/testproblems/rocket_injector_design_problem.py +140 -0
  136. desdeo/problem/testproblems/simple_problem.py +351 -0
  137. desdeo/problem/testproblems/simulator_problem.py +92 -0
  138. desdeo/problem/testproblems/single_objective.py +289 -0
  139. desdeo/problem/testproblems/spanish_sustainability_problem.py +945 -0
  140. desdeo/problem/testproblems/zdt_problem.py +274 -0
  141. desdeo/problem/utils.py +245 -0
  142. desdeo/tools/GenerateReferencePoints.py +181 -0
  143. desdeo/tools/__init__.py +120 -0
  144. desdeo/tools/desc_gen.py +22 -0
  145. desdeo/tools/generics.py +165 -0
  146. desdeo/tools/group_scalarization.py +3090 -0
  147. desdeo/tools/gurobipy_solver_interfaces.py +258 -0
  148. desdeo/tools/indicators_binary.py +117 -0
  149. desdeo/tools/indicators_unary.py +362 -0
  150. desdeo/tools/interaction_schema.py +38 -0
  151. desdeo/tools/intersection.py +54 -0
  152. desdeo/tools/iterative_pareto_representer.py +99 -0
  153. desdeo/tools/message.py +265 -0
  154. desdeo/tools/ng_solver_interfaces.py +199 -0
  155. desdeo/tools/non_dominated_sorting.py +134 -0
  156. desdeo/tools/patterns.py +283 -0
  157. desdeo/tools/proximal_solver.py +99 -0
  158. desdeo/tools/pyomo_solver_interfaces.py +477 -0
  159. desdeo/tools/reference_vectors.py +229 -0
  160. desdeo/tools/scalarization.py +2065 -0
  161. desdeo/tools/scipy_solver_interfaces.py +454 -0
  162. desdeo/tools/score_bands.py +627 -0
  163. desdeo/tools/utils.py +388 -0
  164. desdeo/tools/visualizations.py +67 -0
  165. desdeo/utopia_stuff/__init__.py +0 -0
  166. desdeo/utopia_stuff/data/1.json +15 -0
  167. desdeo/utopia_stuff/data/2.json +13 -0
  168. desdeo/utopia_stuff/data/3.json +15 -0
  169. desdeo/utopia_stuff/data/4.json +17 -0
  170. desdeo/utopia_stuff/data/5.json +15 -0
  171. desdeo/utopia_stuff/from_json.py +40 -0
  172. desdeo/utopia_stuff/reinit_user.py +38 -0
  173. desdeo/utopia_stuff/utopia_db_init.py +212 -0
  174. desdeo/utopia_stuff/utopia_problem.py +403 -0
  175. desdeo/utopia_stuff/utopia_problem_old.py +415 -0
  176. desdeo/utopia_stuff/utopia_reference_solutions.py +79 -0
  177. desdeo-2.1.0.dist-info/METADATA +186 -0
  178. desdeo-2.1.0.dist-info/RECORD +180 -0
  179. {desdeo-1.2.dist-info → desdeo-2.1.0.dist-info}/WHEEL +1 -1
  180. desdeo-2.1.0.dist-info/licenses/LICENSE +21 -0
  181. desdeo-1.2.dist-info/METADATA +0 -16
  182. desdeo-1.2.dist-info/RECORD +0 -4
desdeo/tools/utils.py ADDED
@@ -0,0 +1,388 @@
1
+ """General utilities related to solvers."""
2
+
3
+ import shutil
4
+ from collections.abc import Callable
5
+
6
+ import numpy as np
7
+ import polars as pl
8
+
9
+ from desdeo.problem import (
10
+ ObjectiveTypeEnum,
11
+ Problem,
12
+ TensorVariable,
13
+ VariableDimensionEnum,
14
+ VariableDomainTypeEnum,
15
+ numpy_array_to_objective_dict,
16
+ variable_dimension_enumerate,
17
+ )
18
+ from desdeo.tools.generics import BaseSolver
19
+ from desdeo.tools.gurobipy_solver_interfaces import GurobipySolver, PersistentGurobipySolver
20
+ from desdeo.tools.ng_solver_interfaces import NevergradGenericOptions, NevergradGenericSolver
21
+ from desdeo.tools.proximal_solver import ProximalSolver
22
+ from desdeo.tools.pyomo_solver_interfaces import (
23
+ BonminOptions,
24
+ CbcOptions,
25
+ IpoptOptions,
26
+ PyomoBonminSolver,
27
+ PyomoCBCSolver,
28
+ PyomoGurobiSolver,
29
+ PyomoIpoptSolver,
30
+ )
31
+ from desdeo.tools.scipy_solver_interfaces import (
32
+ ScipyDeOptions,
33
+ ScipyDeSolver,
34
+ ScipyMinimizeOptions,
35
+ ScipyMinimizeSolver,
36
+ )
37
+
38
+ available_solvers = {
39
+ "scipy_minimize": {
40
+ "constructor": ScipyMinimizeSolver,
41
+ "options": ScipyMinimizeOptions,
42
+ },
43
+ "scipy_de": {
44
+ "constructor": ScipyDeSolver,
45
+ "options": ScipyDeOptions,
46
+ },
47
+ "proximal": {
48
+ "constructor": ProximalSolver,
49
+ "options": None,
50
+ },
51
+ "nevergrad": {"constructor": NevergradGenericSolver, "options": NevergradGenericOptions},
52
+ "pyomo_bonmin": {
53
+ "constructor": PyomoBonminSolver,
54
+ "options": BonminOptions,
55
+ },
56
+ "pyomo_cbc": {
57
+ "constructor": PyomoCBCSolver,
58
+ "options": CbcOptions,
59
+ },
60
+ "pyomo_ipopt": {
61
+ "constructor": PyomoIpoptSolver,
62
+ "options": IpoptOptions,
63
+ },
64
+ "pyomo_gurobi": {"constructor": PyomoGurobiSolver, "options": None},
65
+ "gurobipy": {
66
+ "constructor": GurobipySolver,
67
+ "options": None,
68
+ },
69
+ "gurobipy_persistent": {
70
+ "constructor": PersistentGurobipySolver,
71
+ "options": None,
72
+ },
73
+ }
74
+
75
+
76
+ def find_compatible_solvers(problem: Problem) -> list[BaseSolver]:
77
+ """Find solvers that are compatible with the problem that is being solved.
78
+
79
+ Args:
80
+ problem (Problem): The problem being solved.
81
+
82
+ Returns:
83
+ list[BaseSolver]: A list of solvers that are compatible with the problem.
84
+ """
85
+ solvers = []
86
+
87
+ # check for variable dimensions
88
+ # This could be also done by just checking if all the variables are Variables instead of TensorVariables
89
+ # as solvers at the moment do not care about the difference between 1D tensors and higher dimensions.
90
+ # This is because the solvers that utilize the polars evaluator (the only evaluator that works with
91
+ # scalars and 1D tensors and not higher dimensions) only support scalar valued variables at the moment.
92
+ var_dim = variable_dimension_enumerate(problem)
93
+
94
+ # check if problem has only data-based objectives
95
+ all_data_based = all(objective.objective_type == ObjectiveTypeEnum.data_based for objective in problem.objectives)
96
+
97
+ # check if problem has a discrete definition
98
+ has_discrete = problem.discrete_representation is not None
99
+
100
+ # check if problem is data-based
101
+ if all_data_based and has_discrete and var_dim == VariableDimensionEnum.scalar:
102
+ # problem has only data-based objectives and a discrete definition is available
103
+ # return ProximalSolver as it is the only solver for data-based problems at the moment
104
+ return [available_solvers["proximal"]["constructor"]]
105
+
106
+ # check if the problem is differentiable and if it is mixed integer
107
+ if (
108
+ problem.is_twice_differentiable
109
+ and shutil.which("bonmin")
110
+ and problem.variable_domain
111
+ in [
112
+ VariableDomainTypeEnum.integer,
113
+ VariableDomainTypeEnum.mixed,
114
+ ]
115
+ ):
116
+ solvers.append(available_solvers["pyomo_bonmin"]["constructor"]) # bonmin has to be installed
117
+
118
+ # check if the problem is differentiable and continuous
119
+ if (
120
+ problem.is_twice_differentiable
121
+ and shutil.which("ipopt")
122
+ and problem.variable_domain in [VariableDomainTypeEnum.continuous]
123
+ ):
124
+ solvers.append(available_solvers["pyomo_ipopt"]["constructor"]) # ipopt has to be installed
125
+
126
+ # check if the problem is linear
127
+ if problem.is_linear:
128
+ solvers.append(available_solvers["gurobipy"]["constructor"])
129
+ if problem.is_linear and shutil.which("gurobi"):
130
+ solvers.append(available_solvers["pyomo_gurobi"]["constructor"]) # gurobi has to be installed
131
+ if problem.is_linear and shutil.which("cbc"):
132
+ solvers.append(available_solvers["pyomo_cbc"]["constructor"])
133
+
134
+ # check if problem's variables are all scalars
135
+ if var_dim == VariableDimensionEnum.scalar:
136
+ # nevergrad and scipy solvers work with all(?) problems with only scalar valued variables
137
+ solvers.append(available_solvers["nevergrad"]["constructor"])
138
+ solvers.append(available_solvers["scipy_minimize"]["constructor"])
139
+ solvers.append(available_solvers["scipy_de"]["constructor"])
140
+ return solvers
141
+
142
+
143
+ def guess_best_solver(problem: Problem) -> BaseSolver: # noqa: PLR0911
144
+ """Given a problem, tries to guess the best solver to handle it.
145
+
146
+ Args:
147
+ problem (Problem): the problem being solved.
148
+
149
+ Note:
150
+ Needs to be extended as new solvers are implemented.
151
+
152
+ Returns:
153
+ BaseSolver: a solver class that uses BaseSolver as a base class
154
+ """
155
+ # needs to be extended as new solver are implemented
156
+
157
+ # check if problem has only data-based objectives
158
+ all_data_based = all(objective.objective_type == ObjectiveTypeEnum.data_based for objective in problem.objectives)
159
+
160
+ # check if problem has a discrete definition
161
+ has_discrete = problem.discrete_representation is not None
162
+
163
+ # TODO: when figured out what solver is best for problems with tensor variables: it seems that e.g. the
164
+ # forest problems don't work with pyomo_cbc. So VERY MUCH a quick fix to get something working, as those types of
165
+ # problems have been ok with gurobipy.
166
+
167
+ # if True in [isinstance(variable, TensorVariable) for variable in problem.variables]:
168
+ if False:
169
+ if problem.is_linear and shutil.which("cbc"):
170
+ return available_solvers["pyomo_cbc"]["constructor"]
171
+
172
+ if problem.is_linear:
173
+ return available_solvers["gurobipy"]["constructor"]
174
+
175
+ # check if the problem is differentiable and if it is mixed integer
176
+ if (
177
+ problem.is_twice_differentiable
178
+ and shutil.which("bonmin")
179
+ and problem.variable_domain
180
+ in [
181
+ VariableDomainTypeEnum.integer,
182
+ VariableDomainTypeEnum.mixed,
183
+ ]
184
+ ):
185
+ return available_solvers["pyomo_bonmin"]["constructor"]
186
+
187
+ # check if the problem is differentiable and continuous
188
+ if (
189
+ problem.is_twice_differentiable
190
+ and shutil.which("ipopt")
191
+ and problem.variable_domain in [VariableDomainTypeEnum.continuous]
192
+ ):
193
+ return available_solvers["pyomo_ipopt"]["constructor"]
194
+
195
+ if all_data_based and has_discrete:
196
+ # problem has only data-based objectives and a discrete definition is available
197
+ # guess proximal solver is best
198
+ return available_solvers["proximal"]["constructor"]
199
+
200
+ # check if the problem is linear
201
+ if problem.is_linear:
202
+ return available_solvers["gurobipy"]["constructor"]
203
+
204
+ # check if the problem is differentiable and if it is mixed integer
205
+ if (
206
+ problem.is_twice_differentiable
207
+ and shutil.which("bonmin")
208
+ and problem.variable_domain
209
+ in [
210
+ VariableDomainTypeEnum.integer,
211
+ VariableDomainTypeEnum.mixed,
212
+ ]
213
+ ):
214
+ return available_solvers["pyomo_bonmin"]["constructor"]
215
+
216
+ # check if the problem is differentiable and continuous
217
+ if (
218
+ problem.is_twice_differentiable
219
+ and shutil.which("ipopt")
220
+ and problem.variable_domain in [VariableDomainTypeEnum.continuous]
221
+ ):
222
+ return available_solvers["pyomo_ipopt"]["constructor"]
223
+
224
+ # else, guess nevergrad heuristics to be the best
225
+ return available_solvers["nevergrad"]["constructor"]
226
+
227
+ # thigs to check: variable types, does the problem have constraint, constraint types, etc...
228
+
229
+
230
+ def get_corrected_ideal_and_nadir(problem: Problem) -> tuple[dict[str, float | None], dict[str, float | None] | None]:
231
+ """Compute the corrected ideal and nadir points depending if an objective function is to be maximized or not.
232
+
233
+ I.e., the ideal and nadir point element for objectives to be maximized will be multiplied by -1.
234
+
235
+ Args:
236
+ problem (Problem): the problem with the ideal and nadir points.
237
+
238
+ Raises:
239
+ ValueError: some of the ideal or nadir point components have not been defined
240
+ for some of the objectives.
241
+
242
+ Returns:
243
+ tuple[list[float], list[float]]: a list with the corrected ideal point
244
+ and a list with the corrected nadir point. Will return None for missing
245
+ elements.
246
+ """
247
+ # check that ideal and nadir points are actually defined
248
+ if any(obj.ideal is None for obj in problem.objectives) or any(obj.nadir is None for obj in problem.objectives):
249
+ msg = "Some of the objectives have not a defined ideal or nadir value."
250
+ raise ValueError(msg)
251
+
252
+ ideal_point = {
253
+ objective.symbol: objective.ideal if not objective.maximize else -objective.ideal
254
+ for objective in problem.objectives
255
+ }
256
+ nadir_point = {
257
+ objective.symbol: objective.nadir if not objective.maximize else -objective.nadir
258
+ for objective in problem.objectives
259
+ }
260
+
261
+ return ideal_point, nadir_point
262
+
263
+
264
+ def get_corrected_ideal(problem: Problem) -> dict[str, float | None]:
265
+ """Compute the corrected ideal point depending if an objective function is to be maximized or not.
266
+
267
+ I.e., the ideal point element for objectives to be maximized will be multiplied by -1.
268
+
269
+ Args:
270
+ problem (Problem): the problem with the ideal point.
271
+
272
+ Raises:
273
+ ValueError: some of the ideal point components have not been defined
274
+ for some of the objectives.
275
+
276
+ Returns:
277
+ list[float]: a list with the corrected ideal point. Will return None for missing elements.
278
+ """
279
+ # check that ideal points are actually defined
280
+ if any(obj.ideal is None for obj in problem.objectives):
281
+ msg = "Some of the objectives have not a defined ideal value."
282
+ raise ValueError(msg)
283
+
284
+ return {
285
+ objective.symbol: objective.ideal if not objective.maximize else -objective.ideal
286
+ for objective in problem.objectives
287
+ }
288
+
289
+
290
+ def get_corrected_nadir(problem: Problem) -> dict[str, float | None]:
291
+ """Compute the corrected nadir point depending if an objective function is to be maximized or not.
292
+
293
+ I.e., the nadir point element for objectives to be maximized will be multiplied by -1.
294
+
295
+ Args:
296
+ problem (Problem): the problem with the nadir points.
297
+
298
+ Raises:
299
+ ValueError: some of the nadir point components have not been defined
300
+ for some of the objectives.
301
+
302
+ Returns:
303
+ list[float]: a list with the corrected nadir point. Will return None for missing elements.
304
+ """
305
+ # check that nadir points are actually defined
306
+ if any(obj.nadir is None for obj in problem.objectives):
307
+ msg = "Some of the objectives have not a defined nadir value."
308
+ raise ValueError(msg)
309
+
310
+ return {
311
+ objective.symbol: objective.nadir if not objective.maximize else -objective.nadir
312
+ for objective in problem.objectives
313
+ }
314
+
315
+
316
+ def flip_maximized_objective_values(problem: Problem, objective_values: dict[str, float]) -> dict[str, float]:
317
+ """Flips the objective values if the objective function is to be maximized.
318
+
319
+ Flips the objective values if the objective function is to be maximized by multiplying
320
+ the values related to maximized objective functions by -1.
321
+
322
+ Args:
323
+ problem (Problem): the problem the objective values are related to.
324
+ objective_values (dict[str, float]): the objective values to be flipped.
325
+
326
+ Returns:
327
+ dict[str, float]: the flipped objective values.
328
+ """
329
+ return {
330
+ obj.symbol: objective_values[obj.symbol] * -1 if obj.maximize else objective_values[obj.symbol]
331
+ for obj in problem.objectives
332
+ }
333
+
334
+
335
+ def payoff_table_method(problem: Problem, solver: BaseSolver = None) -> tuple[dict[str, float], dict[str, float]]:
336
+ """Solves a representation for the ideal and nadir points for a multiobjective optimization problem.
337
+
338
+ Args:
339
+ problem (Problem): The problem for which the ideal and nadir are solved.
340
+ solver (BaseSolver): The solver to be used in solving the points. Defaults to None.
341
+
342
+ Returns:
343
+ tuple[dict[str, float], dict[str, float]]: The estimated ideal and nadir points.
344
+ """
345
+ solver = solver if solver is not None else guess_best_solver(problem)
346
+ solver = solver(problem)
347
+
348
+ k = len(problem.objectives)
349
+ po_table = np.zeros((k, k))
350
+
351
+ for i in range(k):
352
+ res = solver.solve(f"{problem.objectives[i].symbol}_min")
353
+ for j in range(k):
354
+ po_table[i][j] = res.optimal_objectives[problem.objectives[j].symbol]
355
+
356
+ ideal = np.diag(po_table)
357
+ nadir = []
358
+
359
+ for i in range(k):
360
+ if problem.objectives[i].maximize:
361
+ nadir.append(np.min(po_table.T[i]))
362
+ else:
363
+ nadir.append(np.max(po_table.T[i]))
364
+ return numpy_array_to_objective_dict(problem, ideal), numpy_array_to_objective_dict(problem, nadir)
365
+
366
+
367
+ def repair(lower_bounds: dict[str, float], upper_bounds: dict[str, float]) -> Callable[[pl.DataFrame], pl.DataFrame]:
368
+ """Repairs the offspring by clipping the values to be within the specified bounds.
369
+
370
+ Useful in evolutionary algorithms where offspring may go out of bounds due to crossover or mutation operations.
371
+
372
+ Args:
373
+ offspring (pl.DataFrame): The offspring to be repaired.
374
+ lower_bounds (dict[str, float]): The lower bounds for each variable.
375
+ upper_bounds (dict[str, float]): The upper bounds for each variable.
376
+
377
+ Returns:
378
+ Callable[[pl.DataFrame], pl.DataFrame]: A function that takes a DataFrame and returns a repaired DataFrame.
379
+ """
380
+
381
+ def actual_repair(offspring: pl.DataFrame) -> pl.DataFrame:
382
+ for var in offspring.columns:
383
+ offspring = offspring.with_columns(
384
+ pl.col(var).clip(lower_bound=lower_bounds[var], upper_bound=upper_bounds[var])
385
+ )
386
+ return offspring
387
+
388
+ return actual_repair
@@ -0,0 +1,67 @@
1
+ import plotly.graph_objects as go
2
+
3
+
4
+ def scatter_plot_comparison(
5
+ *results, x_key="f_1", y_key="f_2", z_key=None, reference_point=None, names=None
6
+ ):
7
+ """
8
+ Plots multiple sets of data in a scatter plot (2D or 3D depending on the data).
9
+
10
+ Parameters:
11
+ *results: Variable number of result objects, each containing outputs with keys for x, y, and optionally z.
12
+ x_key: Key for the x-axis data in the outputs.
13
+ y_key: Key for the y-axis data in the outputs.
14
+ z_key: Key for the z-axis data in the outputs (optional, for 3D plots).
15
+ reference_point: A dictionary with keys matching x_key, y_key, and optionally z_key, representing the reference point to plot.
16
+ names: List of names for each data set to display in the legend.
17
+ """
18
+ traces = []
19
+ is_3d = z_key is not None and all(z_key in result.outputs for result in results)
20
+
21
+ if names is None:
22
+ names = [f"Dataset {i+1}" for i in range(len(results))]
23
+
24
+ for i, (result, name) in enumerate(zip(results, names)):
25
+ color = f"hsl({i * 360 / len(results)}, 100%, 50%)" # Generate distinct colors
26
+ if is_3d:
27
+ trace = go.Scatter3d(
28
+ x=result.outputs[x_key],
29
+ y=result.outputs[y_key],
30
+ z=result.outputs[z_key],
31
+ mode="markers",
32
+ marker=dict(size=4, color=color, symbol="circle"),
33
+ name=name,
34
+ )
35
+ else:
36
+ trace = go.Scatter(
37
+ x=result.outputs[x_key],
38
+ y=result.outputs[y_key],
39
+ mode="markers",
40
+ marker=dict(size=8, color=color, symbol="circle"),
41
+ name=name,
42
+ )
43
+ traces.append(trace)
44
+
45
+ if reference_point:
46
+ if is_3d:
47
+ ref_trace = go.Scatter3d(
48
+ x=[reference_point[x_key]],
49
+ y=[reference_point[y_key]],
50
+ z=[reference_point[z_key]],
51
+ mode="markers",
52
+ marker=dict(size=4, color="black", symbol="circle"),
53
+ name="Reference Point",
54
+ )
55
+ else:
56
+ ref_trace = go.Scatter(
57
+ x=[reference_point[x_key]],
58
+ y=[reference_point[y_key]],
59
+ mode="markers",
60
+ marker=dict(size=8, color="black", symbol="circle"),
61
+ name="Reference Point",
62
+ )
63
+ traces.append(ref_trace)
64
+
65
+ fig = go.Figure(data=traces)
66
+
67
+ return fig
File without changes
@@ -0,0 +1,15 @@
1
+ {"type":"FeatureCollection", "features": [
2
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356335.0831461464,6858133.939323606],[356333.2308989554,6858130.499435965],[356333.76011243934,6858125.207862936],[356337.7292135623,6858114.624716867],[356339.14325850626,6858105.498874176],[356334.66516861843,6858102.979211247],[356328.53426974267,6858105.215166304],[356307.2831461467,6858119.02190787],[356296.9657304167,6858120.995503381],[356289.64382030466,6858119.329211239],[356281.19269670884,6858125.418537089],[356270.62528097886,6858130.362357308],[356258.1123596311,6858130.260671916],[356251.21011244005,6858133.145503373],[356229.77865176526,6858179.447750561],[356229.25842704636,6858186.202244941],[356232.5994382824,6858199.99381798],[356094.6629214294,6858155.82303144],[356093.8842697445,6858155.573593242],[356091.1106742385,6858154.685390993],[356083.6831461486,6858152.3067393005],[356083.57584277866,6858150.474716829],[356083.5601124416,6858148.47584043],[356083.5707865985,6858146.79718874],[356083.6977528907,6858143.999997731],[356083.7522472726,6858142.802806719],[356083.8691012055,6858141.24718874],[356083.9949439018,6858139.925278631],[356085.1320225535,6858127.99999773],[356085.41179783444,6858125.066851662],[356085.62921356445,6858117.074155032],[356085.5151686204,6858111.99999773],[356085.4230337895,6858107.903930313],[356085.35280907043,6858104.788761781],[356085.08988772135,6858095.99999773],[356084.9938203067,6858092.799997731],[356084.82921356463,6858090.584829191],[356084.6977528904,6858088.811795481],[356084.6550562614,6858088.353930321],[356084.34887648653,6858084.367975261],[356084.3308989574,6858082.370222452],[356084.6735955874,6858079.999997732],[356084.70674165455,6858079.770222453],[356085.2848315424,6858077.857862902],[356086.0870787335,6858076.026964021],[356087.00393266545,6858074.251121331],[356087.4129214294,6858073.538199981],[356088.9932585085,6858070.782020203],[356089.2949439013,6858070.284267391],[356089.90112367645,6858068.379211212],[356090.37303378945,6858066.437076381],[356090.8550562615,6858063.999997732],[356091.27977536246,6858061.848874133],[356091.53595513746,6858060.553930323],[356091.83426974446,6858059.330896613],[356092.42696637334,6858057.423031443],[356093.94325850846,6858053.724155033],[356094.83426974446,6858051.935952793],[356096.0000000813,6858049.777525823],[356096.96011244145,6858047.999997732],[356097.7000000815,6858046.629773015],[356098.04438210337,6858046.139885374],[356100.1994382832,6858043.0690988535],[356100.52471918234,6858041.585952795],[356100.5483146883,6858041.479211214],[356100.76910120534,6858041.137076383],[356102.6421349124,6858038.239323574],[356103.2623596324,6858036.642132566],[356104.1971910922,6858034.235952795],[356105.20224727213,6858032.507862903],[356105.5117978343,6858031.999997736],[356105.86516862025,6858031.420222457],[356108.07078659825,6858028.085952797],[356110.44606749713,6858024.870222454],[356112.00000008126,6858023.013480886],[356115.57696637337,6858018.738761786],[356116.91404502525,6858017.251121337],[356116.96123603615,6858017.199997738],[356117.8342697442,6858016.247750546],[356118.0573034523,6858015.999997735],[356121.8471910923,6858011.791008977],[356123.0898877211,6858010.226964026],[356124.1949439011,6858008.561795487],[356124.6797753622,6858007.720784258],[356125.55000008113,6858005.9230314465],[356126.276966373,6858004.0612336965],[356126.9022472721,6858002.161233699],[356127.4977528902,6857999.99999774],[356127.71460682305,6857999.212919087],[356128.000000081,6857998.176402237],[356129.02584277815,6857994.452244931],[356129.46404502506,6857993.057862909],[356130.946067497,6857989.346065159],[356131.8230337892,6857987.549997739],[356132.78202255303,6857985.796065158],[356133.80617985595,6857984.079773018],[356133.85786525,6857983.99999774],[356134.89325850783,6857982.401121339],[356135.74269671,6857981.174155038],[356135.7651686201,6857981.142132569],[356136.95112367696,6857979.532020209],[356138.19101131696,6857977.96404268],[356139.4859551368,6857976.441008979],[356139.910674238,6857975.978649429],[356139.5129214289,6857976.456177518],[356140.410674238,6857976.689323579],[356145.53314614785,6857978.017413471],[356154.5859551369,6857975.191570771],[356162.31573041785,6857971.447750554],[356166.4544944628,6857969.442694373],[356175.69044951885,6857957.898874156],[356181.40449446253,6857953.136514596],[356185.21460682247,6857942.660110106],[356185.8713483955,6857937.404492126],[356186.1668540137,6857935.0410089865],[356184.2617978336,6857929.3269640375],[356194.2320225525,6857918.021346059],[356224.53988772025,6857941.37696404],[356238.3455056982,6857947.330896632],[356243.9500000801,6857952.016289894],[356254.67977536086,6857973.784267416],[356262.59494389984,6857986.106739326],[356262.825280979,6857993.705053937],[356259.1213483951,6858002.1719078645],[356258.062921428,6858009.580334836],[356263.88370794494,6858018.576402254],[356271.29213491187,6858025.191008996],[356292.98764052865,6858029.95336855],[356317.06516861846,6858041.065728103],[356326.58988771937,6858041.594941584],[356339.4792135622,6858037.963480917],[356345.1623596303,6858046.149997767],[356348.93314614636,6858058.698874178],[356352.5910113152,6858077.060671927],[356356.90224727034,6858086.484829227],[356362.5567416521,6858090.149997772],[356373.5084270451,6858090.642132602],[356376.50224726996,6858094.801683161],[356374.706179854,6858117.369098892],[356371.51573041617,6858123.776402261],[356362.1162922142,6858135.084829229],[356355.6488764844,6858139.99437979],[356345.34044951724,6858135.103930357],[356335.0831461464,6858133.939323606]]]},"properties":{"id":909,"standid":34478868,"parcelid":null,"realestate":null,"standnumbe":26,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"T2","standquali":10,"maintreesp":2,"accessibil":4,"standinfo":"","datasource":11,"growthplac":101,"area":4.357,"areadecrea":0,"creationti":"2021/04/13 21:06:27.000","updatetime":"2021/04/13 21:06:27.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
3
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356370.870786596,6858043.43089665],[356362.189887719,6858056.821907879],[356348.93314614636,6858058.698874178],[356345.1623596303,6858046.149997767],[356339.4792135622,6858037.963480917],[356326.58988771937,6858041.594941584],[356317.06516861846,6858041.065728103],[356292.98764052865,6858029.95336855],[356271.29213491187,6858025.191008996],[356263.88370794494,6858018.576402254],[356258.062921428,6858009.580334836],[356259.1213483951,6858002.1719078645],[356262.825280979,6857993.705053937],[356262.59494389984,6857986.106739326],[356254.67977536086,6857973.784267416],[356243.9500000801,6857952.016289894],[356238.3455056982,6857947.330896632],[356224.53988772025,6857941.37696404],[356194.2320225525,6857918.021346059],[356189.4561798555,6857906.4522449365],[356184.5960674966,6857903.798312356],[356181.2516854735,6857897.751683136],[356176.03707873257,6857859.488761795],[356182.0365169345,6857855.748874147],[356182.7578652495,6857855.220784265],[356189.3398877204,6857849.508986508],[356192.00000008044,6857850.659548306],[356199.8421349115,6857854.049997749],[356201.9584270463,6857854.965166288],[356291.3202247985,6857893.602806748],[356326.0331461464,6857908.612357317],[356363.43539333704,6857924.7837056415],[356365.2511236739,6857925.569098892],[356368.000000079,6857926.75786294],[356372.4359551348,6857928.67584047],[356365.3224719891,6857949.882582039],[356364.82022479805,6857951.182020241],[356364.529213562,6857952.2471887795],[356364.48146075313,6857952.5679753],[356363.096629292,6857964.012357322],[356361.50617985404,6857976.875840469],[356361.466854012,6857977.3426944],[356360.83707873104,6857991.359548329],[356360.8314607531,6857991.667413499],[356360.93876412406,6858000.07696406],[356360.956741652,6858000.260671929],[356360.95449446107,6858000.445503391],[356361.27752816916,6858004.785391032],[356361.3522472701,6858005.38202024],[356361.40280906827,6858005.635952829],[356363.695505697,6858015.99999777],[356363.3539326633,6858030.046065192],[356366.449438281,6858041.0168517],[356370.870786596,6858043.43089665]]]},"properties":{"id":910,"standid":34478871,"parcelid":null,"realestate":null,"standnumbe":27,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"03","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":1.999,"areadecrea":0,"creationti":"2020/10/01 21:22:18.000","updatetime":"2020/10/01 21:22:18.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
4
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356512.77977535874,6857989.32696408],[356504.33707873,6857997.002244979],[356489.1235955842,6858004.278087677],[356475.8943821012,6858012.877525875],[356458.0348315392,6858026.106739354],[356440.83707873046,6858034.043818002],[356429.59213491064,6858038.674155079],[356418.1432585056,6858048.73145845],[356395.2634832248,6858039.389885415],[356379.26685401186,6858022.698312382],[356373.21235963,6858003.465166313],[356373.44438210106,6857978.115728111],[356375.0078652479,6857965.469660692],[356376.30449446087,6857954.752806765],[356382.1786517638,6857939.546065193],[356382.4056180568,6857938.796065193],[356383.6314607529,6857933.516289912],[356384.0000000789,6857933.675840473],[356389.375280978,6857935.999997773],[356390.8977528879,6857936.6578629445],[356393.0904495169,6857937.606177555],[356394.4056180568,6857938.175278676],[356437.2432585054,6857956.697188791],[356462.02415738115,6857967.401683175],[356471.71067423525,6857971.586514635],[356505.6696629989,6857986.255615771],[356506.63539333583,6857986.673031499],[356512.0000000778,6857988.9904472325],[356512.77977535874,6857989.32696408]]]},"properties":{"id":911,"standid":34478872,"parcelid":null,"realestate":null,"standnumbe":28,"standnum_1":"","maingroup":1,"subgroup":2,"fertilityc":3,"soiltype":60,"drainagest":8,"ditchingye":1983,"thinningye":null,"developmen":"03","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":0.891,"areadecrea":0,"creationti":"2020/10/01 21:22:18.000","updatetime":"2020/10/01 21:22:18.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
5
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356512.77977535874,6857989.32696408],[356525.7842697407,6857994.944379813],[356526.92471917864,6857995.437076444],[356528.00000007777,6857995.901683183],[356537.48707872967,6857999.999997795],[356541.6612360325,6858001.803368585],[356544.0000000774,6858002.813480944],[356560.0000000774,6858009.724716898],[356566.7404495154,6858012.636514648],[356583.52415738045,6858019.887076451],[356592.00000007707,6858023.548312412],[356593.02247198706,6858023.989885441],[356594.53932592017,6858024.644941619],[356605.84044951515,6858029.526964093],[356590.7780899651,6858025.89606522],[356589.9595506394,6858025.75786297],[356589.12921356026,6858025.73370566],[356573.5612360325,6858026.3640427375],[356572.7634832235,6858026.449997798],[356544.5179776056,6858031.423031504],[356543.6174158075,6858031.655053975],[356497.518539404,6858047.421907897],[356469.2033708651,6858054.266851714],[356468.9207865951,6858054.265728124],[356455.30449446046,6858054.124155084],[356449.2640450226,6858054.189323621],[356428.4870787306,6858052.95505396],[356418.1432585056,6858048.73145845],[356429.59213491064,6858038.674155079],[356440.83707873046,6858034.043818002],[356458.0348315392,6858026.106739354],[356475.8943821012,6858012.877525875],[356489.1235955842,6858004.278087677],[356504.33707873,6857997.002244979],[356512.77977535874,6857989.32696408]]]},"properties":{"id":912,"standid":34478873,"parcelid":null,"realestate":null,"standnumbe":29,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":10,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"T1","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":0.5,"areadecrea":0,"creationti":"2021/04/13 21:06:27.000","updatetime":"2021/04/13 21:06:27.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
6
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356557.76853940345,6858155.699435997],[356547.85842704354,6858163.882020265],[356540.89662929164,6858166.743256224],[356532.1758427746,6858164.843256222],[356528.42977535876,6858158.348312402],[356515.9331461451,6858159.53595285],[356502.910674235,6858169.598874188],[356489.07584277506,6858175.321907897],[356474.4561798532,6858187.105053963],[356456.89157311234,6858191.928649472],[356454.7898877184,6858195.511795532],[356456.11123603326,6858202.472469692],[356439.24157311255,6858219.688761819],[356424.0011236747,6858240.643817997],[356417.01629221375,6858244.665728118],[356410.0314607529,6858241.914042717],[356408.76123603387,6858234.928649466],[356417.0162922137,6858220.324155076],[356414.2646068208,6858213.973593285],[356414.47640457284,6858203.602244967],[356416.9235955847,6858197.137076428],[356420.9382023257,6858193.313480928],[356427.1876405276,6858174.161233738],[356436.60000007856,6858157.242694411],[356441.8050562585,6858135.6207843],[356440.2505618766,6858124.4511213815],[356429.8617978316,6858114.44269441],[356422.90112367366,6858111.116851709],[356417.41460682056,6858110.574155079],[356397.97977535974,6858122.271346085],[356391.5870787308,6858129.062919123],[356388.5955056971,6858136.004492152],[356383.607865248,6858136.426402273],[356378.051685472,6858139.865728111],[356368.7910113152,6858139.865728111],[356362.1162922142,6858135.084829229],[356371.51573041617,6858123.776402261],[356374.706179854,6858117.369098892],[356376.50224726996,6858094.801683161],[356373.5084270451,6858090.642132602],[356362.5567416521,6858090.149997772],[356356.90224727034,6858086.484829227],[356352.5910113152,6858077.060671927],[356348.93314614636,6858058.698874178],[356362.189887719,6858056.821907879],[356370.870786596,6858043.43089665],[356387.8022472698,6858056.906739342],[356401.0522472698,6858063.962919124],[356408.2820225507,6858064.147750585],[356415.2691012027,6858060.648312387],[356424.9325843486,6858064.452244969],[356425.7882023256,6858064.7168517085],[356426.6735955847,6858064.85168317],[356444.57022479735,6858066.217413511],[356445.05955064064,6858066.234829241],[356455.3061798533,6858066.124155083],[356465.16853940435,6858066.226964073],[356468.4393259213,6858074.671346105],[356468.5898877182,6858075.026964074],[356476.57303378615,6858092.253930366],[356477.0938203031,6858093.160671945],[356477.7640450224,6858093.963480937],[356478.5640450222,6858094.637638236],[356479.4685394041,6858095.162919136],[356480.4500000782,6858095.523031496],[356481.4797753593,6858095.706739356],[356482.52584277536,6858095.709548345],[356483.55617985304,6858095.530334868],[356484.5398877179,6858095.174716884],[356485.4466292912,6858094.653930367],[356486.2494382801,6858093.983705656],[356486.9235955841,6858093.184267447],[356487.44887648313,6858092.279773067],[356487.808988842,6858091.297750596],[356487.992696707,6858090.267975316],[356487.99550569616,6858089.222469696],[356487.81629221304,6858088.192132617],[356487.460674235,6858087.208424756],[356482.84831468534,6858077.254492166],[356477.41741580825,6858064.6269640755],[356500.607865247,6858059.020784309],[356501.139887718,6858058.866289929],[356547.0589888415,6858043.160110155],[356574.44831468444,6858038.337638249],[356588.77921356016,6858037.75786297],[356613.780898953,6858045.106177586],[356611.90168547,6858057.543818034],[356598.7247191781,6858077.788761851],[356557.61179783056,6858097.514042746],[356553.72359558346,6858104.7578629665],[356549.9134832236,6858120.6331438655],[356551.6674158076,6858137.393256225],[356557.76853940345,6858155.699435997]]]},"properties":{"id":913,"standid":34478874,"parcelid":null,"realestate":null,"standnumbe":14,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":10,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"03","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":2.226,"areadecrea":0,"creationti":"2020/10/01 21:22:18.000","updatetime":"2020/10/01 21:22:18.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
7
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356335.0831461464,6858133.939323606],[356324.87022479845,6858143.834829226],[356315.0808989556,6858159.974155064],[356306.87865176465,6858167.117975291],[356292.32640457386,6858190.6657281],[356280.94943828194,6858200.191008999],[356274.8842697429,6858213.534267417],[356273.6191012041,6858213.129211238],[356241.52696637216,6858202.8522449415],[356232.5994382824,6858199.99381798],[356229.25842704636,6858186.202244941],[356229.77865176526,6858179.447750561],[356251.21011244005,6858133.145503373],[356258.1123596311,6858130.260671916],[356270.62528097886,6858130.362357308],[356281.19269670884,6858125.418537089],[356289.64382030466,6858119.329211239],[356296.9657304167,6858120.995503381],[356307.2831461467,6858119.02190787],[356328.53426974267,6858105.215166304],[356334.66516861843,6858102.979211247],[356339.14325850626,6858105.498874176],[356337.7292135623,6858114.624716867],[356333.76011243934,6858125.207862936],[356333.2308989554,6858130.499435965],[356335.0831461464,6858133.939323606]]]},"properties":{"id":915,"standid":34478876,"parcelid":null,"realestate":null,"standnumbe":11,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"02","standquali":0,"maintreesp":2,"accessibil":4,"standinfo":"","datasource":11,"growthplac":101,"area":0.62,"areadecrea":0,"creationti":"2020/10/01 21:22:19.000","updatetime":"2020/10/01 21:22:19.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
8
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356416.9235955847,6858197.137076428],[356392.00000007893,6858214.999997772],[356384.07303378714,6858228.889885411],[356380.7702247981,6858238.467975302],[356383.21348322503,6858248.224155072],[356363.07359558524,6858241.774716868],[356361.9117978323,6858229.03033485],[356345.8061798542,6858213.024716866],[356353.02752816933,6858199.993256199],[356367.5528090681,6858187.752806761],[356369.2831461462,6858170.643817989],[356370.1747191801,6858162.06235732],[356379.1595506409,6858157.857301141],[356384.95730345,6858150.778087664],[356388.5955056971,6858136.004492152],[356391.5870787308,6858129.062919123],[356397.97977535974,6858122.271346085],[356417.41460682056,6858110.574155079],[356422.90112367366,6858111.116851709],[356429.8617978316,6858114.44269441],[356440.2505618766,6858124.4511213815],[356441.8050562585,6858135.6207843],[356436.60000007856,6858157.242694411],[356427.1876405276,6858174.161233738],[356420.9382023257,6858193.313480928],[356416.9235955847,6858197.137076428]]]},"properties":{"id":916,"standid":34478877,"parcelid":null,"realestate":null,"standnumbe":13,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"T2","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":0.618,"areadecrea":0,"creationti":"2020/10/01 21:22:19.000","updatetime":"2020/10/01 21:22:19.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
9
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356388.5955056971,6858136.004492152],[356384.95730345,6858150.778087664],[356379.1595506409,6858157.857301141],[356370.1747191801,6858162.06235732],[356369.2831461462,6858170.643817989],[356367.5528090681,6858187.752806761],[356353.02752816933,6858199.993256199],[356345.8061798542,6858213.024716866],[356361.9117978323,6858229.03033485],[356363.07359558524,6858241.774716868],[356328.86404502345,6858230.820222484],[356303.7702247987,6858222.78426742],[356274.8842697429,6858213.534267417],[356280.94943828194,6858200.191008999],[356292.32640457386,6858190.6657281],[356306.87865176465,6858167.117975291],[356315.0808989556,6858159.974155064],[356324.87022479845,6858143.834829226],[356335.0831461464,6858133.939323606],[356345.34044951724,6858135.103930357],[356355.6488764844,6858139.99437979],[356362.1162922142,6858135.084829229],[356368.7910113152,6858139.865728111],[356378.051685472,6858139.865728111],[356383.607865248,6858136.426402273],[356388.5955056971,6858136.004492152]]]},"properties":{"id":918,"standid":34478879,"parcelid":null,"realestate":null,"standnumbe":12,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":10,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"02","standquali":0,"maintreesp":2,"accessibil":3,"standinfo":"","datasource":11,"growthplac":101,"area":0.619,"areadecrea":0,"creationti":"2020/10/01 21:22:19.000","updatetime":"2020/10/01 21:22:19.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
10
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356546.1365169317,6858239.357862965],[356541.6179776058,6858248.783143862],[356533.40337086486,6858255.041570822],[356511.1786517631,6858264.778087679],[356501.90000007825,6858264.641009029],[356476.3494382802,6858247.210110146],[356464.29943828046,6858251.526964073],[356459.32022479747,6858259.486514633],[356455.42078659544,6858271.3466269905],[356443.26348322455,6858267.453930361],[356426.3713483937,6858262.044379796],[356400.73089895496,6858253.833705644],[356383.21348322503,6858248.224155072],[356380.7702247981,6858238.467975302],[356384.07303378714,6858228.889885411],[356392.00000007893,6858214.999997772],[356416.9235955847,6858197.137076428],[356414.47640457284,6858203.602244967],[356414.2646068208,6858213.973593285],[356417.0162922137,6858220.324155076],[356408.76123603387,6858234.928649466],[356410.0314607529,6858241.914042717],[356417.01629221375,6858244.665728118],[356424.0011236747,6858240.643817997],[356439.24157311255,6858219.688761819],[356456.11123603326,6858202.472469692],[356454.7898877184,6858195.511795532],[356456.89157311234,6858191.928649472],[356474.4561798532,6858187.105053963],[356489.07584277506,6858175.321907897],[356502.910674235,6858169.598874188],[356515.9331461451,6858159.53595285],[356528.42977535876,6858158.348312402],[356532.1758427746,6858164.843256222],[356540.89662929164,6858166.743256224],[356547.85842704354,6858163.882020265],[356557.76853940345,6858155.699435997],[356567.6983146845,6858151.803930377],[356573.1775281674,6858152.946627008],[356575.18483153824,6858155.535391058],[356574.52303378534,6858160.088761849],[356565.0713483925,6858180.775278696],[356568.48483153846,6858212.506739366],[356562.76573041454,6858225.930334876],[356560.76797760546,6858235.321346108],[356552.18370794266,6858235.338761846],[356546.1365169317,6858239.357862965]]]},"properties":{"id":920,"standid":34478881,"parcelid":null,"realestate":null,"standnumbe":15,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":10,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"T2","standquali":0,"maintreesp":2,"accessibil":4,"standinfo":"","datasource":11,"growthplac":101,"area":1.211,"areadecrea":0,"creationti":"2020/10/01 21:22:19.000","updatetime":"2020/10/01 21:22:19.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
11
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356546.1365169317,6858239.357862965],[356551.5275281676,6858256.205615775],[356547.29438209976,6858276.948874195],[356536.5112360328,6858297.314042733],[356455.42078659544,6858271.3466269905],[356459.32022479747,6858259.486514633],[356464.29943828046,6858251.526964073],[356476.3494382802,6858247.210110146],[356501.90000007825,6858264.641009029],[356511.1786517631,6858264.778087679],[356533.40337086486,6858255.041570822],[356541.6179776058,6858248.783143862],[356546.1365169317,6858239.357862965]]]},"properties":{"id":923,"standid":34478884,"parcelid":null,"realestate":null,"standnumbe":16,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"02","standquali":0,"maintreesp":2,"accessibil":1,"standinfo":"","datasource":11,"growthplac":101,"area":0.269,"areadecrea":0,"creationti":"2020/10/01 21:22:19.000","updatetime":"2020/10/01 21:22:19.000","layer":"x4tmp1","path":"C:\\temp\\HYDE\\export\\x4tmp1.shp|layername=x4tmp1"}},
12
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356184.2617978336,6857929.3269640375],[356186.1668540137,6857935.0410089865],[356185.8713483955,6857937.404492126],[356185.21460682247,6857942.660110106],[356181.40449446253,6857953.136514596],[356175.69044951885,6857957.898874156],[356166.4544944628,6857969.442694373],[356154.5859551369,6857975.191570771],[356145.53314614785,6857978.017413471],[356140.410674238,6857976.689323579],[356139.5129214289,6857976.456177518],[356139.910674238,6857975.978649429],[356140.83820232796,6857974.969098861],[356142.2511236769,6857973.55393032],[356142.8280899689,6857973.006739311],[356144.2752809798,6857971.629211219],[356145.638764126,6857970.1668516705],[356146.46179783385,6857969.035952802],[356147.2280899688,6857967.19437976],[356147.4921349118,6857964.974716841],[356147.13426974387,6857963.015166281],[356146.3140450248,6857961.194941561],[356145.26797760883,6857959.493256172],[356144.83089895686,6857958.86516628],[356143.62303378887,6857957.270784262],[356142.32977536187,6857955.747188751],[356140.9432585079,6857954.308986499],[356139.45000008086,6857952.97921122],[356138.33876412583,6857952.11685167],[356136.676966373,6857951.005053919],[356134.929775362,6857950.034829198],[356133.10786525,6857949.212919088],[356131.382022553,6857948.599997738],[356129.45112367696,6857948.087076389],[356129.167415811,6857948.029211219],[356129.07921356393,6857948.011233699],[356128.0000000809,6857947.791008978],[356123.57528098003,6857946.888761788],[356122.28707873315,6857946.580896617],[356120.371910193,6857946.008986498],[356118.49606749706,6857945.320222458],[356114.8000000813,6857943.793817967],[356114.1494382831,6857943.517975266],[356112.31910120504,6857942.714042675],[356112.0000000811,6857942.557862905],[356110.5230337894,6857941.835952795],[356108.8511236771,6857940.747188746],[356107.46404502506,6857939.406177516],[356106.4730337892,6857938.266851667],[356104.86011244124,6857936.889323576],[356102.90000008134,6857936.606177514],[356100.91292142926,6857936.815166274],[356099.26516862033,6857937.129211215],[356097.2971910923,6857937.485952794],[356095.8162922163,6857937.684267394],[356095.3157304182,6857937.751121333],[356093.3252809803,6857937.932020205],[356092.51966300234,6857937.974155032],[356087.2988764864,6857938.246065152],[356085.30617985653,6857938.3977505425],[356083.32078659843,6857938.628087622],[356081.3488764864,6857938.955615712],[356082.3550562614,6857932.183143802],[356084.2601124414,6857928.373593242],[356089.97471918224,6857922.659548292],[356102.0443821032,6857913.437076386],[356105.40337086824,6857906.299435934],[356109.1314607553,6857901.221346046],[356116.7061798563,6857891.863480887],[356121.183707946,6857890.518537067],[356125.770786598,6857890.1910089785],[356133.4573034521,6857889.642132571],[356138.7174158108,6857894.025840439],[356140.4707865978,6857907.17640224],[356152.74438210274,6857922.95673931],[356160.31573041773,6857925.882020211],[356168.2140450246,6857923.515166285],[356173.88539333886,6857922.618537075],[356182.3573034516,6857926.469660666],[356184.2617978336,6857929.3269640375]]]},"properties":{"id":856,"standid":34478867,"parcelid":null,"realestate":null,"standnumbe":25,"standnum_1":"","maingroup":3,"subgroup":4,"fertilityc":5,"soiltype":60,"drainagest":6,"ditchingye":null,"thinningye":null,"developmen":"","standquali":0,"maintreesp":1,"accessibil":4,"standinfo":"","datasource":31,"growthplac":101,"area":0.421,"areadecrea":0,"creationti":"2021/04/13 21:06:27.000","updatetime":"2021/04/13 21:06:27.000","layer":"x4tmp2","path":"C:\\temp\\HYDE\\export\\x4tmp2.shp|layername=x4tmp2"}},
13
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356133.4573034521,6857889.642132571],[356131.19943828287,6857889.803368528],[356125.770786598,6857890.1910089785],[356121.183707946,6857890.518537067],[356116.7061798563,6857891.863480887],[356109.1314607553,6857901.221346046],[356107.4438203062,6857903.520222455],[356115.36123603606,6857881.837638186],[356116.1550562611,6857871.915728076],[356118.678089969,6857863.473031446],[356125.32752817095,6857865.438761779],[356129.7179776089,6857866.73707639],[356130.37696637283,6857866.891570769],[356130.9713483959,6857866.966289869],[356134.623033789,6857867.239323581],[356139.61910120485,6857867.60730111],[356142.3848315418,6857867.8106719],[356140.65842704684,6857878.00224493],[356136.84831468796,6857885.833705611],[356134.067977609,6857890.151121342],[356133.4573034521,6857889.642132571]]]},"properties":{"id":858,"standid":34478869,"parcelid":null,"realestate":null,"standnumbe":42,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":10,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"03","standquali":0,"maintreesp":1,"accessibil":4,"standinfo":"","datasource":11,"growthplac":101,"area":0.062,"areadecrea":0,"creationti":"2020/10/01 21:22:18.000","updatetime":"2020/10/01 21:22:18.000","layer":"x4tmp2","path":"C:\\temp\\HYDE\\export\\x4tmp2.shp|layername=x4tmp2"}},
14
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356142.3848315418,6857867.8106719],[356153.8516854737,6857868.653930332],[356154.6247191819,6857868.660671902],[356155.39213491173,6857868.568537073],[356156.1410113169,6857868.3780876305],[356167.17078659753,6857864.805053922],[356167.85224727186,6857864.537638194],[356168.4955056986,6857864.188761795],[356176.03707873257,6857859.488761795],[356181.2516854735,6857897.751683136],[356184.5960674966,6857903.798312356],[356189.4561798555,6857906.4522449365],[356194.2320225525,6857918.021346059],[356184.2617978336,6857929.3269640375],[356182.3573034516,6857926.469660666],[356173.88539333886,6857922.618537075],[356168.2140450246,6857923.515166285],[356160.31573041773,6857925.882020211],[356152.74438210274,6857922.95673931],[356140.4707865978,6857907.17640224],[356138.7174158108,6857894.025840439],[356134.067977609,6857890.151121342],[356136.84831468796,6857885.833705611],[356140.65842704684,6857878.00224493],[356142.3848315418,6857867.8106719]]]},"properties":{"id":859,"standid":34478870,"parcelid":null,"realestate":null,"standnumbe":44,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"A0","standquali":0,"maintreesp":null,"accessibil":4,"standinfo":"","datasource":11,"growthplac":101,"area":0.247,"areadecrea":0,"creationti":"2020/10/01 21:22:18.000","updatetime":"2020/10/01 21:22:18.000","layer":"x4tmp2","path":"C:\\temp\\HYDE\\export\\x4tmp2.shp|layername=x4tmp2"}}
15
+ ]}
@@ -0,0 +1,13 @@
1
+ {"type":"FeatureCollection", "features": [
2
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356824.8915731093,6858184.908424802],[356816.7758427723,6858192.403368621],[356803.5219101875,6858199.898874231],[356795.13988771563,6858203.169660748],[356785.45842704177,6858203.112357375],[356774.443258503,6858172.933705697],[356774.0129214237,6858171.711795575],[356773.84044951375,6858171.282582096],[356766.6882023227,6858155.306177593],[356766.5977528848,6858155.112919173],[356761.2865169299,6858144.299997822],[356761.09719108674,6858143.944941642],[356760.64775288483,6858143.275278725],[356760.2955056939,6858142.819098944],[356734.67808996397,6858106.85280681],[356734.4668540092,6858106.53707647],[356734.11235962703,6858106.058424789],[356720.5589888401,6858089.5803349],[356710.3410113123,6858077.3556157965],[356710.2657304132,6858077.267975348],[356706.7011236723,6858073.174155116],[356713.1893259192,6858075.983705687],[356716.32303378405,6858077.340447257],[356721.22752816614,6858079.464042759],[356722.46404502005,6858079.99999782],[356722.67921355914,6858080.09325625],[356730.93820232333,6858083.6696607405],[356731.00000007614,6858083.6960652415],[356736.00000007596,6858085.861233782],[356743.8634832219,6858089.266851751],[356744.2786517609,6858089.4460652415],[356746.7314607501,6858090.508424791],[356749.851123672,6858091.8595483815],[356751.037078728,6858092.373031532],[356752.000000076,6858093.579773103],[356753.93202254805,6858095.999997822],[356754.6617978288,6858096.914604563],[356757.3955056939,6858100.339323663],[356766.7016854688,6858111.9999978235],[356768.0000000758,6858113.626402314],[356779.4719101877,6858127.999997825],[356784.0000000759,6858133.673593339],[356784.01966299664,6858133.698312437],[356824.8915731093,6858184.908424802]]]},"properties":{"id":904,"standid":34478858,"parcelid":null,"realestate":null,"standnumbe":21,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":10,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"03","standquali":0,"maintreesp":29,"accessibil":4,"standinfo":"","datasource":11,"growthplac":101,"area":0.388,"areadecrea":0,"creationti":"2020/10/01 21:22:17.000","updatetime":"2020/10/01 21:22:17.000"}},
3
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356824.8915731093,6858184.908424802],[356832.5011236713,6858194.442132664],[356836.5589888393,6858199.526964124],[356875.7780899629,6858248.665728177],[356939.22921355744,6858328.165166386],[356959.0331461414,6858352.97864954],[356967.7651686133,6858363.91909897],[356934.70674164756,6858394.002806835],[356928.1168540077,6858399.999997845],[356928.0000000746,6858400.106177624],[356912.00000007486,6858414.666851773],[356910.53483153577,6858415.999997842],[356908.82022479386,6858417.560110203],[356899.5033708608,6858426.03876188],[356896.00000007486,6858429.226964127],[356892.95224726596,6858431.99999784],[356880.000000075,6858443.787076487],[356876.05168546806,6858447.380334917],[356875.370224794,6858447.999997838],[356868.6926967041,6858454.076964127],[356867.126966367,6858450.981458505],[356866.02022479416,6858447.999997837],[356864.72415737814,6858444.508424805],[356864.0000000751,6858442.5578630045],[356861.3207865924,6858435.340447275],[356861.15617985034,6858434.897188848],[356861.00617985043,6858434.292694465],[356860.43764052424,6858431.999997835],[356856.4679776032,6858415.999997833],[356854.47865176026,6858407.981458506],[356852.3314607492,6858399.999997834],[356851.55000007525,6858397.094941654],[356848.01067423227,6858383.999997835],[356848.0000000753,6858383.961233793],[356844.0820225473,6858369.465166374],[356843.65617985034,6858367.999997834],[356840.93932591856,6858358.653930413],[356826.2382023224,6858305.616851762],[356826.10224726645,6858305.175840531],[356816.38483153656,6858277.459548392],[356816.34606749145,6858277.352806819],[356806.0308989516,6858250.118537158],[356805.92921355856,6858249.867413559],[356793.6584270417,6858221.420784347],[356785.45842704177,6858203.112357375],[356795.13988771563,6858203.169660748],[356803.5219101875,6858199.898874231],[356816.7758427723,6858192.403368621],[356824.8915731093,6858184.908424802]]]},"properties":{"id":905,"standid":34478859,"parcelid":null,"realestate":null,"standnumbe":10,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":10,"drainagest":3,"ditchingye":null,"thinningye":null,"developmen":"02","standquali":0,"maintreesp":2,"accessibil":4,"standinfo":"","datasource":11,"growthplac":101,"area":2.002,"areadecrea":0,"creationti":"2021/04/13 21:06:27.000","updatetime":"2021/04/13 21:06:27.000"}},
4
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356832.26179782837,6858371.791009072],[356824.17528097436,6858370.715166369],[356817.75112367154,6858367.739323668],[356810.9000000757,6858368.499997829],[356803.20280906477,6858377.76741356],[356775.79887647985,6858394.651121422],[356779.3662922108,6858402.982582093],[356777.8842697389,6858409.967975356],[356779.15449445776,6858419.280896703],[356786.77415737876,6858424.784267485],[356785.92752816586,6858434.732582096],[356782.117977604,6858436.214604564],[356771.746067492,6858445.104492202],[356764.3376405259,6858456.111233782],[356758.622471986,6858456.111233781],[356750.9505618741,6858453.569098941],[356754.7264045701,6858448.419660741],[356756.2224719862,6858441.867413551],[356752.0904495141,6858432.09606524],[356749.73988771613,6858419.85954838],[356752.8404495141,6858399.9898854615],[356748.65955063805,6858389.296627029],[356748.89157311,6858372.043256252],[356747.202247267,6858362.154492199],[356740.6073034471,6858356.257301191],[356726.55112367123,6858353.812357367],[356715.13202254823,6858365.991570847],[356702.6494382784,6858360.287076464],[356699.75449445867,6858356.3893236555],[356684.4353933345,6858326.893818043],[356680.5207865936,6858322.542132641],[356678.79550569464,6858316.078087703],[356699.8005618744,6858305.4185371455],[356702.34044951445,6858298.115728155],[356698.2129214246,6858289.860671974],[356688.05280906556,6858286.685952874],[356685.6707865937,6858283.350559611],[356698.83089895244,6858279.318537143],[356703.47584277345,6858269.952806806],[356714.93426973926,6858256.777525907],[356721.4702247952,6858244.555615796],[356728.1376405251,6858241.900559618],[356739.457865245,6858240.419098941],[356751.69269670494,6858234.105615801],[356753.3904495139,6858231.786514671],[356752.89606749197,6858228.333143892],[356762.2825843458,6858217.212919172],[356767.76966299675,6858214.147188836],[356776.50617985066,6858212.480896707],[356794.85674164863,6858254.496065249],[356814.70168546855,6858308.928087719],[356822.4640450195,6858338.079773111],[356822.50056187354,6858338.21067199],[356832.26179782837,6858371.791009072]]]},"properties":{"id":906,"standid":34478860,"parcelid":null,"realestate":null,"standnumbe":8,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":4,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"02","standquali":0,"maintreesp":1,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":1.762,"areadecrea":0,"creationti":"2021/04/13 21:06:27.000","updatetime":"2021/04/13 21:06:27.000"}},
5
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356832.26179782837,6858371.791009072],[356832.27134839044,6858371.825278732],[356832.5275281654,6858372.705054012],[356835.58033715433,6858383.999997833],[356839.9050562554,6858399.999997832],[356839.9651686144,6858400.219098953],[356840.86235962657,6858403.557863003],[356841.6679776033,6858406.552806824],[356842.8606742324,6858410.984829294],[356843.5865169294,6858413.911233783],[356844.10505625524,6858415.999997833],[356846.90224726626,6858427.2764023235],[356848.0000000753,6858431.702245025],[356848.0741573784,6858431.999997834],[356849.5904495134,6858438.113480982],[356849.7825843454,6858438.739323673],[356853.22022479423,6858447.999997833],[356854.4286517602,6858451.255054015],[356855.9949438954,6858455.475278734],[356856.2657304122,6858456.094941655],[356859.48370794044,6858462.457301205],[356857.78820232226,6858463.999997835],[356856.0808989513,6858465.553930416],[356849.7134832213,6858471.348312444],[356849.1382023223,6858471.871907943],[356848.23595513136,6858472.693256263],[356848.00000007544,6858472.907863003],[356840.2061798505,6858479.999997833],[356832.0000000755,6858487.46853716],[356826.14438209846,6858492.79718884],[356823.9730337835,6858494.77303154],[356823.7831461425,6858495.1584248],[356823.36853940156,6858495.999997829],[356819.77359558165,6858503.2932562595],[356816.1303371547,6858510.683705698],[356816.00000007567,6858510.948874229],[356815.48202254786,6858511.999997829],[356807.5949438958,6858527.999997826],[356800.0000000758,6858543.4084247975],[356799.70842704177,6858543.999997826],[356791.82191018795,6858559.999997824],[356784.0000000759,6858575.8690989455],[356783.9353933339,6858575.999997824],[356780.217415806,6858583.542694453],[356776.56685400923,6858590.948874223],[356770.1623596271,6858584.237638273],[356768.000000076,6858581.971907933],[356762.301123672,6858575.9999978235],[356752.0000000761,6858565.2061776],[356749.8949438961,6858562.99999782],[356747.03202254826,6858559.999997819],[356736.0000000762,6858548.439885458],[356731.7629214243,6858543.999997817],[356731.69887648046,6858543.933143888],[356731.63876412157,6858543.999997817],[356726.0859551323,6858550.167413546],[356725.43033715547,6858550.895503434],[356724.64606749243,6858551.766851748],[356711.46292142454,6858537.097750625],[356710.6393259195,6858525.191570845],[356713.1668540096,6858517.853930405],[356720.4842697393,6858505.716289957],[356720.00000007637,6858471.999997817],[356728.40224726725,6858468.323593328],[356750.9505618741,6858453.569098941],[356758.622471986,6858456.111233781],[356764.3376405259,6858456.111233782],[356771.746067492,6858445.104492202],[356782.117977604,6858436.214604564],[356785.92752816586,6858434.732582096],[356786.77415737876,6858424.784267485],[356779.15449445776,6858419.280896703],[356777.8842697389,6858409.967975356],[356779.3662922108,6858402.982582093],[356775.79887647985,6858394.651121422],[356803.20280906477,6858377.76741356],[356810.9000000757,6858368.499997829],[356817.75112367154,6858367.739323668],[356824.17528097436,6858370.715166369],[356832.26179782837,6858371.791009072]]]},"properties":{"id":907,"standid":34478861,"parcelid":null,"realestate":null,"standnumbe":9,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"T1","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":1.621,"areadecrea":0,"creationti":"2020/10/01 21:22:17.000","updatetime":"2020/10/01 21:22:17.000"}},
6
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356621.7359551332,6858229.254492186],[356609.41853940306,6858236.118537131],[356599.5758427742,6858245.3258405],[356592.5910113134,6858259.613480949],[356591.53370794235,6858291.4752787],[356585.4106742344,6858294.527525891],[356581.47303378547,6858304.474155098],[356577.16292142554,6858310.33202027],[356576.82191018964,6858310.222469708],[356576.00000007736,6858309.959548359],[356567.7707865945,6858307.324155097],[356536.5112360328,6858297.314042733],[356547.29438209976,6858276.948874195],[356551.5275281676,6858256.205615775],[356546.1365169317,6858239.357862965],[356552.18370794266,6858235.338761846],[356560.76797760546,6858235.321346108],[356562.76573041454,6858225.930334876],[356568.48483153846,6858212.506739366],[356565.0713483925,6858180.775278696],[356574.52303378534,6858160.088761849],[356575.18483153824,6858155.535391058],[356573.1775281674,6858152.946627008],[356567.6983146845,6858151.803930377],[356557.76853940345,6858155.699435997],[356551.6674158076,6858137.393256225],[356549.9134832236,6858120.6331438655],[356553.72359558346,6858104.7578629665],[356557.61179783056,6858097.514042746],[356598.7247191781,6858077.788761851],[356611.90168547,6858057.543818034],[356613.780898953,6858045.106177586],[356632.56179782975,6858052.869098925],[356655.23539333465,6858062.07359332],[356655.43988771667,6858062.152244999],[356655.5803371556,6858062.201121409],[356682.08314614336,6858071.108986572],[356695.07696636836,6858078.097750626],[356726.89775288507,6858116.80898658],[356708.14213490736,6858127.185952877],[356699.8522472674,6858139.270222535],[356690.99550569436,6858146.385391075],[356667.3280899646,6858162.87190792],[356662.73876412166,6858173.085391071],[356660.79382030165,6858183.98763826],[356653.7224719869,6858184.51291916],[356644.1449438969,6858188.011233767],[356641.7567416498,6858183.172469717],[356638.05617985176,6858188.892694438],[356625.187640526,6858200.643256234],[356619.15505625703,6858217.788200054],[356621.7359551332,6858229.254492186]]]},"properties":{"id":914,"standid":34478875,"parcelid":null,"realestate":null,"standnumbe":17,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"02","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":2.198,"areadecrea":0,"creationti":"2020/10/01 21:22:18.000","updatetime":"2020/10/01 21:22:18.000"}},
7
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356726.89775288507,6858116.80898658],[356738.7348315369,6858134.526964109],[356738.97696636815,6858134.864042761],[356750.7831461432,6858150.134829283],[356762.78651692986,6858175.960110184],[356772.4134832218,6858203.299436025],[356772.58595513174,6858203.729773105],[356776.50617985066,6858212.480896707],[356767.76966299675,6858214.147188836],[356762.2825843458,6858217.212919172],[356752.89606749197,6858228.333143892],[356753.3904495139,6858231.786514671],[356751.69269670494,6858234.105615801],[356739.457865245,6858240.419098941],[356728.1376405251,6858241.900559618],[356721.4702247952,6858244.555615796],[356719.5466292903,6858230.034829275],[356710.2780899643,6858220.010671978],[356708.97471917723,6858216.697188826],[356709.4101124364,6858215.285952876],[356705.72415737936,6858202.683143887],[356702.8707865934,6858195.906177595],[356697.4011236714,6858191.269098933],[356694.6668540094,6858184.967413544],[356693.94213490735,6858184.939885453],[356691.5455056944,6858175.243256244],[356690.99550569436,6858146.385391075],[356699.8522472674,6858139.270222535],[356708.14213490736,6858127.185952877],[356726.89775288507,6858116.80898658]]]},"properties":{"id":917,"standid":34478878,"parcelid":null,"realestate":null,"standnumbe":20,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":4,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"03","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":0.648,"areadecrea":0,"creationti":"2021/03/09 14:19:23.000","updatetime":"2021/03/09 14:19:23.000"}},
8
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356721.4702247952,6858244.555615796],[356714.93426973926,6858256.777525907],[356703.47584277345,6858269.952806806],[356698.83089895244,6858279.318537143],[356685.6707865937,6858283.350559611],[356688.05280906556,6858286.685952874],[356698.2129214246,6858289.860671974],[356702.34044951445,6858298.115728155],[356699.8005618744,6858305.4185371455],[356678.79550569464,6858316.078087703],[356677.3359551326,6858313.169660732],[356668.52247198677,6858306.4769641],[356668.99550569477,6858302.30449219],[356673.7365169306,6858295.330334891],[356667.0758427737,6858281.117975339],[356664.9915731107,6858270.610110169],[356661.4134832227,6858269.069660729],[356652.4511236729,6858272.952244998],[356645.43595513294,6858267.638200056],[356638.21853940294,6858264.805053985],[356644.073033785,6858256.970222527],[356641.40617985185,6858249.534267466],[356641.47752816696,6858239.946065226],[356632.8786517619,6858231.667413534],[356621.7359551332,6858229.254492186],[356619.15505625703,6858217.788200054],[356625.187640526,6858200.643256234],[356638.05617985176,6858188.892694438],[356641.7567416498,6858183.172469717],[356644.1449438969,6858188.011233767],[356653.7224719869,6858184.51291916],[356660.79382030165,6858183.98763826],[356662.73876412166,6858173.085391071],[356667.3280899646,6858162.87190792],[356690.99550569436,6858146.385391075],[356691.5455056944,6858175.243256244],[356693.94213490735,6858184.939885453],[356688.3651686155,6858184.729773095],[356683.1337079416,6858184.729773093],[356677.7606742336,6858187.276964103],[356677.7359551325,6858187.262919164],[356676.74213490763,6858187.7601101715],[356668.2117978299,6858192.025278711],[356661.54494389694,6858195.834829272],[356657.81685400964,6858206.190447249],[356657.8691012007,6858206.519660729],[356658.42078659375,6858210.01067197],[356658.5039326608,6858219.075840509],[356664.4016854698,6858235.835391071],[356667.2589888406,6858239.644941631],[356673.92584277363,6858241.54999781],[356676.35786524555,6858241.549997809],[356677.5455056946,6858242.632582083],[356683.74550569453,6858241.549997812],[356684.4022472675,6858241.549997812],[356684.6915731105,6858241.3848292725],[356692.52640457044,6858240.016851743],[356702.1573034474,6858232.645503436],[356706.4376405253,6858224.916851746],[356708.97471917723,6858216.697188826],[356710.2780899643,6858220.010671978],[356719.5466292903,6858230.034829275],[356721.4702247952,6858244.555615796]]]},"properties":{"id":919,"standid":34478880,"parcelid":null,"realestate":null,"standnumbe":18,"standnum_1":"","maingroup":1,"subgroup":3,"fertilityc":3,"soiltype":60,"drainagest":8,"ditchingye":null,"thinningye":null,"developmen":"03","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":0.641,"areadecrea":0,"creationti":"2021/03/09 14:19:23.000","updatetime":"2021/03/09 14:19:23.000"}},
9
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356706.4376405253,6858224.916851746],[356702.1573034474,6858232.645503436],[356692.52640457044,6858240.016851743],[356684.6915731105,6858241.3848292725],[356684.4022472675,6858241.549997812],[356683.74550569453,6858241.549997812],[356677.5455056946,6858242.632582083],[356676.35786524555,6858241.549997809],[356673.92584277363,6858241.54999781],[356667.2589888406,6858239.644941631],[356664.4016854698,6858235.835391071],[356658.5039326608,6858219.075840509],[356658.42078659375,6858210.01067197],[356657.81685400964,6858206.190447249],[356661.54494389694,6858195.834829272],[356668.2117978299,6858192.025278711],[356676.74213490763,6858187.7601101715],[356677.7359551325,6858187.262919164],[356677.7606742336,6858187.276964103],[356683.1337079416,6858184.729773093],[356688.3651686155,6858184.729773095],[356694.6668540094,6858184.967413544],[356697.4011236714,6858191.269098933],[356702.8707865934,6858195.906177595],[356705.72415737936,6858202.683143887],[356709.4101124364,6858215.285952876],[356706.4376405253,6858224.916851746]]]},"properties":{"id":921,"standid":34478882,"parcelid":null,"realestate":null,"standnumbe":19,"standnum_1":"","maingroup":3,"subgroup":4,"fertilityc":6,"soiltype":60,"drainagest":6,"ditchingye":null,"thinningye":null,"developmen":"","standquali":0,"maintreesp":null,"accessibil":4,"standinfo":"","datasource":31,"growthplac":101,"area":0.227,"areadecrea":0,"creationti":"2021/03/09 14:19:23.000","updatetime":"2021/03/09 14:19:23.000"}},
10
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356672.4741573798,6858547.445503429],[356660.091573111,6858576.020222529],[356652.80000007694,6858580.452806797],[356651.57528097625,6858576.070222526],[356651.56067423406,6858576.018537136],[356651.55561805493,6858575.999997807],[356647.08483153814,6858559.999997806],[356642.614045021,6858543.999997805],[356640.00000007707,6858534.643818035],[356639.77808996505,6858533.850559605],[356635.65112367214,6858519.079773084],[356583.85000007745,6858333.691570829],[356580.18426974036,6858320.57134611],[356580.02415738034,6858319.999997798],[356577.3387641225,6858310.388200047],[356577.16292142554,6858310.33202027],[356581.47303378547,6858304.474155098],[356585.4106742344,6858294.527525891],[356591.53370794235,6858291.4752787],[356592.5910113134,6858259.613480949],[356599.5758427742,6858245.3258405],[356609.41853940306,6858236.118537131],[356621.7359551332,6858229.254492186],[356632.8786517619,6858231.667413534],[356641.47752816696,6858239.946065226],[356641.40617985185,6858249.534267466],[356644.073033785,6858256.970222527],[356638.21853940294,6858264.805053985],[356645.43595513294,6858267.638200056],[356652.4511236729,6858272.952244998],[356661.4134832227,6858269.069660729],[356664.9915731107,6858270.610110169],[356667.0758427737,6858281.117975339],[356673.7365169306,6858295.330334891],[356668.99550569477,6858302.30449219],[356668.52247198677,6858306.4769641],[356677.3359551326,6858313.169660732],[356678.79550569464,6858316.078087703],[356680.5207865936,6858322.542132641],[356684.4353933345,6858326.893818043],[356699.75449445867,6858356.3893236555],[356702.6494382784,6858360.287076464],[356715.13202254823,6858365.991570847],[356713.86516861536,6858371.788200066],[356715.1157304134,6858384.891570846],[356712.89943827834,6858401.683705684],[356715.9926967055,6858424.784267476],[356713.2837079416,6858441.8870764645],[356703.9702247955,6858446.797750625],[356660.72359558276,6858453.804492188],[356651.930337156,6858457.799436007],[356648.392696706,6858462.197750616],[356646.67359558295,6858468.191570837],[356650.08426974004,6858494.7483124165],[356641.68146075105,6858518.466851735],[356653.258427043,6858528.262919156],[356659.87303378497,6858529.585952868],[356665.16460681905,6858535.53932365],[356672.4741573798,6858547.445503429]]]},"properties":{"id":922,"standid":34478883,"parcelid":null,"realestate":null,"standnumbe":6,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":3,"soiltype":30,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"T2","standquali":11,"maintreesp":2,"accessibil":4,"standinfo":"","datasource":11,"growthplac":101,"area":2.265,"areadecrea":0,"creationti":"2020/10/01 21:22:19.000","updatetime":"2020/10/01 21:22:19.000"}},
11
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356710.6393259195,6858525.191570845],[356672.4741573798,6858547.445503429],[356665.16460681905,6858535.53932365],[356659.87303378497,6858529.585952868],[356653.258427043,6858528.262919156],[356641.68146075105,6858518.466851735],[356650.08426974004,6858494.7483124165],[356646.67359558295,6858468.191570837],[356648.392696706,6858462.197750616],[356651.930337156,6858457.799436007],[356660.72359558276,6858453.804492188],[356703.9702247955,6858446.797750625],[356713.2837079416,6858441.8870764645],[356715.9926967055,6858424.784267476],[356712.89943827834,6858401.683705684],[356715.1157304134,6858384.891570846],[356713.86516861536,6858371.788200066],[356715.13202254823,6858365.991570847],[356726.55112367123,6858353.812357367],[356740.6073034471,6858356.257301191],[356747.202247267,6858362.154492199],[356748.89157311,6858372.043256252],[356748.65955063805,6858389.296627029],[356752.8404495141,6858399.9898854615],[356749.73988771613,6858419.85954838],[356752.0904495141,6858432.09606524],[356756.2224719862,6858441.867413551],[356754.7264045701,6858448.419660741],[356750.9505618741,6858453.569098941],[356728.40224726725,6858468.323593328],[356720.00000007637,6858471.999997817],[356720.4842697393,6858505.716289957],[356713.1668540096,6858517.853930405],[356710.6393259195,6858525.191570845]]]},"properties":{"id":924,"standid":34478885,"parcelid":null,"realestate":null,"standnumbe":7,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":2,"soiltype":20,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"03","standquali":0,"maintreesp":2,"accessibil":2,"standinfo":"","datasource":11,"growthplac":101,"area":0.973,"areadecrea":0,"creationti":"2020/10/01 21:22:20.000","updatetime":"2020/10/01 21:22:20.000"}},
12
+ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[356724.64606749243,6858551.766851748],[356720.00000007637,6858556.926402316],[356717.23258434644,6858559.999997815],[356709.1803371556,6858568.943256246],[356704.0000000766,6858574.696627023],[356702.8264045706,6858575.999997813],[356688.42078659363,6858591.999997811],[356688.0000000769,6858592.467413541],[356674.014606819,6858607.99999781],[356672.3162922119,6858609.88595287],[356672.00000007683,6858610.237638258],[356667.4578652459,6858615.282020279],[356666.4825843469,6858616.365728148],[356663.7477528859,6858619.402806799],[356662.01741580694,6858613.247188818],[356660.92078659416,6858609.3466270175],[356660.54213490896,6858607.999997809],[356659.4106742339,6858603.974155108],[356656.04438209895,6858591.999997808],[356656.00000007695,6858591.842132637],[356653.04606749327,6858581.334267466],[356652.80000007694,6858580.452806797],[356660.091573111,6858576.020222529],[356672.4741573798,6858547.445503429],[356710.6393259195,6858525.191570845],[356711.46292142454,6858537.097750625],[356724.64606749243,6858551.766851748]]]},"properties":{"id":925,"standid":34478886,"parcelid":null,"realestate":null,"standnumbe":5,"standnum_1":"","maingroup":1,"subgroup":1,"fertilityc":2,"soiltype":20,"drainagest":1,"ditchingye":null,"thinningye":null,"developmen":"04","standquali":0,"maintreesp":2,"accessibil":3,"standinfo":"","datasource":11,"growthplac":101,"area":0.297,"areadecrea":0,"creationti":"2020/10/01 21:22:20.000","updatetime":"2020/10/01 21:22:20.000"}}
13
+ ]}