MySQL Geometry的使用 —— 任意多边形范围搜索

地图相关服务选择的是四维图新
本文记录的是,地图上任意多边形搜索,后端逻辑和SQL(后端),前端相关接口服务可看 MineMap for 2D

一、搜索效果

自定义选择多边形,搜索出范围内的数据

二、搜索处理逻辑

  • 前端调用地图服务接口,获得多边形的点坐标数据,数据例如:[1 1,2 2,3 3,4 4,1 1]
  • 后端获得范围坐标数据,同时取得范围坐标的2个极点(坐标最大最小,可先通过Double类型的经纬度大小判断,将搜索范围缩小),使用Geometry包含函数 ST_CONTAINS(),获得符合函数坐标的数据
  • 将搜索结果返给前端

三、SQL

假设点坐标 (103,35)、(104,36)为多边形点坐标极点,即所有符合要求范围内的数据,必定在极点之内

select m.name, ST_AsGeoJSON(m.geometry) as geometry
FROM mapdata m
WHERE jd < 104 and jd > 103 and wd < 36 and wd > 35
	and ST_CONTAINS(ST_POLYGONFROMTEXT('POLYGON(103 35,104 35,104 36,103 36,103 35)'),m.geometry)

四、Java代码中部分工具类

String ssfwStr= net.sf.json.getJSONArray("搜索范围坐标,json格式");
List<List<Double>> maxPolygon = new getMaxPolygonDate().getMaxPolygonByJsonObject(ssfwStr)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你需要在Java使用MySQLGeometry类型字段,可以使用MySQL提供的Java SDK - MySQL Connector/J,它是Java访问MySQL数据库的官方驱动。 MySQL Connector/J提供了对Geometry类型字段的支持,可以将Geometry类型的数据转换为Java的对象,例如Point、LineString、Polygon等等。对于Geometry类型的数据的操作,可以使用JTS Topology Suite库进行处理,也可以使用MySQL提供的Spatial Extensions的函数来进行处理。 以下是使用MySQL Connector/J和JTS Topology Suite来读取Geometry类型字段的示例代码: ```java import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.io.ParseException; import com.vividsolutions.jts.io.WKTReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class GeometryExample { public static void main(String[] args) { try { // 加载MySQL驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 连接MySQL数据库 Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mydb?useSSL=false", "root", "password"); // 执行查询语句,查询Geometry类型的字段 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT geom FROM mytable WHERE id=1"); // 读取查询结果 if (rs.next()) { // 将Geometry类型的数据转换为JTS Geometry对象 String wkt = rs.getString(1); Geometry geom = new WKTReader().read(wkt); // 对Geometry对象进行操作 double area = geom.getArea(); System.out.println("Geometry area: " + area); } // 关闭数据库连接 rs.close(); stmt.close(); conn.close(); } catch (ClassNotFoundException | SQLException | ParseException e) { e.printStackTrace(); } } } ``` 以上示例代码演示了如何使用MySQL Connector/J和JTS Topology Suite来读取Geometry类型字段并进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值