JSP(项目):污染举报系统
作者:互联网
项目地址:https://github.com/shao12138/Pollution-reporting-system
1,项目简介
通过收集在手机定位模式下拍摄的照片,解析其中的经纬度,然后标注到百度地图并集中化展示,实现污染举报仅需上传图片即可。
2,需求分析
河流污染举报系统的主要角色主要有三种:普通用户(游客),注册用户,系统管理员。不同的角色具有不同的权限,各角色需求分析如下:
- 普通用户:主页访问、资讯查看,留言公告,污染查看,下载移动端。
- 注册用户:主页访问、资讯查看,留言查看,污染查看,下载移动端,留言,污染举报。
- 系统管理员:用户管理、公告管理,留言管理,污染管理。
3,数据库设计
mapuser表:用于存储用户的信息,分别代表:id、账号、昵称、密码、身份证、邮箱、电话、是否是管理员(1是/0不是)。
CREATE TABLE `mapuser` ( `id` int(11) NOT NULL AUTO_INCREMENT, `number` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `personnumber` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `tellnumber` varchar(255) DEFAULT NULL, `kind` varchar(255) DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
mappic表:用于存储污染举报信息,分别代表:id、账号(举报人)、经度、纬度、图片存储的本地地址。
CREATE TABLE `mappic` ( `id` int(11) NOT NULL AUTO_INCREMENT, `number` int(11) DEFAULT NULL, `lat` varchar(255) DEFAULT NULL, `log` varchar(255) DEFAULT NULL, `url` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
mapmessage表:用于存储用户讨论留言内容,分别代表:id、账号(留言人)、昵称、留言信息。
CREATE TABLE `mapmessage` ( `id` int(11) NOT NULL AUTO_INCREMENT, `number` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `message` varchar(2000) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
mapnotice表:用于存储公告信息,分别代表:id、标题、日期、内容。
CREATE TABLE `mapnotice` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `date` varchar(255) DEFAULT NULL, `content` varchar(2000) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
4,核心算法——文件上传和解析经纬度
需要引入:
<form action="InsertJubao" name="form1" id="form1" method="post" enctype="multipart/form-data"> <fieldset style="width: 400px; margin: 0px auto; color: red;"> <table class="table3"> <tr> <td style="font-size: 25px; color: green;">照片:</td> <td> </td> <td><input type="file" id="filePath" name="image" required="required" style="font-size: 20px;color:blue;" value="选择"/></td> </tr> <tr> <td><input type="reset" value="重置" style="width: 80px; height: 30px; color: blue; font-weight: bold; font-size: 20px; opacity: 0.7;"> </td> <td> </td> <td><input type="submit" name="Submit" value="上 传" style="width: 80px; height: 30px; color: blue; font-weight: bold; font-size: 20px; opacity: 0.7;"> </td> </tr> </table> </fieldset> </form>
@WebServlet(name = "InsertJubao", urlPatterns = {"/InsertJubao"}) @MultipartConfig public class InserJubao extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html;charset=UTF-8"); req.setCharacterEncoding("UTF-8"); double lat = 0.0; double log = 0.0; Date date = new Date(); String pat2 = "yyyy-MM-dd-HH-mm-ss-SSS";//模板2 SimpleDateFormat sdf2 = new SimpleDateFormat(pat2); String nowDate = sdf2.format(date); PrintWriter out = res.getWriter(); //获取上传文件 Part part = req.getPart("image"); //获取包含文件名的字符串 String fileNameInfo = part.getHeader("content-disposition"); //提取上传文件的原始文件名 String fileName = fileNameInfo.substring(fileNameInfo.indexOf("filename=\"") + 10, fileNameInfo.length() - 1); String path = getServletContext().getRealPath("/upload/"); part.write( path + nowDate + "-" + fileName); File file = new File( path + nowDate + "-" + fileName); try { Metadata metadata = JpegMetadataReader.readMetadata(file); for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { if (tag.getTagName().equals("GPS Latitude")) { lat = change(tag.getDescription()); } else if (tag.getTagName().equals("GPS Longitude")) { log = change(tag.getDescription()); } } } String url = "/upload/" + nowDate + "-" + fileName; mapDao dao = (mapDao) getServletContext().getAttribute("map"); String sql = "insert into mappic(number,lat,log,url)values(?,?,?,?)"; try { dao.insert(sql, ((User) req.getSession().getAttribute("user")).getNumber(), lat, log, url); } catch (Exception e) { e.printStackTrace(); } out.print("上传成功!"); res.setHeader("refresh", "2;wuran.jsp"); } catch (JpegProcessingException e) { out.print("皮?没有经纬度!"); res.setHeader("refresh", "2;jubao.jsp"); e.printStackTrace(); } } public double change(String temp) { String du = "0"; if (temp.indexOf("°") != -1) { du = temp.substring(0, temp.indexOf("°")); } String fen = "0"; if (temp.indexOf("°") != -1) { fen = temp.substring(temp.indexOf("°") + 1, temp.indexOf("'")); } String miao = "0"; if (temp.indexOf("'") != -1) { miao = temp.substring(temp.indexOf("'") + 1).replace("\"", ""); } double a, b, c = 0.0; a = Double.parseDouble(du); b = Double.parseDouble(fen) / 60; c = Double.parseDouble(miao) / 60 / 60; return a + b + c; } }
标签:varchar,String,DEFAULT,id,污染,JSP,NULL,举报,255 来源: https://blog.csdn.net/qq_42192693/article/details/113415179