Skip to content

Commit 34911dc

Browse files
refine docs
1 parent 60dd06b commit 34911dc

3 files changed

Lines changed: 6 additions & 25 deletions

File tree

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ result = sf.lazy().filter(pl.col("population") > 100_000).range_query(-10.0, 35.
4545

4646
## Why PyCanopy
4747

48-
During my undergrad research, I saw firsthand how spatial dataframe tooling could use performance improvements.
49-
5048
The driving motivator behind creating this library was to provide the optimizations of relational DBs (query planning, indexing, etc) in a fast, Polars-like interface meant for in-memory spatial work.
5149

5250
Edit [June 19 2026]: Apache SedonaDB released a cool Python DataFrame API. There are similarities between their API and this tool but some key differences are that this library uses (1) a Polars-native query engine and (2) a cost model that decides whether and how to index.

docs/api/distance-operations.md

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,11 @@ For a join (`within_distance_join`, `polygon_within_distance_join`), reproject b
2727

2828
## Recommendation by input type
2929

30-
PyCanopy doesn't have a CRS system currently so it's recommended to use the following conversion prior to interacting with the engine.
31-
3230
```mermaid
3331
flowchart TD
34-
A[geopandas GeoSeries] -->|carries .crs| D[Reprojected GeoSeries]
35-
B[WKB point or polygon column] -->|CRS lived at file level, not in the bytes| E[Decode, reproject, re-feed]
36-
C[numpy array, GeoArrow, shapely list, xy tuples, coordinate sequences] -->|no CRS anywhere| F[pyproj or geopandas on raw arrays]
37-
D --> G[SpatialFrame or from_polygons]
38-
E --> G
39-
F --> G
40-
G --> H[distance now means real-world units]
32+
A[geopandas GeoSeries] -->|has .crs| R[Reproject]
33+
B[WKB point or polygon column] -->|decode first| R
34+
C[numpy, GeoArrow, shapely list, tuples] -->|raw coordinates| R
35+
R --> S[SpatialFrame]
36+
S --> D[distance in real-world units]
4137
```
42-
43-
- **geopandas `GeoSeries`**: reproject in place with `gs.to_crs(gs.estimate_utm_crs())`.
44-
- **WKB point or polygon columns**: decode with `wkb_points_to_xy` (points) or `Engine.from_wkb_polygons` (polygons), reproject the decoded coordinates, then feed the result to PyCanopy.
45-
- **numpy arrays, GeoArrow, shapely lists, tuples, coordinate sequences**: no CRS ever attached, reproject the raw arrays directly with `pyproj` or `geopandas`.

docs/contributing.md

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,11 @@ ruff format && ruff check
5252
cargo fmt && cargo clippy
5353
```
5454

55-
The key rules:
55+
To avoid a slopocolypse, I recommend using these guidelines:
5656

5757
- No em dashes, no semicolons in comments or docstrings.
5858
- All Python imports at module level.
5959
- Public Python functions use Google-style docstrings (`Args:`, `Returns:`).
6060
- Private Python functions use a `#` comment as the first line in the body — no docstring.
6161
- Rust `pub` items require `///` doc comments; every module file requires `//!`.
6262
- Single-line comments have no trailing period; multi-line comment blocks end each sentence with a period.
63-
64-
## Docs
65-
66-
```bash
67-
uv sync --group docs
68-
mkdocs serve
69-
```
70-
71-
The asset copy hook (`hooks.py`) runs automatically on `mkdocs serve` and `mkdocs gh-deploy`.

0 commit comments

Comments
 (0)