GeoData Lab / 实验手记
六个可以运行、可以质疑的空间单元。
核验大学原始材料,运行原创练习,检查独立几何证据。
从一个能验证的问题开始
阅读指定大学课程章节,先写预测,再运行原创小练习,最后回到工作台修改输入。六个单元依次覆盖坐标约定、拓扑、空间关系、优化与测量。练习均为 Lab 原创,不复制或解答大学作业。
两套已核验的大学课程材料
选择两套已发布的赫尔辛基课程材料,分别支撑几何、CRS、空间关联与可复现编程;这是历史公开版本,不代表 2026 年招生安排。
显示 2 门课程
Automating GIS processes (AutoGIS) · GEOG-329-2
University of Helsinki · Department of Geosciences and Geography · Digital Geography Lab
- 版本 / 学期
- 2024.0 · Autumn 2024 · teaching period II (archived edition)
- 发布状态
- Published; archive says last updated 2025-08-12
- 先修要求
- Basic Python (for example GEOG-329-1); GEOG-G301 Introduction to advanced geoinformatics recommended by the course.
- 公开阅读
- Lessons, recorded videos and linked exercise instructions are openly readable. This Lab links readings; it does not reproduce or solve their assignments.
- 注册 / 付费
- Reading the public pages requires no registration or payment. University credits, grading, Discord and CSC Noppe access are separate institutional services; Finnish university student eligibility and enrollment apply. No current tuition/credit-fee claim is made.
- 历史页面注意事项
- The archive contains an unresolved starting_date template. Use its 2024 general information, not that template, for term identification.
- 核验日期
- 2026-11-14
Geo-Python · GEOG-329-1 / GEOK3001
University of Helsinki · Department of Geosciences and Geography
- 版本 / 学期
- 2025.0 · Autumn 2025 · teaching period I (archived edition)
- 发布状态
- Published; archive says last updated 2026-08-27
- 先修要求
- No previous programming experience required.
- 公开阅读
- Tutorials, lesson pages, selected videos and exercise instructions are openly readable.
- 注册 / 付费
- Self-study reading is free and needs no registration. Helsinki students sign up under one course code for credit; grading and institutional cloud/chat access are separate. No current 2026 registration or fee availability is asserted.
- 历史页面注意事项
- The 2025.0 homepage retains some 2023 schedule text; the general-info page explicitly names the 2025 teaching team. The archive version is pinned; this Lab does not infer a 2026 timetable.
- 核验日期
- 2026-11-14
公开材料可直接阅读,无需注册或付款。学分、评分、校内服务与当期注册费用另有条件;本清单不由历史页面推断 2026 年课表。
U1. 先核对坐标约定
先读: Automating GIS processes (AutoGIS) · Lesson 2 · Map projections
Handling coordinate reference systems in Geopandas
预测: 米制投影、看似合理的经纬度颠倒、跨日期线输入,范围校验分别能发现什么?
运行 U1,检查七种拒绝输入与仍可通过范围校验的 [24,60]、[60,24]。私有 PROJ 练习将 EPSG:3067 转为 EPSG:4326,并核对米制往返结果。
再改一个条件: 在工作台导入 islands.geojson,给 Feature 加 crs 后分析;移除 crs,再交换一个点的轴序。改标签不能代替重投影。
核对预期行为
CRS 成员与跨日期线范围被拒绝;合理数值的轴序颠倒仍可能通过,必须核查元数据。
有私有源码访问权限时的等价命令:
node labs/geo/run-exercise.mjs coordinates
U2. 外环、孔洞与边界谓词
先读: Automating GIS processes (AutoGIS) · Lesson 3 · Point-in-polygon queries
How to check if point is inside a polygon? / shapely geometries
预测: [1,3] 位于孔洞边缘,它在内部、外部还是边界?covers 与 contains 会怎样不同?
运行 U2,再检查 [-1e-11,3] 与 [1e-11,3],对照单独记录的 GEOS 反例。
再改一个条件: 打开群岛工作台,设点 [1,3] 并切换边界开关,再移到 [4,4];区分几何位置与是否计入命中。
核对预期行为
孔洞边缘为边界,孔洞内部为外部;两个 1e-11 探针都落入 Lab 容差带,GEOS 则区分内外。
有私有源码访问权限时的等价命令:
node labs/geo/run-exercise.mjs boundary
U3. 一个 ID 的多个分量
先读: Automating GIS processes (AutoGIS) · Lesson 1 · Shapely and geometry objects
Multipolygons; Validity of geometries
预测: 另一个分量孔洞里的 [2,2]–[3,3] 小岛能否属于同一要素?包围盒内的间隙是否命中?
运行 U3。原创群岛包含三个严格分离分量和一个孔洞;对比重叠、嵌套、共边与点接触的分量。
再改一个条件: 将独立分量从 [8,0]–[10,2] 改为 [5,0]–[7,2],运行并解释拒绝原因,再看保存的校验结果。
核对预期行为
孔洞中的小岛可以接受;重叠被拒绝;点接触虽可在 GEOS 中有效,但本 Lab 明确不支持。
有私有源码访问权限时的等价命令:
node labs/geo/run-exercise.mjs multipart
U4. 空间关联是一组关系
先读: Automating GIS processes (AutoGIS) · Lesson 3 · Spatial join
Load input data; Join input layers (related official Exercise 3 is linked in the course navigation)
预测: 九个点、两个区域 ID、四个面分量:包含与排除边界时各有多少关联对?
运行 U4,检查 east 的全部区域 ID、hole 的空 lab_matches,以及原始输入未被修改。
再改一个条件: 在群岛输入上运行空间关联,分别导出两种边界设置;再把 east 从 [9,1] 移到 [10.5,1],逐项解释消失的关联。
核对预期行为
包含边界:7 对、6 点;排除边界:4 对、3 点;移动 east 会移除它的两条关联。
有私有源码访问权限时的等价命令:
node labs/geo/run-exercise.mjs join
U5. 证明预过滤保留正确结果
先读: Automating GIS processes (AutoGIS) · Lesson 1 · Convex hull and envelope
Envelope is a bounding rectangle; combine with Lesson 3 spatial join
预测: 仅用包围盒会误收哪些点?仅检查第一分量会漏掉哪些点?
运行 U5,比较真实全扫描与预过滤,再观察两个故意错误的算法对照。
再改一个条件: 将 gap 移到 [8.25,1];它现在命中 archipelago,仍不命中 overlap-zone。按新坐标重算,不依赖旧 ID。
核对预期行为
扫描与预过滤一致;仅包围盒误收 hole、gap;仅第一分量漏掉 island、east 及东侧顶点。
有私有源码访问权限时的等价命令:
node labs/geo/run-exercise.mjs prefilter
U6. 单位、时间与近似误差
先读: Geo-Python · Lesson 6 · Processing data with pandas II; Debugging your Python code
Parsing dates; supplement with notebooks/L6/debugging.html → Test your code with known outputs
预测: 赤道与北纬 60° 的经度一度,角度距离、球面米数和 WGS84 椭球米数是否可互换?
运行 U6。五点、逐分钟的合成轨迹含一个孤立跳点;独立 PROJ 运行对同样两对坐标分别进行球面与 WGS84 计算。
再改一个条件: 在原始示例将速度阈值改为 1 km/h,导出前检查候选;更低阈值不保证孤立跳点候选更多。
核对预期行为
原创练习标记两条线段与第 2 点,保留四点;球面和椭球距离不同,保存值只量化这两对坐标。
有私有源码访问权限时的等价命令:
node labs/geo/run-exercise.mjs trajectory
独立 oracle:一致结果与边界
保存的运行实际执行了 Lab JavaScript 与独立 Shapely 2.0.6 / GEOS 3.11.4。5 个区域几何覆盖多分量、孔洞、斜边三角形、凹形与反向环;2,735 次位置判断没有非预期差异。十五个手工推导案例先与 GEOS 核对,再比较 JavaScript。这是有限合成语料的证据,不是通用正确性证明。
反例明确保留:x=±10⁻¹¹、y=3 时,Lab 都报告边界,GEOS 分别报告外部与内部。本版保留 10⁻¹⁰ 度数值容差。点接触多分量在 GEOS 中可以有效,但本实现采用更严格的子集并明确拒绝。这些结果不能证明地籍精度或 GPS 准确度。
关联结果与 GEOS covers / contains 一致(7 / 4 对)。仅包围盒误收孔洞和间隙,仅第一分量漏掉三个覆盖点。十六种无效或不支持输入被拒绝,记录区分拓扑无效与格式、区域范围限制。
| 纬度 | 球面米 | WGS84 椭球米 | 差异 |
|---|---|---|---|
| 0° | 111195.080 | 111319.491 | -0.1118% |
| 60° | 55597.011 | 55799.470 | -0.3628% |
这是两个纬度上经度一度的独立 PROJ 对照,不是全球误差上限。浏览器运行小型 JavaScript 核心;上述 GEOS/PROJ 值是单独保存的实际观测,不是当前标签页实时执行的 Python。
1. 在边界上放一个点
载入合成样例,region-a 含一个孔洞,region-b 与它重叠。在围栏模式中点击坐标图,或直接填写经纬度。可分别试 [114.3, 30.59](region-a 内部)、[114.3, 30.61](孔洞内部)、[114.28, 30.60](外边缘)。
切换“包含边界”后,几何位置仍报告为“边界”,是否命中则随策略改变。孔洞内部属于外部,孔洞边缘属于边界。环的顺逆时针方向不影响本站的位置判断。
2. 把观测点关联到区域
切到空间关联。包含边界时,样例中有三个点命中,产生四个点面关联对;重叠区域中的点会同时命中两个面。排除边界后,边缘点不再命中,剩下三个关联对。
导出的 GeoJSON 会为每个 Point 添加 lab_matches 数组,包含全部命中;原有属性及其他要素保留。表格最多显示 500 对,导出包含全部计算结果。
3. 实际测量预过滤
工作台下方的固定种子基准会生成 1,500 个点与 36 个面,种子为 42,比较全部点面扫描和包围盒预过滤。两者共用相同的精确点面判断,并核对关联列表完全一致。
每种方法先预热一次,再交替顺序测量五次。展示耗时中位数,包含输入校验。精确判断次数表示减少的计算工作;实际耗时取决于浏览器、设备、几何形态和系统负载,预过滤并不保证对所有输入都更快。
4. 检查轨迹中的孤立跳点
切到轨迹检查。LineString 需要在 properties.timestamps 中为每个坐标提供一个严格递增、包含时区的 ISO 时间。样例的第 2 号点是孤立跳点;阈值为 120 km/h 时,两侧线段均超速,而从第 1 号点直接连接第 3 号点的速度合理。
复核预览会略去这个孤立候选点。琥珀色为原轨迹,青色虚线为预览。先检查被标记的线段,再决定是否导出;超速可能来自真实出行、时间错误或坐标错误,这个启发式方法无法判定真实原因。
5. 使用自己的数据
从已有 GIS 流程导出 WGS84 GeoJSON FeatureCollection,为要素填写明确的 ID,方便回溯关联结果。导入文件或粘贴 JSON,选择实验后点击“分析输入”。
轨迹需要在 properties.timestamps 中为每个坐标填写一个带时区的时间。复核后下载结果;关闭标签页后不会保留文件。全部操作都能在浏览器完成,不需要安装、地图账号或 API key。