mysql谷歌地图查询存储在用户位置自定义绘图工具中?

mysql谷歌地图查询存储在用户位置自定义绘图工具中?,mysql,google-maps,maps,Mysql,Google Maps,Maps,我正在使用这个工具在地图中绘制位置,我正在尝试获取覆盖用户位置的位置 例如: 用户不在粉红色或橙色形状内。(位置) 用户在第二个形状内(橙色位置) 每个形状都有long/lat数组,我已经将它们添加到places表中,例如橙色形状数组是: cursel: polygon [object Object]; pos: undefined ; path: [ 53.750107,-1.459851 , 53.750842,-1.461568 , 53.749954,-1.461825 , 53.7

我正在使用这个工具在地图中绘制位置,我正在尝试获取覆盖用户位置的位置

例如:

用户不在粉红色或橙色形状内。(位置)

用户在第二个形状内(橙色位置)

每个形状都有long/lat数组,我已经将它们添加到places表中,例如橙色形状数组是:

cursel: polygon [object Object]; pos: undefined ; path: [ 53.750107,-1.459851 , 53.750842,-1.461568 , 53.749954,-1.461825 , 53.749751,-1.464272 , 53.749117,-1.466203 , 53.748812,-1.469336 , 53.742493,-1.466074 , 53.738686,-1.46337 , 53.739143,-1.4538 , 53.740539,-1.45247 , 53.746985,-1.452899 , 53.749345,-1.455903 , 53.749218,-1.458092 , 
用户位置为:53.746858,-1.46513

**放置表格记录:*

placeId | long  | lat 
1 | 53.750919 | -1.471567
1 | 53.749675 | -1.473541
1 | 53.749066 | -1.472383
........
2 | 53.750107 | -1.459851
2 | 53.750842 | -1.461568
2 | 53.749954 | -1.461825
2 | 53.749751 | -1.464272
.......
我正在做这个查询:

select * from places where lat > '$lat' AND long < '$long'
从lat>“$lat”和long<“$long”的位置选择*
以下是表格结构:

//Place Name and ID
CREATE TABLE IF NOT EXISTS `place` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name ` varchar(70) NOT NULL
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

//Place Long/Lat borders <<-- here where i store the Array of long/lat of the place after it being draw  
CREATE TABLE IF NOT EXISTS `places` (
  `id` int(10) unsigned NOT NULL,
  `lat ` varchar(70) NOT NULL,
  `long ` varchar(70) NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
//地名和ID
如果不存在“位置”,则创建表(
`id`int(10)无符号非空自动增量,
`name`varchar(70)不为空
主键(`id`)
)ENGINE=MyISAM默认字符集=utf8自动增量=1;
//放置长/横向边框<代码>从横向>“$Lat”和纵向<“$Long”的位置选择*
仅检查是否位于[$lat$long]的西北方向。所以,它,或者它的任何变体,对于这个问题可能是无用的

多边形
上建立
空间
索引

使用
WHERE stu in(用户点,多边形)
查看用户是否在多边形中

如果您需要更多帮助,请提供
SHOW CREATE TABLE
,以便我们可以在上下文中讨论它。

从lat>'$lat'和long<$long'的位置选择*
仅检查是否位于[$lat$long]的西北方向。所以,它,或者它的任何变体,对于这个问题可能是无用的

多边形
上建立
空间
索引

使用
WHERE stu in(用户点,多边形)
查看用户是否在多边形中


如果您需要更多帮助,请提供
SHOW CREATE TABLE
,以便我们可以在上下文中讨论它。

由于您有一个
places
表,其中包含每个
place
的所有位置,您只需从
places
表中检索用户位置即可确定正确的位置

SELECT id, name 
FROM place 
WHERE id = (SELECT id FROM places WHERE lat = '$lat' AND long = '$long');
如果此用户未定位到
位置
表中的某个位置,您将得到一个空的结果集


此外,为了获得更好的性能,我建议您将
varchar(70)
替换为
float
double
,并为每个位置创建一个索引,例如
唯一键位置(lat,long)

,因为您有一个
places
表,其中包含每个
位置的所有位置,您只需从
places
表中检索用户位置即可找到正确的位置

SELECT id, name 
FROM place 
WHERE id = (SELECT id FROM places WHERE lat = '$lat' AND long = '$long');
如果此用户未定位到
位置
表中的某个位置,您将得到一个空的结果集


此外,为了获得更好的性能,我建议您将
varchar(70)
替换为
float
double
,并为每个位置创建索引,例如@Rick James使用

表架构:

添加地点记录:

查询语句可能如下所示:


正如@Rick James使用

表架构:

添加地点记录:

查询语句可能如下所示:



相关问题:相关问题:我有两个表,一个是关于地名和增量id的,第二个是关于表1的地名边界和地名id的,我将更新问题。我将根据您的要求更新问题,什么是
多边形
?这是我第一次使用mysqlGEO@Jack-你说你有一个
多边形
;我编造了列名(
多边形
)。@Jack-两个表的比例为1:1的关系很少有用。谢谢你的建议,我想这就是我需要使用的
多边形
,你能更新你的答案吗?我必须在我的数据库结构中更改什么,以及如何查询它?我想我搞错了。我有两个表,一个是关于地名和增量id的,第二个是关于表1的地名边界和地名id的。我会更新问题。我会用你的要求更新问题,什么是多边形?这是我第一次使用mysqlGEO@Jack-你说你有一个
多边形
;我编造了列名(
多边形
)。@Jack-两个表的比例为1:1的关系很少有用。谢谢你的建议,我想这就是我需要使用的
多边形
,你能更新你的答案吗?我必须在我的数据库结构中更改什么,以及如何查询它?我想我弄错了,
=
无法工作。每一个地方都有多个长/拉特是的,我知道。但每个长lat对必须与唯一的位置id关联。并且您希望通过特定的长lat对获取位置id。对吗?请尝试我在问题中提供的绘图工具,看看它是如何绘制区域的,我想要mysql查询,它将通过用户long/loat获取位置。如果用户在该区域内,好的,我今天稍后会尝试。
=
将不起作用。每一个地方都有多个长/拉特是的,我知道。但每个长lat对必须与唯一的位置id关联。并且您希望通过特定的长lat对获取位置id。是吗?请尝试我在问题中提供的绘图工具,看看它是如何绘制区域的,我想要mysql查询,它将通过用户长/长获得位置,如果用户在该区域内,好的,我今天稍后会尝试。创建表,插入和查询,完美答案+感谢u创建表,插入和查询,完美答案+感谢u
CREATE TABLE IF NOT EXISTS `place` (
  `id`         int(10) unsigned   NOT NULL AUTO_INCREMENT,
  `name`       varchar(70)        NOT NULL,
  `geometry`   polygon            NOT NULL,

  PRIMARY KEY (`id`),
  SPATIAL INDEX `si_place_geometry` (`geometry`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
INSERT INTO `place`(
       `name`,
       `geometry`)
VALUES (
       'area01',
        POLYGON(
          LINESTRING(
            POINT(53.750107, -1.459851), POINT(53.750842, -1.461568),
            POINT(53.749954, -1.461825), POINT(53.749751, -1.464272),
            POINT(53.749117, -1.466203), POINT(53.748812, -1.469336),
            POINT(53.742493, -1.466074), POINT(53.738686, -1.46337 ),
            POINT(53.739143, -1.4538  ), POINT(53.740539, -1.45247 ),
            POINT(53.746985, -1.452899), POINT(53.749345, -1.455903),
            POINT(53.749218, -1.458092), POINT(53.750107, -1.459851))
        )
       );
SELECT *
  FROM `place`
 WHERE ST_Within(POINT(53.746858, -1.46513), `geometry`);

*************************** 1. row ***************************
      id: 1
    name: area01
geometry: ...binary data...
1 row in set (0.00 sec)