其他分享
首页 > 其他分享> > JSP(项目):污染举报系统

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>&nbsp;&nbsp;</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>&nbsp;&nbsp;</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