ASP.NET项目中使用C#从英国格网参考获取经纬度的方法
C# 使用GeoUK实现英国格网参考坐标转换
你提到的ST2264属于英国地形测量局定义的OSGB36格网参考编码,GeoUK内置了完整的格网解析、坐标系转换能力,不需要自行实现格网字母映射、坐标转换参数计算,具体使用方式如下:
前期准备
- 首先在ASP.NET项目中通过NuGet安装GeoUK包,包管理器控制台执行以下命令即可:
Install-Package GeoUK
- 代码文件中引入所需命名空间:
using GeoUK.Coordinates; using GeoUK.OSTN15; using GeoUK;
格网参考转东距/北距(OSGB36平面坐标)
直接调用OsGridRef.Parse方法传入格网参考字符串,就能直接得到对应的东距、北距值,方法会自动识别格网编码的精度(比如ST2264对应1km网格精度,更长后缀的编码会自动匹配更高精度):
string gridReference = "ST2264"; // 解析为OSGB36平面坐标 Osgb36Coordinate osgbCoord = OsGridRef.Parse(gridReference); double easting = osgbCoord.Easting; // 东距值,单位:米 double northing = osgbCoord.Northing; // 北距值,单位:米
提示:该解析方法会自动忽略字符串中的空格,传入带格式空格的格网参考(比如
ST 22 64)不需要额外做字符串预处理。
格网参考转WGS84经纬度
GeoUK内置英国官方发布的OSTN15高精度转换模型,不要直接使用通用七参数做坐标转换,否则会出现米级到十米级的偏差,转换代码如下:
// 基于OSTN15模型将OSGB36坐标转换为WGS84经纬度(GPS通用坐标系) LatitudeLongitude wgs84Point = OSTN15.TransformToWgs84(osgbCoord); double longitude = wgs84Point.Longitude; // 经度,单位:度 double latitude = wgs84Point.Latitude; // 纬度,单位:度
常见注意事项
- 如果业务需要ETRS89坐标系的经纬度(欧洲通用坐标系,在英国本土和WGS84偏差在厘米级,多数场景可通用),可直接调用
ETRS89.TransformFromOsgb36(osgbCoord)方法转换。 - 转换得到的经纬度默认是十进制度单位,如果需要度分秒格式可自行做单位换算,注意不要把弧度返回值误当做角度使用。
- 若传入的格网参考字符串格式不符合OSGB规范,
Parse方法会抛出FormatException,生产环境建议增加参数校验和异常捕获逻辑。
内容的提问来源于stack exchange,提问作者CrazyBirdLady
相关产品推荐
相关产品推荐

