我正在运行MySql 5.7.22,并且试图获取建筑物所在的区域标识,所以我有两个表,一个表用于建筑物地址及其各自的地理空间坐标:
表格:建筑物
列:
id int(11)AI PK
国家varchar(50)
状态varchar(50)
城市varchar(60)
路线varchar(255)
坐标点
另一个针对普查区域的定义如下:
表格:ref_shape_area_pond
列:
OGR_FID int(11)AI PK
形状几何
id int(11)
数倍
area_pond文字
所以我为此尝试了两种方法:
1)像这样的常规JOIN语句:
选择building.id,area_pond
来自建筑物
JOIN ref_shape_area_pond ON st_within(ST_GeomFromText(ST_AsWKT(coords)),
ST_GeomFromText(ST_AsWKT(ref_shape_area_pond.SHAPE)));
2)像这样的协调查询:
SELECT ID,(SELECT Area_pond
来自ref_shape_area_pond
在st_within(buildings.coords,ref_shape_area_pond.SHAPE))
来自建筑物;
两种方法均会产生错误MySql错误3037:
错误代码:3037。为函数st_within提供了无效的GIS数据。
我检查了ref_shape_area_pond.SHAPE上的几何图形,它们定义了封闭的多边形(即:POLYGON上的第一个点和最后一个点是相同的);另外,ref_shape_area_pond.SHAPE和buildings.coords都是相同的RSID(2)。
此外,我还在建筑物表上创建了一个额外的字段,如下所示:
coords_geometry几何
试图确保为st_within()函数提供相同类型的参数;还是一样的错误。
还有什么可以检查的;我在做什么错了?