File size: 4,619 Bytes
d2c79b3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f7e6298c-d886-432a-a1b7-c3fee914c24f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# boilerplate setup\n",
    "import leafmap.maplibregl as leafmap\n",
    "import ibis\n",
    "from ibis import _\n",
    "\n",
    "conn = ibis.duckdb.connect(\"tmp\")\n",
    "ca_parquet = \"https://data.source.coop/cboettig/ca30x30/ca_areas.parquet\"\n",
    "# or use local copy:\n",
    "ca_parquet = \"/home/rstudio/source.coop/cboettig/ca30x30/ca_areas.parquet\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a0cb34b1-8d70-49bf-80c6-244ecc8ddf84",
   "metadata": {},
   "outputs": [],
   "source": [
    "buffer = -0.00003 \n",
    "\n",
    "tbl = (\n",
    "    conn.read_parquet(\"https://data.source.coop/cboettig/ca30x30/ca_areas.parquet\")\n",
    "    .cast({\"SHAPE\": \"geometry\"})\n",
    "    .rename(geom = \"SHAPE\")\n",
    "   # .filter(_.UNIT_NAME == \"Angeles National Forest\")\n",
    "    .filter(_.reGAP < 3) \n",
    ")\n",
    "tbl_2023 = tbl.filter(_.Release_Year == 2023).mutate(geom=_.geom.buffer(buffer))\n",
    "tbl_2024 = tbl.filter(_.Release_Year == 2024)\n",
    "intersects = tbl_2024.anti_join(tbl_2023, _.geom.intersects(tbl_2023.geom))\n",
    "\n",
    "new2024 = intersects.select(\"OBJECTID\").mutate(established = 2024)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "275c171a-f82f-4ee8-991c-1e34eb83a33d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "998c2484ba604297ad438ed5c17dc59d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ca = (conn\n",
    "      .read_parquet(ca_parquet)\n",
    "      .cast({\"SHAPE\": \"geometry\"})\n",
    "      .mutate(area = _.SHAPE.area())\n",
    "      .filter(_.Release_Year == 2024)\n",
    "      .filter(_.reGAP < 3)\n",
    "      .left_join(new2024, \"OBJECTID\")\n",
    "      .mutate(established=_.established.fill_null(2023))\n",
    "      .mutate(geom = _.SHAPE.convert(\"epsg:3310\",\"epsg:4326\"))\n",
    "      .rename(name = \"UNIT_NAME\", access_type = \"ACCESS_TYP\", manager = \"MNG_AGNCY\",\n",
    "              manager_type = \"MNG_AG_LEV\", id = \"OBJECTID\", type = \"TYPE\")\n",
    "      .select(_.established, _.reGAP, _.name, _.access_type, _.manager, _.manager_type,\n",
    "              _.Easement, _.Acres, _.id, _.type, _.geom)\n",
    "     )\n",
    "ca.to_parquet(\"ca2024.parquet\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ebbb2650-4442-4e54-8467-5e681d6fab9e",
   "metadata": {},
   "source": [
    "Using difference (overlap) instead:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6f3df8c1-a603-4dd5-be84-8deaae928d0a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# compute some summary tables:\n",
    "\n",
    "(ca\n",
    " .filter(_.established == 2024)\n",
    " .filter(_.manager_type == manager_type)\n",
    " .group_by(_.manager, _.manager_type)\n",
    " .agg(area = _.Acres.sum())\n",
    " .order_by(_.area.desc())\n",
    " .execute()\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c62854f6-1456-4207-8c69-53af17970102",
   "metadata": {},
   "outputs": [],
   "source": [
    "gdf = ca.filter(_.manager == \"United States National Park Service\", _.established== 2024).execute()\n",
    "established = {'property': 'established',\n",
    "               'type': 'categorical',\n",
    "               'stops': [\n",
    "                   [2023, \"#26542C80\"], \n",
    "                   [2024, \"#F3AB3D80\"]]\n",
    "              }\n",
    "paint = {\"fill-color\": established}\n",
    "\n",
    "m = leafmap.Map(style=\"positron\")\n",
    "m.add_gdf(gdf,layer_type=\"fill\", name = \"CA 30x30\", paint = paint)\n",
    "m.add_layer_control()\n",
    "m"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}