Mysql 函数 MBRContains 不准确

2024-01-25

我有以下多边形(在图像中您可以看到它覆盖的区域)

POLYGON((-74.05100448502202 4.7239278424321,-74.05092938316898 4.7241416902206,-74.04830618275201 4.7237460717602,-74.04643668306903 4.7234306460692,-74.04635688735101 4.7234105978214,-74.04636526925401 4.7233310730989,-74.046191260944 4.72327293317,-74.04579027069599 4.7232007594583,-74.04141290558402 4.7214258184083,-74.03746201170497 4.7197791822891,-74.03565688503801 4.7189879401666,-74.033484295736 4.7180897723398,-74.03098447693401 4.7170526009038,-74.028731840457 4.7161167561787,-74.02852820211899 4.7150714370973,-74.026398371001 4.6877232674918,-74.02558060109601 4.6874859863574,-74.02454587610401 4.686797564651,-74.024665108676 4.6863189291555,-74.025470986757 4.6857975214267,-74.02585246812498 4.6846813784365,-74.02580479605103 4.6834369175226,-74.01962984798399 4.684922743491,-74.028472839649 4.6765444849623,-74.032273278366 4.6775012677607,-74.03825980124901 4.6799297676049,-74.048215993474 4.6850422042295,-74.05718496514402 4.6867981911917,-74.05100448502202 4.7239278424321))

当我执行时MBRIntersect, MBRContains and Within它们返回绿色标记位于多边形内部的函数,但事实并非如此(如图所示)。我正在执行下一句话来得到这个:

SET @g1 = ST_GeomFromText('POLYGON((-74.05100448502202 4.7239278424321,-74.05092938316898 4.7241416902206,-74.04830618275201 4.7237460717602,-74.04643668306903 4.7234306460692,-74.04635688735101 4.7234105978214,-74.04636526925401 4.7233310730989,-74.046191260944 4.72327293317,-74.04579027069599 4.7232007594583,-74.04141290558402 4.7214258184083,-74.03746201170497 4.7197791822891,-74.03565688503801 4.7189879401666,-74.033484295736 4.7180897723398,-74.03098447693401 4.7170526009038,-74.028731840457 4.7161167561787,-74.02852820211899 4.7150714370973,-74.026398371001 4.6877232674918,-74.02558060109601 4.6874859863574,-74.02454587610401 4.686797564651,-74.024665108676 4.6863189291555,-74.025470986757 4.6857975214267,-74.02585246812498 4.6846813784365,-74.02580479605103 4.6834369175226,-74.01962984798399 4.684922743491,-74.028472839649 4.6765444849623,-74.032273278366 4.6775012677607,-74.03825980124901 4.6799297676049,-74.048215993474 4.6850422042295,-74.05718496514402 4.6867981911917,-74.05100448502202 4.7239278424321))', 4326);
SELECT MBRContains(@g1, ST_PointFromText('POINT(-74.051585 4.680108)', 4326)) g1, 
st_distance(ST_PointFromText('POINT(-74.051585 4.680108)', 4326), @g1) distance

我得到了

g1      distance
1   |   0.005489581062607619

但我期待着

g1      distance
0   |   0.005489581062607619

我尝试过以下情况:

  • 保存分配 4326 SRID 的几何图形。
  • 使用其他函数,得到相同的响应。

我使用的是 5.7.14 MySQL 版本

我究竟做错了什么?

我解决了这个问题只是验证没有距离。但是,为什么我会从该函数中得到这个结果?


我现在没有 MySQL 可以玩。所以我首先尝试在 SQL Server Spatial 中复制您的查询。

DECLARE @g1 geometry
DECLARE @h1 geometry
SET @g1= geometry::STGeomFromText('POLYGON((-74.05100448502202 4.7239278424321,-74.05092938316898 4.7241416902206,-74.04830618275201 4.7237460717602,-74.04643668306903 4.7234306460692,-74.04635688735101 4.7234105978214,-74.04636526925401 4.7233310730989,-74.046191260944 4.72327293317,-74.04579027069599 4.7232007594583,-74.04141290558402 4.7214258184083,-74.03746201170497 4.7197791822891,-74.03565688503801 4.7189879401666,-74.033484295736 4.7180897723398,-74.03098447693401 4.7170526009038,-74.028731840457 4.7161167561787,-74.02852820211899 4.7150714370973,-74.026398371001 4.6877232674918,-74.02558060109601 4.6874859863574,-74.02454587610401 4.686797564651,-74.024665108676 4.6863189291555,-74.025470986757 4.6857975214267,-74.02585246812498 4.6846813784365,-74.02580479605103 4.6834369175226,-74.01962984798399 4.684922743491,-74.028472839649 4.6765444849623,-74.032273278366 4.6775012677607,-74.03825980124901 4.6799297676049,-74.048215993474 4.6850422042295,-74.05718496514402 4.6867981911917,-74.05100448502202 4.7239278424321))', 4326);
SET @h1 = geometry::STGeomFromText('POINT(-74.051585 4.680108)', 4326)
SELECT @g1.STContains(@h1) contain, @g1.STDistance(@h1) distance

结果就是你所期望的:

contain      distance
0   |   0.005489581062607675

这背后的原因如下:

我在用ST包含 not MBR包含根据您对要查找的内容的描述。 MBRContains 函数首先在多边形上创建一个最小边界矩形,然后使用该新的多边形功能进行包含判断。在您的示例中,该点确实落入多边形的 MBR 中,这就是为什么您的 MySQL 结果不是您所期望的。 STContains 正是您正在寻找的函数。

官方参考:Mysql空间链接 https://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions-object-shapes.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql 函数 MBRContains 不准确 的相关文章

  • MySQL创建表中的日期格式

    我必须使用 MySql 创建一个表 它可以按以下格式存储日期 我尝试过如下 CREATE TABLE birth date DATE 但它不起作用 因为日期格式是 YYYY MM DD 我该怎么办 谢谢 MySQL 或几乎任何其他数据库 中
  • 比较两个表并找到匹配的列

    我有两个表 table1 和 table2 我需要编写一个选择查询 它将列出两个表中存在的列 mysql 我需要为不同的桌子做 一次2个 这可能吗 我尝试使用INFORMATION SCHEMA COLUMNS但我无法做对 SELECT a
  • MySQL查看数据是否为NULL

    我需要在 Select 中放置一个 Case 来检查我添加到视图中的数据是否为 NULL 在这种情况下我希望它只输入零 或者不输入零 你的意思是这样的吗 SELECT IF field IS NULL 0 field 还有 IFNULL S
  • 将歌词存储在 MySQL 数据库中

    我想知道在 mysql 数据库中存储音乐 歌词 的最佳方式是什么 以及用于此目的的设置是什么 另外 我想要表格来存储断线 我正在考虑使用 指示新行并使用 php 替换字符串 我不知道从哪里开始 或者使用什么参数 varchar int 我知
  • 在评论中查找不同风格的日期

    我还有一个问题要问preg match 我有一个表 其中评论的日期写在评论本身内 手动 现在我需要提取该日期并将其放置在不同的列中 我发现评论和日期的样式如下 id warning sent warning date 6109 2011 0
  • MySQL Spatial CONTAINS 显示错误结果

    我的 MySQL 空间搜索有一个奇怪的行为 我在 GEOM 字段 葡萄牙边界 中创建了一个多边形 然后我尝试在内部找到一个点 发现没问题 下一次尝试是查找多边形外部的点 但查询仍返回 1 个找到的行 请帮忙 我做错了什么 为什么它会找到多边
  • 使用 mariaDB 将 sql 转储文件安装到 docker 容器

    我刚刚学习 docker 的基础知识 但一直停留在从本地系统导入 SQl 文件上 我使用的是 Windows 10 并允许我的 docker 容器访问我的共享驱动器 我有一个位于 D 上的 SQL 文件 我想导入到从 docker hub
  • 如何在mysql中设置“performance_schema on”?

    我想转performance schemaON 在 mysql 中收集统计信息 我怎样才能实现这个目标 以下指南是特定于 Linux 的 但应该很容易适用于 Windows 您必须检查 mysql 服务器二进制文件是否已编译为支持它 mys
  • MySQL - 通过部分单词匹配和相关性评分进行高效搜索(全文)

    如何进行 MySQL 搜索 既匹配部分单词 又提供准确的相关性排序 SELECT name MATCH name AGAINST math IN BOOLEAN MODE AS relevance FROM subjects WHERE M
  • 如何使用WAMP登录phpMyAdmin,用户名和密码是什么?

    根 这个词是什么意思php我的管理员 http en wikipedia org wiki PhpMyAdmin 每当我写作时localhost phpmyadmin在地址栏上 我被要求输入用户名和密码 但我不知道它们是什么 我不记得何时何
  • 如何从java中的字符串时间戳中提取日期和时间

    我正在获取日期和时间String TIMESTAMP来自服务器的 MySQL 格式如下 2014 02 15 05 18 08 我想要的是提取日期DD MM YYYY格式和时间HH MM SS AM PM格式 而且这个时间戳的时区是不同的
  • 将 .NET 小数存储到 MySQL 中的最佳字段定义是什么?

    我需要将小数存储到 MySQL 中 它可以具有不同的精度 因此我很想知道哪种 MySQL 字段类型绝对等同于 NET 的字段类型decimal http msdn microsoft com en us library system dec
  • 为什么有时自增列的值会有一个或多个间隙?

    我有一个这样的表 colors id color 1 red 2 blue id column is auto increment PK 当我向该表中插入一些新值时 有时会出现一些间隙id柱子 像这样的事情 INSERT INTO colo
  • 如何优化这个查询(涉及4毫米表)

    我正在使用如下所示的遗留数据库架构 product table表有字段 uid 整数 主键 name varchar 50 category表有字段 uid 整数 主键 name varchar 50 好吧 现在product table与
  • 如何使用Python的Mysqldb模块?而不是 %s 作为查询参数?

    MySqlDb 是一个很棒的 Python 模块 但有一个部分非常烦人 查询参数如下所示 cursor execute select from Books where isbn s isbn 而已知宇宙中的其他地方 oracle sqlse
  • MySql 5.7 函数 UUID() 默认排序规则 - 非法混合排序规则

    Problem MySQL uuid 默认排序规则与配置连接排序规则不进行比较 我有一个使用字符集创建的数据库 表 字段 utf 8和排序规则utf8 polish ci my cnf 如下 init connect SET NAMES u
  • MySQL Workbench 深色主题

    我刚刚开始学习 SQL 课程 并且一直在尝试不同的 GUI 我喜欢使用 MySQL Workbench 但白色背景刺瞎了我的眼睛 我已经搜索并找到了一些其他讨论编辑 xml 文件的相关帖子 我尝试用几种不同的方式对其进行编辑 但无济于事 我
  • 检测 MySQL 中的 utf8 损坏字符

    我有一个数据库 其中有一堆损坏的 utf8 字符分散在多个表中 字符列表不是很广泛 AFAIK 修复给定的表非常简单 update orderItem set itemName replace itemName 但我无法找到检测损坏字符的方
  • 将我的本地数据库(Mysql)复制到远程数据库(phpmyadmin)

    My MySQL database local server is connected to a weather station The data are updated continuously on my local server My
  • Laravel Eloquent with()-> 返回 null

    我正在尝试使用 Eloquent 来获取具有以下功能的特定产品 brand id映射到a的列brands表 该brand数组返回空 这里有什么明显需要改变的地方吗 product Product with images gt with br

随机推荐

  • 销毁免费墙实例

    我正在使用jquery Freewall 插件 http vnjs net www project freewall 我想知道如何销毁它的一个实例 我写了一个小例子供大家理解 var startFreewall function funct
  • 将数据从一个子布局发送到 sitecore 中的另一个子布局

    我很难在 Sitecore 7 中构建过滤系统 我有 2 个子布局 位于页面的同一级别 子布局 A 是一个侧边栏 其中包含复选框列表 并具有一个用所选值填充列表的事件 子布局 B 显示一组项目 我想做的是将填充的列表从子布局 A 发送到子布
  • 在 proto 中从父文件夹导入到子文件夹

    我正在尝试将原型 defn 从父原型导入到具有以下文件夹结构的子原型中 parent proto sub child proto 父级 proto message Attribute 子原型 import parent proto mess
  • 在一列上使用 unique 并在另一列上执行 order by 会产生错误

    我有一张桌子 abc test 包含 n num k str 列 此查询不起作用 select distinct n num from abc test order by k str 但这有效 select n num from abc t
  • 请逐步解释递归[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 请逐步解释递归 public class TestClass private static void printit i
  • 成功安装 Python 自制程序后,运行“pip”会出现“找不到命令”

    前言 我对终端很不好 请耐心等待 当我跑步时pip我得到 zsh command not found pip 我已经安装了带有brew的Python 2 7 11 这应该允许pip工作 当我跑步时echo PATH I get usr lo
  • 如何判断一个点是否在一组区间内?

    我正在寻找最快的方法来确定线上的点是否在该线的子集中 我得到了一个整数 Point 并且我还有一个 列表 点 用整数表示 3 10 1000 等 间隔 我用 2 个整数表示 2 10 是从 2 到 10 的所有整数 50 60 等 在此示例
  • Android 图像视图矩阵缩放 + 平移

    我正在尝试手动获取以图像视图为中心并适合屏幕的图像 我需要用矩阵来完成 稍后我将动态更改矩阵变换 问题是我无法使图像在视图中居中 比例合适 这是代码 Compute the scale to choose this works float
  • npm 安装错误:rollbackFailedOptional:命令 npm install --save-dev @babel/core @babel/cli 的动词 npm-session a0d68

    当我尝试安装 babel 时 我不断收到此错误 rollbackFailedOptional verb npm session a0d68 节点版本为12 16 1 npm 版本是 6 13 4 我只是想安装 babel 并探索它是如何工作
  • 在 Laravel 中使用 number_format 方法

    我对 Laravel 和 Blade 模板相当陌生 谁能帮我展示如何做到这一点 我有这样的看法 foreach Expenses as Expense tr td Expense gt type td td Expense gt narra
  • 如何在命名空间范围内前向声明 constexpr 对象?

    在 clang 主干 上 我可以转发声明一个对象 稍后将用constexpr如下 Fwd declarations struct S extern const S s later definitions struct S constexpr
  • 使用 BLoC 处理导航的正确方法

    大家好 我正在使用 BLoC 来开发我目前正在开发的应用程序 但在某些情况下我一无所知 例如当您登录时触发 API 调用并自然等待结果时 我会发送加载状态并显示加载程序 但之后 这完成了如何处理例如导航到不同的屏幕 我目前有这样的事情 ty
  • 如何计算两个单词之间的“最短距离”?

    最近我参加了一次面试 我被要求编写一个算法来找到从特定单词到给定单词的 1 个字母变化的最小数量 即 Cat gt Cot gt Cog gt Dog 我不想要问题的解决方案 只是引导我了解如何在该算法中使用 BFS 根据这个拼字游戏列表
  • docusign 代表发送功能

    总的来说 我是 docusign 和 api 的新手 我已在 docusign 上手动创建了一个主帐户 现在我想使用此帐户创建新用户并使用代表发送功能 我已经浏览过这个 pdf http www docusign com sites def
  • 通用 Windows 平台应用程序和 C++/CLI (VS 2015 RC1)

    我有一些源自 NET 系统命名空间类的 C CLI 代码 有没有办法为通用 Windows 平台应用程序重用此代码 我无法在 C 中获得对系统命名空间的引用 尽管在 C 中这是可能的 看起来仅支持 C Cx 代码 而不支持托管 C CLI
  • Django 403 CSRF验证失败

    我正在为我的学校编写一个注册网站 并使用 Django 作为框架 对于注册 我需要用户名 密码和注册令牌 这些尚未得到验证 我现在要做的就是从注册输入页面 使用 POST 请求 转到 您已成功注册 页面 在此过程中 csrf 令牌显然拒绝验
  • 为什么“style=”上的真/假逻辑不起作用?

    这是有效的代码 plotshape xvalue location location absolute style shape labeldown color red size size tiny text Upper 这是代码不起作用 p
  • 如何选择 ImageGrab.grab() 在多显示器设置中抓取哪个屏幕?

    就像标题所说 我很好奇是否有一种方法可以配置 ImageGrab grab 模块来抓取 例如 在多显示器设置中抓取右侧屏幕 而不是左侧屏幕 不幸的是 由于 PIL 获取显示设备尺寸的方式 这是不可能的 当它获得设备上下文时 does为所有连
  • 如何在多行文本框中添加文本?

    我必须将文件的详细信息添加到多行文本框中 但所有详细信息都添加在文本框中的一行中 而不是按垂直顺序添加 我使用了Environment NewLine 还使用了 r n 但它没有任何帮助 我已在 Windows 窗体表单中勾选了多行文本框
  • Mysql 函数 MBRContains 不准确

    我有以下多边形 在图像中您可以看到它覆盖的区域 POLYGON 74 05100448502202 4 7239278424321 74 05092938316898 4 7241416902206 74 04830618275201 4