本文详解如何解析 admiralty tide api 返回的 geojson 数据,基于给定经纬度计算球面距离,精准定位最近站点并提取其 `id` 字段,适用于潮汐查询、地理服务等实际场景。
在处理地理坐标数据(如 Admiralty 的潮汐站列表)时,简单使用欧氏距离(Pythagorean Theorem)会因地球曲率导致显著误差——尤其当坐标跨纬度较大时。正确做法是采用大圆距离公式(Haversine 或球面余弦定理),它基于地球近似球体模型,单位精度可达海里(nmi)、公里(km)或英里(mi)。
以下是一个完整、健壮、可直接部署的 PHP 教程实现:
✅ 正确解析 GeoJSON 结构
Admiralty API 返回的是标准 GeoJSON FeatureCollection,其核心结构为:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": { "type": "Point", "coordinates": [-4.702540, 51.672791] },
"properties": { "Id": "1603", "Name": "TENBY", ... }
}
]
}
注意:coordinates 数组顺序为 [longitude, latitude](先经度后纬度),这与常见 lat/lng 变量命名相反,极易出错——务必确认 $lng = $feature->geometry->coordinates[0],$lat = $feature->geometry->coordinates[1]。
立即学习“PHP免费学习笔记(深入)”;