mysql如何实现根据经纬度判断某一个坐标是否在一个多边形区域范围内

这篇具有很好参考价值的文章主要介绍了mysql如何实现根据经纬度判断某一个坐标是否在一个多边形区域范围内。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要根据经纬度判断一个坐标是否在一个多边形区域内,MySQL提供了几种函数来处理地理空间数据,其中包括用于处理多边形区域的函数。

mysql如何实现根据经纬度判断某一个坐标是否在一个多边形区域范围内,mysql,坐标,区域查询,ST_Within函数

1.创建一个包含多边形区域的表:

首先,创建一个表来存储多边形区域。可以使用ST_GeomFromText函数将多边形的坐标转换为地理空间对象。我们给他插入两条数据,默认id第一条为1,第二条id为2。在下边创建表的SQL语句中,大写的'POLYGON'是一个函数,用于创建一个地理空间对象,表示一个多边形。这个函数需要传入一个坐标集,该坐标集定义了多边形的顶点。在下边SQL中,'POLYGON((0 0, 0 100, 100 100, 100 0, 0 0))'创建了一个四边形,它的顶点坐标分别是(0,0),(0,100),(100,100)和(100,0),最后回到原点(0,0)。

CREATE TABLE polygon_table (  
    id INT AUTO_INCREMENT PRIMARY KEY,  
    polygon GEOMETRY NOT NULL  
);  
  
INSERT INTO polygon_table (polygon) VALUES  
(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'));

INSERT INTO polygon_table (polygon) VALUES  
(ST_GeomFromText('POLYGON((0 0, 0 100, 100 100, 100 0, 0 0))'));

2.创建一个包含要检查坐标点的表:

创建一个表来存储你要检查的坐标,也给他插入两条数据,id为1和2

CREATE TABLE coordinate_table (  
    id INT AUTO_INCREMENT PRIMARY KEY,  
    coordinate GEOMETRY NOT NULL  
);  
  
INSERT INTO coordinate_table (coordinate) VALUES  
(ST_GeomFromText('POINT(5 5)'));

INSERT INTO coordinate_table (coordinate) VALUES  
(ST_GeomFromText('POINT(12 14)'))

3.使用ST_Within函数检查坐标是否在多边形区域内

我们可以使用ST_Within函数来检查一个坐标是否在一个多边形区域内。这个函数返回1表示坐标在多边形区域内,返回0表示不在。下面是一个示例查询,可以判断coordinate_table表中id为2的点位是否在polygon_table表中id为1的区域范围内:

SELECT ST_Within(c.coordinate, p.polygon) AS within_polygon  
FROM coordinate_table c  
JOIN polygon_table p ON c.id = 2 AND p.id = 1;

 如果要查询的坐标点没有存储在表中,而是通过参数的方法传入,想要确认传入的坐标点是否在多边形区域内,我们也可以通过以下方式来查询,结果同样返回1表示坐标在多边形区域内,返回0表

示不在

SELECT ST_Within(ST_GeomFromText('POINT(5 11)'), polygon) AS within_polygon  
FROM polygon_table  
WHERE id = 1;

 4.使用ST_Within函数检查坐标是否在圆形区域内

SELECT *  
FROM coordinate_table 
WHERE ST_Distance(coordinate, POINT(lng, lat)) < 3  
  AND ST_Within(POINT(lng, lat), ST_Buffer(coordinate, 3))

 这个查询会返回所有的距离给定坐标点小于3公里且在给定坐标点的3公里圆形区域内的记录

 5.查询GEOMETRY 类型的值

注意,如果用普通的方式查询GEOMETRY 类型的值,结果将是乱码的值,所以需要将类型转换一下才可以变成我们可读的类型

SELECT
            ST_AsText(polygon) as polygon
        FROM
            table_name

6.mapper.xml中,插入坐标的SQL写法

mapper.xml文件中,可以在mapper.xml中按照以下方式编写:

<mapper namespace="com.example.demo.mapper.PolygonMapper">  
    <insert id="insertPolygon" parameterType="java.lang.String">  
        INSERT INTO polygon_table (polygon) VALUES (ST_GeomFromText('#{polygon}'))  
    </insert>  
</mapper>

其中,#{polygon} 的数据类型我们可以使用String类型来传入文章来源地址https://www.toymoban.com/news/detail-712514.html

到了这里,关于mysql如何实现根据经纬度判断某一个坐标是否在一个多边形区域范围内的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高德根据经纬度,查询所在位置信息

    根据JSON对象获取信息 String cityInfo = GaoDeUtils.getAddressByJWD(request.getClog(), request.getClat()); JSONObject resultSucces = JSONObject.parse(cityInfo); JSONObject addr=resultSucces.getJSONObject(“regeocode”); AddressComponent addressComponent = JSON.parseObject(JSON.toJSONString(addr.get(“addressComponent”)), AddressComponent.class); 创

    2024年02月08日
    浏览(49)
  • 高德地图根据经纬度获取地址信息

    主要是使用高德里面 地理编码与逆地理编码 的 getAddress 这个方法, 根据逆向地理编码:将地理坐标(经纬度)转换成地址描述信息,对应为AMap.Geocoder的getAddress方法。 具体使用的代码为 最后看效果 这是传的经纬度与解析出来的地理位置 如果需要正向解析将地理位置变成经

    2024年02月11日
    浏览(50)
  • NC文件根据经纬度提取点上数值

    Hello,Hello,Hello,大家好,时隔上一次更新已经很久了,今天主要和大家分享一组简单的代码,来提取NC文件中某一点的数值! 本次实例数据依旧使用喜闻乐见的NCEP数据,数据使用的是多层气温。或者可以直接点击这里下载 这个就是下载好的数据: 大家可以看一下,这个数

    2024年02月05日
    浏览(48)
  • Python根据经纬度在地图上显示(folium)

    1、location地图中心点 经纬度,list 或者 tuple 格式,顺序为 latitude(纬度), longitude(经度) 2、zoom_start地图等级 缩放值,默认为 10,值越大比例尺越小,地图放大级别越大 3、tiles 显示样式,默认*‘OpenStreetMap’*,也就是开启街道显示;也有一些其他的内建地图样式,如’Stamen T

    2024年02月14日
    浏览(54)
  • Java根据坐标经纬度计算两点距离(5种方法)、校验经纬度是否在圆/多边形区域内的算法推荐

    目录 前言 一、根据坐标经纬度计算两点距离(5种方法) 1.方法一 2.方法二 3.方法三 4.方法四 5.方法五 5.1 POM引入第三方依赖 5.2 代码 6.测试结果对比 二、校验经纬度是否在制定区域内 1.判断一个坐标是否在圆形区域内 2.判断一个坐标是否在一个多边形区域内 3.结果 总结   

    2024年02月10日
    浏览(83)
  • 根据手机指南针经纬度在地图上找到其位置

    使用手机指南针获取经纬度,然后在地图上找到位置。 1、使用手机指南针获取经纬度: 2、将度分秒转换为度: 分/60+秒/3600+整数度数,得到以度为单位的数值 手机经纬度:117.1291666,31.842777 3、坐标系转换: 地图坐标系转换 - 在线工具 输入手机经纬度:117.1291666,31.842777 得到

    2024年02月09日
    浏览(39)
  • Java调用高德地图API根据详细地址获取经纬度

    访问高德开放平台https://lbs.amap.com/ 登录后,在控制台中创建一个应用,获取生成的应用key。这个key将用于访问高德地图API。   您可以使用Java中的 HttpURLConnection 或 HttpClient 等工具发送HTTP请求到高德地图API,并传递参数以获取经纬度信息。以下是一个使用 HttpURLConnection 的示例

    2024年02月05日
    浏览(52)
  • uniapp结合Canvas+renderjs根据经纬度绘制轨迹(二)

    ​ 根据官方建议要想在 app-vue 流畅使用 Canvas 动画,需要使用 renderjs 技术,把操作 canvas 的js逻辑放到视图层运行,避免逻辑层和视图层频繁通信。 这里呢结合 renderjs 技术实现绘制轨迹图形。 你可能需要先了解 renderjs 如何数据通讯:renderjs 与 app-vue之间数据交互 html中使用

    2024年02月11日
    浏览(40)
  • 百度开发者平台API地理编码,根据地址获取经纬度

    地理编码 | 百度地图API SDK (baidu.com) 原始csv 结果: 字段名称: 社区名称、经度、纬度、看下表吧。 地理编码 | 百度地图API SDK (baidu.com) 或者参考这篇博文: http://t.csdn.cn/AghZk

    2024年02月15日
    浏览(38)
  • ElasticSearch - 根据经纬度,简单搜索指定距离范围内的数据

    ES的地图检索方式 ES支持的地图检索方式有以下几种; geo_distance geo_bounding_box geo_polygon 1、 geo_distance :直线距离检索,如给定点A,要求返回地图上距离点A三千米的商家(点外卖场景) 2、查找索引内距离北京站(116.433733,39.908404)3000米内的点 geo_distance涉及的参数如下 location:确

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包