Chisle
코딩 에이전트 플러그인, 20개 실시간 작업에서 기본 모델 52% 활용, 간결한 페르소나와 출력 압축 제공
API로 전체 OpenStreetMap을 조회하고 주소·경로·고도·검색 등을 제공, 무료 플랜 포함, 구글맵보다 최대 90% 저렴
Query the full OpenStreetMap planet via API. Geocoding, routing, elevation, search, and more. Free tier included, up to 90% cheaper than Google Maps.
개발 도구Elixir · TypeScriptGitHub @plazafyi온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
PlazaQL - A new type of geospatial query language
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A LINQ-style query language for geospatial data. PlazaQL provides a composable, chainable syntax for searching, filtering, routing, geocoding, and transforming OpenStreetMap data through the Plaza API.
search(node, amenity: "cafe")
.within(boundary(name: "Manhattan, New York"))
.around(200, point(40.7484, -73.9856))
.fields("name", "cuisine", "opening_hours")
.sort(t["name"])
.limit(10);
.pql
Find restaurants near a point:
search(node, amenity: "restaurant")
.around(500, point(48.8566, 2.3522))
.limit(20);
Walking isochrone with nearby parks:
$$.area = isochrone(center: point(40.71, -74.00), time: 900, mode: "foot");
$$.parks = search(way, leisure: "park").within($$.area);
Geocode and search nearby:
$home = geocode("350 Fifth Avenue, New York");
search(node, shop: "supermarket")
.around(500, $home)
.sort(distance($home))
.limit(5);
Expression filter and aggregation:
search(way, building: "yes")
.within(boundary(name: "Manhattan, New York"))
.filter(is_number(t["height"]) && number(t["height"]) > 50)
.group_by(t["building"])
.count();
Global directive scoping:
#within(geometry: boundary(name: "Berlin"));
#filter(wheelchair: "yes");
$$.cafes = search(node, amenity: "cafe").limit(10);
$$.restaurants = search(node, amenity: "restaurant").limit(10);
A PlazaQL query is a sequence of statements, each terminated by ;. Statements are either:
expression; (implicit output)$name = expression;$$ = expression; or $$.name = expression;#method(args); (applies to all subsequent queries)Expressions are built from functions (which produce values), methods (which transform values via chaining), and operators (union +, difference -, intersection &).
// Variable — stores a value for reuse
$area = boundary(name: "Berlin, Germany");
// Bare expression — implicitly becomes the output
search(node, amenity: "cafe")
.within($area)
.limit(10);
// Line comment — everything after // is ignored
/* Block comment —
can span multiple lines */
/* Nested comments are supported —
/* inner comment */
still inside the outer comment */
Variables store intermediate values for reuse. Names start with $ followed by a letter or underscore.
$center = point(40.7128, -74.0060);
$radius = 500;
$nyc = boundary(name: "New York City");
// Use in subsequent expressions
search(node, amenity: "cafe")
.around($radius, $center)
.within($nyc);
Variables are immutable — once assigned, they cannot be reassigned.
A variable holding a literal (point(...), linestring(...), polygon(...), bbox(...), circle(...) or a number) is replaced by that literal wherever it is used, so .around($radius, $center) compiles exactly like .around(500, point(40.7128, -74.0060)). A literal is a value, not a query: $center; on its own is a compile error. A variable holding a search, boundary or computation runs once, before the statements that use it.
Named output variables ($$.name) can also be used as values in later expressions — see Output Assignment.
Every query must produce at least one output. This defines what gets returned.
Single output — bare expression (preferred):
search(node, amenity: "cafe").limit(10);
A bare expression statement is equivalent to $$ = expression;. The explicit $$ = prefix is supported but optional for single-output queries:
$$ = search(node, amenity: "cafe").limit(10);
Named outputs — return multiple result sets:
$$.cafes = search(node, amenity: "cafe").limit(5);
$$.parks = search(way, leisure: "park").limit(5);
$$.route = route(origin: point(40.71, -74.00), destination: point(40.75, -73.98));
Named output references — $$.name values can be referenced in later statements, eliminating the need for intermediate variables:
$$.route = route(origin: point(40.71, -74.00), destination: point(40.75, -73.98));
$$.stops = search(node, amenity: "cafe").around(200, $$.route);
This is equivalent to the more verbose:
$r = route(origin: point(40.71, -74.00), destination: point(40.75, -73.98));
$$.route = $r;
$$.stops = search(node, amenity: "cafe").around(200, $r);
Named outputs are immutable — once assigned, they cannot be reassigned.
Value types used as arguments to spatial methods and constructors.
| Type | Constructor | Description |
|---|---|---|
Point | point(lat, lng) | Single coordinate |
LineString | linestring(p1, p2, ...) | Ordered sequence of points |
Polygon | polygon(p1, p2, p3, ...) | Closed ring of points |
bbox(south, west, north, east) | Bounding box (shorthand) |
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗