env-able 2.0.1__tar.gz → 2.2.0__tar.gz

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 (67) hide show
  1. {env_able-2.0.1 → env_able-2.2.0}/CHANGELOG.md +71 -0
  2. env_able-2.0.1/README.md → env_able-2.2.0/PKG-INFO +2341 -2165
  3. env_able-2.0.1/PKG-INFO → env_able-2.2.0/README.md +150 -26
  4. {env_able-2.0.1 → env_able-2.2.0}/pyproject.toml +1 -1
  5. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/__init__.py +23 -2
  6. env_able-2.2.0/src/env_able/atlas/calc.py +10 -0
  7. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/client.py +14 -11
  8. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/docs/atlas-guide.md +2290 -2089
  9. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/docs/cartographic-judgment.md +257 -252
  10. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/docs/env-able-library.md +740 -588
  11. env_able-2.2.0/src/env_able/atlas/edits.py +10 -0
  12. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/eirstyle.py +27 -12
  13. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/env_layers.py +85 -103
  14. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/index.html +1444 -67
  15. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/server.py +1112 -309
  16. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/classify.py +36 -2
  17. env_able-2.0.1/src/env_able/atlas/edits.py → env_able-2.2.0/src/env_able/editing.py +1 -1
  18. env_able-2.0.1/src/env_able/atlas/calc.py → env_able-2.2.0/src/env_able/expression.py +308 -211
  19. env_able-2.2.0/src/env_able/features.py +805 -0
  20. env_able-2.2.0/src/env_able/fields.py +403 -0
  21. env_able-2.2.0/src/env_able/housestyle.py +474 -0
  22. env_able-2.2.0/src/env_able/selection.py +356 -0
  23. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/vector.py +301 -0
  24. {env_able-2.0.1 → env_able-2.2.0}/.gitignore +0 -0
  25. {env_able-2.0.1 → env_able-2.2.0}/LICENSE +0 -0
  26. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/_gdal_env.py +0 -0
  27. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/_gdal_utils.py +0 -0
  28. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/_pipeline.py +0 -0
  29. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/_result.py +0 -0
  30. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/aggregate.py +0 -0
  31. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/__init__.py +0 -0
  32. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/aix.py +0 -0
  33. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/brandmark.py +0 -0
  34. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/claude_bridge.py +0 -0
  35. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/compliance.html +0 -0
  36. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/databricks.py +0 -0
  37. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/debug.py +0 -0
  38. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/desktop.py +0 -0
  39. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/docs/atlas-layout-view.md +0 -0
  40. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/landing.html +0 -0
  41. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/naming.py +0 -0
  42. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/palette.py +0 -0
  43. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/project.py +0 -0
  44. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/session.py +0 -0
  45. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/splash.html +0 -0
  46. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/templates/Summary A4 Landscape.pagx +0 -0
  47. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/templates/Summary A4 Portrait.pagx +0 -0
  48. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/templates/Title Bar A4 Landscape.pagx +0 -0
  49. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/templates/Title Bar A4 Portrait.pagx +0 -0
  50. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/HTML-TO-IMAGE-LICENSE.txt +0 -0
  51. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/MAPLIBRE-LICENSE.txt +0 -0
  52. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/PROTOMAPS-LICENSE.txt +0 -0
  53. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/ROBOTO-LICENSE.txt +0 -0
  54. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/html-to-image.js +0 -0
  55. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/maplibre-gl.css +0 -0
  56. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/maplibre-gl.js +0 -0
  57. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/pmtiles.js +0 -0
  58. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/protomaps-basemaps.js +0 -0
  59. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/roboto-latin-400-italic.woff2 +0 -0
  60. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/roboto-latin-400-normal.woff2 +0 -0
  61. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/roboto-latin-500-normal.woff2 +0 -0
  62. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/atlas/vendor/roboto-latin-700-normal.woff2 +0 -0
  63. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/layout.py +0 -0
  64. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/morph.py +0 -0
  65. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/pull.py +0 -0
  66. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/remote.py +0 -0
  67. {env_able-2.0.1 → env_able-2.2.0}/src/env_able/stream.py +0 -0
@@ -1,5 +1,76 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.2.0] - 2026-11-03
4
+ ### Added
5
+ - **Merge** (Tools ▸ Merge, `env.Merge`): stacks the features of two or more layers into one, nothing
6
+ cut. Fields matched by name, mixed geometry kinds refused, another CRS reprojected to the first;
7
+ `add_source` adds Pro's `MERGE_SRC`.
8
+ - **A Tools menu** leads the Geoprocessing group: every tool and Join, alphabetical, with search.
9
+ **Customize** chooses which have a ribbon button, kept in the user's settings; Near, Erase,
10
+ Simplify and Summary Statistics start in the menu only.
11
+
12
+ - **Eleven ArcGIS Pro tools in env-able** (`env_able.features`): Feature To Point, Polygon To Line,
13
+ Feature To Polygon, Points To Line, Multipart To Singlepart, Minimum Bounding Geometry, Calculate
14
+ Geometry Attributes, Copy Features, Project, Generate Near Table, Tabulate Intersection. Measured
15
+ on the ground, never in degrees.
16
+ - **Select Layer By Attribute, Select Layer By Location and Table Select in env-able**
17
+ (`env_able.selection`), with Pro's selection and overlap types. Atlas's Select by Attributes and
18
+ by Location, its layer filters and `atlas_query_layer` now run on them: one query evaluator.
19
+ - **Add, Delete, Alter, Calculate and Join Field in env-able** (`env_able.fields`). Atlas's
20
+ attribute table and Join now run on them; the type rules and the expression language moved to
21
+ `env_able.editing` and `env_able.expression`. A Join no longer names a clashing field `_x`/`_y`.
22
+ - **Nine of them in Atlas's Tools menu**, each with a form built from the tool's own parameter list,
23
+ so a new env-able tool reaches Atlas with no panel code.
24
+ - **A QA/QC tab** beside Map and Layout, with its own ribbon for checks; **PWx** is the first, a
25
+ placeholder for now.
26
+ - **Round-number classes** (`classify.breaks(..., "round")`, *Round numbers* in the pane): natural
27
+ breaks moved to the roundest number within 15%, so 338,037 becomes 300,000.
28
+
29
+ ### Changed
30
+ - **atlas-ml and atlas-mb draw no basemap unless one is asked for** (`--basemap`).
31
+
32
+ ### Fixed
33
+ - **A Union or Intersect of several layers recorded only two of them** as where it came from.
34
+ - **Merge failed on real Enverus data** (`Error adding field 'SubPlay'`): field names are now
35
+ matched ignoring case, as ArcGIS matches them. The field tools and Join follow the same rule.
36
+ - **Measuring used one UTM zone for a whole layer**, so a 10 km distance in Maine read 10,441 m with
37
+ a California feature in the layer. Each feature is measured in its own zone; a projected source
38
+ in its own CRS.
39
+ - **Calculate Field crashed on a whole-number column with a blank**, which included a field Add Field
40
+ had just made; **a small-number column was read as Short** and refused 20000 x 2.
41
+ - **Join with every field unticked joined all of them**; blank keys matched each other; 1 never met 1.0.
42
+ - **Tabulate Intersection reported 200% of a zone** where class features overlapped or a zone came
43
+ in two pieces; **Completely Within** behaved as Within.
44
+ - **Geoprocessing results were not on the undo history**, and a table a tool made never marked the
45
+ project unsaved.
46
+ - **Only a workbook's first worksheet was read**; each sheet is a table now.
47
+ - **The Colour Vision icon drew nothing**: stroke attributes had been spliced into its path.
48
+ - **Polygon To Line took a minute on 2,166 overlapping lease polygons**; 12.5 s now, same output.
49
+ - **A symbology change from the Claude pane drew a wide layer in one colour**: its display copy
50
+ lacked the new field until reload. The field is now fetched, as the Symbology pane already did.
51
+
52
+ ## [2.1.0] - 2026-10-19
53
+ ### Added
54
+ - **Edit Vertices** (Tools ▸ Edit ▸ Vertices): drag a vertex to move it, drag an edge's midpoint to add one, click one and **Delete Vertex** to remove it. Snaps to other features' vertices and lines at full resolution; a move on a 34,000-lateral layer takes 8 ms.
55
+ - **Redo** for every staged edit, in the attribute table and Edit Vertices (Ctrl+Y).
56
+ - **Summary Statistics** (Tools ▸ Summary, `env.SummaryStatistics`): statistics per group as a **table** in the Tables panel, from a layer or a table. Dissolve's statistics plus `MODE`; a text field is offered only what Pro allows.
57
+ - **Duplicate** in the layer menu: a copy of the layer as it is now, in memory, one Undo step.
58
+ - **Layer Properties** (right-click ▸ Properties): the source file, its own coordinate system, extent, vertices and every field with its type and blank count.
59
+ - **Calculate Field**: ArcMap's `[FIELD]`, `iif` (only the side it takes is worked out), `upper`, `lower`, `trim`, suggestions as you type, and **+ New field…** with a type or one read from the result. 34,000 rows in 0.22 s.
60
+
61
+ ### Changed
62
+ - **Clicking a table row selects its feature**; Ctrl adds or removes one, Shift selects a run.
63
+ - **A Catalog click selects a dataset and a double-click adds it.** A single click used to add it.
64
+ - **Edit Vertices' ✕ closes and keeps the edits**; Discard throws them away, after asking.
65
+ - The **Geoprocessing panel's descriptions** are written for somebody who has never used ArcGIS, and the layer menu is in Title Case.
66
+
67
+ ### Fixed
68
+ - **Every table opened empty**: the view read rows the poll never sends. CSV, Excel and Databricks tables now open with their rows.
69
+ - **Claude could not load a CSV with no coordinates** (`'DataFrame' object has no attribute 'crs'`); it is a table now, as with Add Data.
70
+ - **Geoprocessing with nothing loaded showed every tool's settings at once** and ignored the button pressed.
71
+ - **The Morph panel sat under the right pane**, a closed one stayed drawn over it, and a long layer name ran out of the panel.
72
+ - **The table toolbar ran past the panel at 1280 px**, putting Save As and Close out of reach; it wraps now. Also the gap beside the table and three ribbon icons that drew no line.
73
+
3
74
  ## [2.0.1] - 2026-10-15
4
75
  ### Added
5
76
  - **Calculate Field** in the attribute table: ArcGIS Pro's `!FIELD!` syntax, the selected