我有一个来自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
答案 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。