|
| 1 | +from datetime import datetime |
| 2 | + |
| 3 | +import geodatasets |
| 4 | +import geopandas as gpd |
| 5 | +import numpy as np |
| 6 | +import quak |
| 7 | +import sqlglot |
| 8 | +from arro3.core import Array, ChunkedArray, DataType, Table |
| 9 | + |
| 10 | +from lonboard import PolygonLayer, viz |
| 11 | + |
| 12 | +gdf = gpd.read_file(geodatasets.get_path("nybb")) |
| 13 | +layer = PolygonLayer.from_geopandas(gdf) |
| 14 | +self = layer |
| 15 | +self.extensions |
| 16 | + |
| 17 | + |
| 18 | +def quak_fn(self: PolygonLayer) -> quak.Widget: |
| 19 | + table: Table = self.table |
| 20 | + num_rows = table.num_rows |
| 21 | + if num_rows <= np.iinfo(np.uint8).max: |
| 22 | + row_index = Array.from_numpy(np.arange(num_rows, dtype=np.uint8)) |
| 23 | + filter_arr = np.zeros(num_rows, dtype=np.uint8) |
| 24 | + elif num_rows <= np.iinfo(np.uint16).max: |
| 25 | + row_index = Array.from_numpy(np.arange(num_rows, dtype=np.uint16)) |
| 26 | + filter_arr = np.zeros(num_rows, dtype=np.uint16) |
| 27 | + elif num_rows <= np.iinfo(np.uint32).max: |
| 28 | + row_index = Array.from_numpy(np.arange(num_rows, dtype=np.uint32)) |
| 29 | + filter_arr = np.zeros(num_rows, dtype=np.uint32) |
| 30 | + else: |
| 31 | + row_index = Array.from_numpy(np.arange(num_rows, dtype=np.uint64)) |
| 32 | + filter_arr = np.zeros(num_rows, dtype=np.uint64) |
| 33 | + |
| 34 | + table_with_row_index = table.append_column("_row_index", ChunkedArray(row_index)) |
| 35 | + quak_widget = quak.Widget(table_with_row_index) |
| 36 | + |
| 37 | + test = None |
| 38 | + |
| 39 | + def row_index_callback(change): |
| 40 | + global test |
| 41 | + test = change |
| 42 | + |
| 43 | + sql = sqlglot.parse_one(quak_widget.sql, dialect="duckdb") |
| 44 | + sql.set("expressions", [sqlglot.column("_row_index")]) |
| 45 | + row_index_table = quak_widget._conn.query(sql.sql(dialect="duckdb")).arrow() |
| 46 | + |
| 47 | + # Reset all to zero |
| 48 | + filter_arr[:] = 0 |
| 49 | + |
| 50 | + # Set the desired _row_index to 1 |
| 51 | + filter_arr[row_index_table["_row_index"]] = 1 |
| 52 | + |
| 53 | + quak_widget.observe(row_index_callback, names="sql") |
| 54 | + |
| 55 | + test |
| 56 | + |
| 57 | + |
| 58 | +m = viz(gdf) |
| 59 | +m |
| 60 | +table = m.layers[0].table |
0 commit comments