Mysql-将英国国家网格(OSGB36)中的点几何转换为纬度/经度(wgs84)

时间:2019-01-04 15:57:51

标签: mysql postgis geocoding latitude-longitude

我有一个来自https://www.ordnancesurvey.co.uk/business-and-government/help-and-support/products/os-open-names.html的地名数据转储(csv)

我需要将其导入到mysql中,但是几何坐标使用BNG(OSGB36)。 Mysql是否具有将这些坐标转换为wgs84 lat / long的功能,或者是否有其他sql方法来实现此目标?

另一个选择也许是将其加载到postgis中-postgis是否具有将BNG转换为经/纬度的功能?也许我可以这样做,然后将转换后的数据导出并将其加载到mysql中?

在postgis中,我可以执行以下操作(未经测试)

select AddGeometryColumn('locations', 'the_geom', 27700, 'POINT', 2);

-- X and Y are the BNG co-ordinates
UPDATE locations SET the_geom = ST_GeomFromText('POINT(' || x || ' ' || y || ')', 27700 );

alter table locations add column lat real;

alter table locations add column long real;

update locations set long=st_x(st_transform(the_geom,4326)), 
                      lat=st_y(st_transform(the_geom,4326));

是否有可能在mysql中执行这些类型的功能-基本上,mysql中的等效功能是什么。我似乎无法弄清楚语法吗?以下在mysql中不起作用:

update locations set long=ST_X(ST_Transform(the_geom,4326)), 
                  lat=ST_Y(ST_Transform(the_geom,4326));

我收到错误function ST_Transform does not exist。我正在使用mysql 5.7

*更新* 样本数据:

 NAME1      LOCAL_TYPE  GEOMETRY_X  GEOMETRY_Y  DISTRICT_BOROUGH    REGION      COUNTRY 
 Southport  Town        333510      417225      Sefton              North West  England 

1 个答案:

答案 0 :(得分:0)

答案是:here

  

Hartmut Holzgraefe在此评论中回答。

     

到目前为止,SRID属性在MySQL中只是一个虚拟对象,它存储为   几何元数据的一部分,但所有实际计算都将其忽略   并假定欧几里得(平面)几何进行计算。

     

因此ST_Transform在这一点上实际上不会做任何事情。

     

我认为对于MariaDB(至少在知识领域)也是如此   SRID()函数的基本页面仍然如此:

This WorlLog讨论了实施ST_Transform的进度。

MySQL 8.0 确实似乎已实现:https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html#function_st-transform

因此,解决方案 可能需要升级到MySQL 8.0。

最近的8.0.13的变更日志说:

  

----- 2018-10-22 8.0.13一般可用性-------

     

MySQL现在实现了   ST_Transform()   用于从一个转换几何值的空间函数   空间参考系统(SRS)。目前,它支持   地理SRS之间的转换。有关详细信息,请参见Spatial Operator Functions