gpt4 book ai didi

mysql - 如何在MySQL中计算形状的周长?

转载 作者:行者123 更新时间:2023-11-29 16:48:58 25 4
gpt4 key购买 nike

非常简单的问题,很难找到一个好的、快速的解决方案。

是否有任何实现如何计算在MySQL中保存为空间数据的形状的周长?

目前在 5.7/8.0 中有一个函数 ST_Area、Centroid 等,但没有像 Perimeter 这样的函数。 QGis/ArcGIS/其他。如何计算保存为的形状的周长:

POLYGON((-0.064064467695394 51.517842990224,-0.064052072253155   51.517846382663,-0.064060161846309 51.517859555443,-0.064067607477908 51.517870919076,-0.064150020271406 51.518000873356,-0.064212111950441 51.517981215205,-0.064106051285605 51.517831086958,...etc

在 PURE MySQL 5.7+(过程/函数)中还是最终使用 PHP 的 MySQL?

形状足够小,无法使用任何球面距离,所以我假设,在这种情况下地球是平的:)

感谢您提供有用的答案!

最佳答案

我认为最好的方法是用 PHP 来做到这一点。当然,并不是说它不能在 MySQL 中完成。

这是我的 PHP 解决方案:

function perimeterFromValue($value) {
$points = array_map(
function($pair) {
return preg_split('#\\s+#', $pair, -1, PREG_SPLIT_NO_EMPTY);
},
explode(',', $value)
);
$start = array_shift($points);
// Make the perimeter close onto itself (if it is already, remove this line)
$points[] = $start;
return array_reduce($points, function($carry, $item) use(&$start) {
$carry += hypot($item[0]-$start[0], $item[1]-$start[1]);
$start = $item;
return $carry;
}, 0);
}

它将字符串分成以逗号分隔的对,然后在中间的空格上分隔每对。从那时起,它在归约循环中使用毕达哥拉斯定理。

关于mysql - 如何在MySQL中计算形状的周长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52932287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com