# 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页面,并实现了如下图所示的主要功能模块。

图1-系统功能模块简图
## 安装教程与使用说明
1. 安装jdk 1.8 软件,打开cmd窗口,输入java -version命令,如果出现以下信息,表示Java程序运行环境搭建成功;

图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/,即可访问项目。

图3-系统欢迎页面
6. 通过默认账户(账户名:admin2,密码:123456)登录系统,进入主界面如下,

图4-系统主页面
7. 系统主要功能模块如图1所示,可自行尝试。
# MySQL空间拓展简介
MySQL实施了OGC建议的**具有Geometry类型的SQL**环境的一个子集。该术语指的是用一组集合类型扩展的环境。具有几何值的SQL列是作为拥有集合类型的列实施的。该规范描述了SQL几何类型集合,以及作用在这些类型上用于创建和分析几何值的函数。
简单来说:就是MySQL数据库遵从OGC建议,提供了Geometry类型的空间数据存储字段类型,Geometry类型的字段值为WKT文本类型。
关于Geometry类型的继承结构,参考官网总结大致如下图所示,

图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支持基于以下几何类型的创建和运算,

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/)