# share_bike **Repository Path**: java-sauce/share_bike ## Basic Information - **Project Name**: share_bike - **Description**: 共享单车智能管理系统 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2023-03-24 - **Last Updated**: 2023-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # share_bike_web_spring 1. 开发技术:SpringBoot + SpringMVC + Mybatis + PageHelper + Lombok + JTS + geo-json + Druid + hutool 2. 模板引擎与前端框架:Thymeleaf + Layui + eCharts + jQuery 3. 开源WebGIS开发库:leaflet + Openlayers 4. 数据库支持:MySQL 8.0.23 -空间拓展功能支持 # share_bike共享单车智能管理系统 ## 软件架构 ​ 该系统为单体架构,通过SpringBoot整合Thymeleaf,编写HTML页面,并实现了如下图所示的主要功能模块。 ![输入图片说明](sql/imgs/Web%E7%AB%AF%E7%B3%BB%E7%BB%9F%E5%8A%9F%E8%83%BD-%E7%AE%80%E5%9B%BE-2.png)
图1-系统功能模块简图
## 安装教程与使用说明 1. 安装jdk 1.8 软件,打开cmd窗口,输入java -version命令,如果出现以下信息,表示Java程序运行环境搭建成功; ![输入图片说明](sql/imgs/JDK.png)
图2-Java环境测试
2. 安装MySQL 8数据库软件(建议:用户名设置为:root;密码设置为:root,就无需修改源代码配置文件),并导入sql文件夹下的sql数据库转储文件; 3. 通过git clone git@gitee.com:xi-weidong/share_bike.git命令,克隆当前项目; 4. 将当前项目导入至IDEA中,找到SpringBoot项目启动类,点击运行。 5. 浏览器窗口输入:http://localhost:8011/,即可访问项目。 ![输入图片说明](sql/imgs/%E6%AC%A2%E8%BF%8E%E9%A1%B5%E9%9D%A2.png)
图3-系统欢迎页面
6. 通过默认账户(账户名:admin2,密码:123456)登录系统,进入主界面如下, ![输入图片说明](sql/imgs/%E4%B8%BB%E9%A1%B5.png)
图4-系统主页面
7. 系统主要功能模块如图1所示,可自行尝试。 # MySQL空间拓展简介 ​ MySQL实施了OGC建议的**具有Geometry类型的SQL**环境的一个子集。该术语指的是用一组集合类型扩展的环境。具有几何值的SQL列是作为拥有集合类型的列实施的。该规范描述了SQL几何类型集合,以及作用在这些类型上用于创建和分析几何值的函数。 ​ 简单来说:就是MySQL数据库遵从OGC建议,提供了Geometry类型的空间数据存储字段类型,Geometry类型的字段值为WKT文本类型。 ​ 关于Geometry类型的继承结构,参考官网总结大致如下图所示, ![输入图片说明](sql/imgs/Geometry%E7%B1%BB%E5%9E%8B%E7%BB%93%E6%9E%84.png)
图5-Geometry几何类型结构图示
​ 同时MySQL空间拓展也支持基于Geometry字段的空间数据运算,例如:计算缓冲区、空间求交、数据类型转换、计算最小外接矩形、创建控件索引等等,可参考:https://www.mysqlzh.com/doc/173.html。 ​ 通过具体开发过程,感觉相比MySQL空间拓展,更推荐的还是PostGreSQL数据库的空间拓展PostGIS。PostGIS同样遵循OGC标准,其空间存储字段的继承结构,也与图5基本一致。 # JTS套件(Java Topology Suits)简介 ​ JTS套件(官网地址:http://locationtech.github.io/jts/),同样遵循了OGC标准。JTS是一种开源的Java软件开发库,提供了一种带有基本几何函数的平面几何对象模型。JTS适用于OGC联盟( Open GIS Consortium )发布的SQL简单要素规范( Simple Features Specification)。 ​ JTS用于以矢量为核心的的几何软件,例如:空间信息系统( geographical information systems )。JTS作为一个通用库( general-purpose library),提供了几何计算的算法( algorithms in computational geometry)。 ​ API接口文档:[org.locationtech.jts:jts-core 1.18.0 API](http://locationtech.github.io/jts/javadoc/index.html)。 ​ JTS支持基于以下几何类型的创建和运算, ![输入图片说明](sql/imgs/Geometry%E7%B1%BB%E5%9E%8B%E7%BB%93%E6%9E%84.png) ​ JTS支持的几何操作(Geometry Operations)总结如下, 1. 拓扑验证( Topological validity) 2. 面积和长度/周长(Area and Length/Perimeter ) 3. 几何距离和包含推断([Distance between geometries](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#distance(org.locationtech.jts.geom.Geometry)) and [ isWithinDistance](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#isWithinDistance(org.locationtech.jts.geom.Geometry, double)) predicate ) 4. 基于九交模型的空间推断(Egenhofer DE-9IM model),包括: 1. 1. [contains](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#contains(org.locationtech.jts.geom.Geometry)), [ within ](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#within(org.locationtech.jts.geom.Geometry)) 2. [ covers](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#covers(org.locationtech.jts.geom.Geometry)), [ coveredBy](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#coveredBy(org.locationtech.jts.geom.Geometry)) 3. [ intersects](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#intersects(org.locationtech.jts.geom.Geometry)), [ disjoint](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#disjoint(org.locationtech.jts.geom.Geometry)) 4. [ crosses](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#crosses(org.locationtech.jts.geom.Geometry)) 5. [ overlaps](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#overlaps(org.locationtech.jts.geom.Geometry)) 6. [ touches](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#touches(org.locationtech.jts.geom.Geometry)) 7. [ equals](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#equals(org.locationtech.jts.geom.Geometry)) 8. 以及操作返回类型IntersectionMatrix提供的相关操作。 5. 叠加功能( Overlay functions )包括: 1. 1. 1. [ intersection](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#intersection(org.locationtech.jts.geom.Geometry)), 2. [ difference](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#difference(org.locationtech.jts.geom.Geometry)), 3. [ union](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#union(org.locationtech.jts.geom.Geometry)), 4. [ symmetric difference](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#symDifference(org.locationtech.jts.geom.Geometry)) 5. [ unary union](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#union()), providing fast union of geometry collections 6. 缓冲区计算([Buffer](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/Geometry.html#buffer(double)) computation ),也称为 7. 几何简化([Geometric simplification](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/simplify/package-summary.html) including the [ Douglas-Peucker](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/simplify/DouglasPeuckerSimplifier.html) algorithm and [ topology-preserving simplification](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/simplify/TopologyPreservingSimplifier.html) ),道格拉斯扑克算法、 8. 几何点加密(Geometric [densification](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/densify/Densifier.html)) 9. 线性参考([Linear referencing](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/linearref/package-summary.html)) 10. 输入/输出(Input/Output) - WKT (Well-Known Text) [reading](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/io/WKTReader.html) and [writing](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/io/WKTWriter.html) - WKB (Well-Known Binary) [reading](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/io/WKBReader.html) and [writing](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/io/WKBWriter.html) - GML(Geography Markup Language) Version 2 [reading](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/io/gml2/GMLReader.html) and [writing](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/io/gml2/GMLWriter.html) - Java Swing/AWT Shape [writing](http://locationtech.github.io/jts/javadoc/org/locationtech/jts/awt/package-summary.html) 其它:参见http://locationtech.github.io/jts/jts-features.html。 # JTS与MySQL空间拓展整合开发 ​ 基于SpringBoot + SpringMVC + MyBatis搭建起来的WebGIS单体项目,简单地通过pom.xml文件引入JTS,并不能有效完成MySQL空间扩展类型geometry和JTS提供的Geometry类之间的合理转换,原因:MyBatis在工作时,无法找到有效可用的TypeHandler类型处理器,因此,需要自定义TypeHandler类型处理器。 ​ 至于如何有效地定义,可以参考源码包handler包下的源代码。 #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)