标签: mysql-spatial

MySQL中给定半径内的查询点

我创建了以下MySQL表来存储纬度/经度坐标以及每个点的名称:

CREATE TABLE `points` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `location` point NOT NULL,
  PRIMARY KEY (`id`),
  SPATIAL KEY `location` (`location`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
Run Code Online (Sandbox Code Playgroud)

我试图查询:

  • 给定点n英里范围内的所有点;
  • 每个返回点距给定点的距离

我发现的所有示例都涉及使用最小边界矩形(MBR)而不是半径.该表包含大约100万个点,因此需要尽可能高效.

mysql database gis spatial mysql-spatial

9
推荐指数
2
解决办法
1万
查看次数

Mysql函数MBRContains不准确

我有以下POLYGON(在图像中你可以看到它覆盖的区域)

多边形区域

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))
Run Code Online (Sandbox Code Playgroud)

当我执行MBRIntersect,MBRContains以及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)', …
Run Code Online (Sandbox Code Playgroud)

mysql gis point-in-polygon mysql-spatial

9
推荐指数
1
解决办法
988
查看次数

Mysql: ST_Contains 带边框检测多边形是否包含点

我使用mysql空间函数。

我必须了解点是否位于多边形内。
最初我使用过MBRContains,但它的工作方式很奇怪,所以我遇到了以下错误:Mysql function MBRContains is not strict

在此输入图像描述

我的下一步是切换到功能ST_Contains。但我发现,如果我使用多边形(来自多重多边形)顶点作为参数 - 函数返回 false 但我想排除所有多重多边形边界。

聚苯乙烯

我发现函数在哪里:

ST_触摸(g1,g2)

如果两个几何图形的内部不相交,则它们在空间上接触,但其中一个几何图形的边界与另一个几何图形的边界或内部相交

看起来它像我想要的那样工作(在OR条件下ST_contains),但文档对我来说不清楚。你能解释一下两个条件如何同时成立吗
1. 内部不相交
2. 边界与内部相交。

?

问题:

我怎样才能实现我想要的行为?

mysql spatial spatial-query point-in-polygon mysql-spatial

5
推荐指数
1
解决办法
1764
查看次数

在PHP中转换MySQL二进制GEOMETRY字段

我正在开发一个集成mapquest地图和使用mapquest API的应用程序.

此时我想实现以下目的:注册用户必须输入纬度和经度信息,并且在数据库中该信息必须存储为几何类型字段.相反,查看其帐户的用户应该会看到输入的纬度和经度信息.

在早期的简化代码库中,我通过使用MySQL函数AsText和直接在MySQL查询中实现了这一点GeomFromText.但现在我在CodeIgniter上,需要在PHP中进行转换

有什么相当于在PHP MySQL的AsText和GeomFromText功能呢?

php geospatial mysql-spatial

3
推荐指数
1
解决办法
1874
查看次数

MySQL 的空间缓冲区调用中使用的度量单位是什么?

该缓冲区 调用格式化Buffer(g,d)。

g 是几何值(例如点、线串和多边形)。

d 是一段距离。

使用什么计量单位d?米?英里?公里?

mysql mysql-spatial

3
推荐指数
1
解决办法
1417
查看次数

学说 2 空间数据

我在使这个doctrine2扩展工作时遇到了极大的困难。它是https://github.com/djlambert/doctrine2-spatial并且没有很多关于如何创建多边形的文档。我让配置文件正常工作,但我正在努力创建实际的多边形。

array:564 [
   0 => array:2 [
    0 => -73.698313
    1 => 45.546876
   ]
   1 => array:2 [
     0 => -73.69813
     1 => 45.546916
   ]
   2 => array:2 [
     0 => -73.697656
     1 => 45.546899
   ]
    3 => array:2 [
      0 => -73.697413
      1 => 45.546899
   ]

 $poly = new Polygon($array);

[CrEOF\Spatial\Exception\InvalidValueException]  
  Invalid Polygon Point value of type "double"  
Run Code Online (Sandbox Code Playgroud)

这是我得到的实际错误。我尝试创建积分,因为显然它不喜欢双打。

$p = new Point($coord);
$temp[] = $p;
$poly = new Polygon($temp);


[CrEOF\Spatial\Exception\InvalidValueException]                                    
  Invalid Polygon LineString value of type …
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm mysql-spatial

3
推荐指数
1
解决办法
3250
查看次数