MYSQL中POINT和GEOMETRYCOLLECTION对象之间的距离

问题描述 投票:0回答:1

MYSQL版本5.7

要求:我在MYSQL表中有一堆POINT几何图形,我必须找到所有在GEOMETRYCOLLECTION对象的半径/半径5公里之内的POINT几何图形。

GEOMETRYCOLLECTION可能包含多种类型的几何图形,例如POINT,POLYGON等。

样本几何数据:SET @g1 = ST_GeomFromText('GEOMETRYCOLLECTION(POINT (-156.366489591715 66.913750389327),POLYGON ((-156.357608905242 66.906958164897, -156.360302383363 66.9066027336476, -156.361997104194 66.9067073607308, -156.363616093774 66.9066368440642, -156.365477697938 66.9065867326059, -156.368127298976 66.9065970034393, -156.370061891681 66.9066888794808, -156.37182258022 66.9068547305222, -156.373286981259 66.9070724523969, -156.374390675008 66.9072952721882, -156.376359777088 66.9077681138541, -156.377706173961 66.9080113180204, -156.379222192708 66.9081328753119, -156.380729601039 66.9081591586452, -156.382562289578 66.9081211961453, -156.387571662487 66.9099676951007, -156.389320598943 66.9125180930134, -156.389291120818 66.9145787836353, -156.384722634367 66.9167899596735, -156.37955035 66.9195246586276, -156.372520662511 66.9209119638337, -156.360432280238 66.9215118034161, -156.355776993787 66.9203754471679, -156.34906598338 66.9180659711298, -156.347941981299 66.9174007836309, -156.346853913592 66.9167568252985, -156.34605399901 66.9158971169665, -156.346982815675 66.9151925950926, -156.346794497967 66.9144321773854, -156.345642955261 66.9140107294695, -156.343831364638 66.9136152003034, -156.342996512556 66.9130307378043, -156.343113243806 66.9123137492637, -156.343498096931 66.9119029992644, -156.344661664637 66.9111819440571, -156.345080786511 66.9105884961414, -156.345524286511 66.9099605023924, -156.347168040675 66.9098486503092, -156.348952756297 66.9096090419763, -156.348689200048 66.9089614565606, -156.349495732338 66.908706844061, -156.350786711503 66.9082992794783, -156.352211271917 66.9083472388533, -156.353952768789 66.90829894302, -156.355389368787 66.9082072242701, -156.356512531285 66.9079768284371, -156.356677961493 66.9078075857291, -156.356422527119 66.907644261771, -156.355901372953 66.9072802273965, -156.357608905242 66.906958164897)))');

样本点数据:SET @p1 = ST_GeomFromText('GEOMETRYCOLLECTION(POINT (-156.342840017 66.9320439348))');

我尝试过ST_DISTANCE_SPHERE(@ g1,@ p1)空间函数(返回以米为单位的值,但似乎不支持POINT和MULTIPOINT以外的几何类型。

然后我用过:

ST_DISTANCE(@ g1,@ p1)

'0.015301834064271899'

我无法理解在MYSQL 5.7中此返回值的UNIT是什么?

我在互联网上进行了很多搜索,并且没有与此相关的适当文档。在POSTGIS中,可以做到这一点,但我在MYSQL 5.7版中很难做到这一点。

感谢您的任何帮助。

谢谢!

mysql geospatial
1个回答
0
投票

ST_Distance在此处返回以度为单位的“距离”,即形状之间最短距离的平面图视图。此值不能映射为真实距离,因为平行线1度的真实世界距离与经线1度的距离不同,除了赤道附近。

看起来MySQL无法在此处正确计算距离。具有更多地理空间支持的系统(例如PostgreSQL + PostGIS或Google BigQuery等)会为您提供更好的服务。它们会为您提供正确的答案,您只需将ST_GeomFromText替换为ST_GeogFromText即可使用球形地理。

© www.soinside.com 2019 - 2024. All rights reserved.