shp数据入库、出库、可视化

article/2025/10/7 23:49:51

shp数据入库、出库、可视化

今天给npy写了次作业,由于各种原因,不能用我用了很久的SSM或者SpringBoot框架,只用了最原始的servlet+jsp,然后我发现…自己已经不太会用了,写这个博客记录一下整套流程~

首先,作业的大致要求是将几何数据导入数据库,然后进行查询,使用地图可视化库进行可视化。因此,本次作业决定使用中国地图shp数据,导入PostgreSQL数据库,接着查询数据,最后使用Openlayers对查询到的数据进行可视化。

技术选型

PostgreSQL + Servlet + jsp + Openlayers

一 shp数据入库

首先使用命令行将shp数据转化为sql语句:

shp2pgsql "shp路径" "数据库名"> "sql路径"

如:

shp2pgsql F:/BoundaryChn2_4p.shp boundary> F:/boundary.sql

然后在pgadmin中执行该sql文件即可。

二 搭建servlet程序

本次使用maven搭建web程序,文件结构如下:
在这里插入图片描述

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.tm</groupId><artifactId>webgis</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.12</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--Tomcat引用--><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><version>[9.0.20,)</version><scope>provided</scope></dependency></dependencies><build><finalName>MWebgis</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>7</source><target>7</target></configuration></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
</project>

不赘述,文末有github链接,可自行查看。

三 数据库查询

1 数据库配置:

useSSL=false
verifyServerCertificate=false
url=jdbc:postgresql://ip:port/database
driver=org.postgresql.Driver
user=**** # 改成自己的
password=**** # 改成自己的

2 数据库链接类:

public class DBHelper {static String url;static Properties pro = new Properties();static{InputStream in = DBHelper.class.getClassLoader().getResourceAsStream("config.properties");try {pro.load(in);url = pro.getProperty("url");String driver = pro.getProperty("driver");Class.forName(driver);System.out.println("驱动器加载成功");} catch (IOException e) {System.out.println("驱动器加载失败");} catch (ClassNotFoundException e) {System.out.println("驱动器加载失败");}}public static Connection getConnection() throws SQLException{//创建数据库连接Connection con = DriverManager.getConnection(url, pro);return con;}
}

3 数据库查询方法,返回为geojson:

public String getBoundaryChn2PShp() {String result ="";String sql = "SELECT row_to_json(fc) FROM ( SELECT 'FeatureCollection' As type,array_to_json(array_agg(f)) As features FROM (SELECT 'Feature' As type, ST_AsGeoJSON(lg.geom)::json As geometry ,gid As properties FROM boundarychn2_4p As lg ) As f )  As fc";try (Connection conn = DBHelper.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);ResultSet rs = pstmt.executeQuery();) {if (rs.next()) {result = rs.getString(1);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}

四 Openlayers数据可视化

1 index.js

var image = new ol.style.Circle({radius: 5,fill: null,stroke: new ol.style.Stroke({color: 'red', width: 1})
});var styles = {'Point': new ol.style.Style({image: image}),'LineString': new ol.style.Style({stroke: new ol.style.Stroke({color: 'green',width: 1})}),'MultiLineString': new ol.style.Style({stroke: new ol.style.Stroke({color: 'green',width: 1})}),'MultiPoint': new ol.style.Style({image: image}),'MultiPolygon': new ol.style.Style({stroke: new ol.style.Stroke({color: 'yellow',width: 1}),fill: new ol.style.Fill({color: 'rgba(255, 255, 0, 0.1)'})}),'Polygon': new ol.style.Style({stroke: new ol.style.Stroke({color: 'blue',lineDash: [4],width: 3}),fill: new ol.style.Fill({color: 'rgba(0, 0, 255, 0.1)'})}),'GeometryCollection': new ol.style.Style({stroke: new ol.style.Stroke({color: 'magenta',width: 2}),fill: new ol.style.Fill({color: 'magenta'}),image: new ol.style.Circle({radius: 10,fill: null,stroke: new ol.style.Stroke({color: 'magenta'})})}),'Circle': new ol.style.Style({stroke: new ol.style.Stroke({color: 'red',width: 2}),fill: new ol.style.Fill({color: 'rgba(255,0,0,0.2)'})})
};var styleFunction = function(feature) {return styles[feature.getGeometry().getType()];
};var geojsonObject = {};
$.ajax({type : 'post', //传输类型async : false, //同步执行url : 'shp', //web.xml中注册的Servlet的url-patterndataType : 'json', //返回数据形式为jsonsuccess : function(result) {geojsonObject = resultvar vectorSource = new ol.source.Vector({features: (new ol.format.GeoJSON()).readFeatures(geojsonObject,{featureProjection: 'EPSG:3857'})});var vectorLayer = new ol.layer.Vector({source: vectorSource,style: styleFunction});var map = new ol.Map({layers: [new ol.layer.Tile({source: new ol.source.OSM()}),vectorLayer],target: 'map',view: new ol.View({center: [116, 39],zoom: 4})});},error : function(errorMsg) {alert("加载数据失败");}
});

2 index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<c:set var="path" value="${pageContext.request.contextPath }"/>
<head><title>index</title><script>var path = "${path}";</script><style>*{margin: 0;padding: 0;}.map {width: 100vw;height: 100vh;}</style>
</head>
<body>
<div id="map" class="map"></div>
<script src="${path}/lib/jquery-3.4.1.js"></script>
<script src="${path}/ol/ol.js"></script>
<link rel="stylesheet" href="${path}/ol/ol.css">
<script src="${path}/js/index.js"></script>
</body>
</html>

五 效果

在这里插入图片描述

六 github

github


http://chatgpt.dhexx.cn/article/4UMZUCBn.shtml

相关文章

Shp数据格式说明

复制于维基百科&#xff1a;https://zh.wikipedia.org/wiki/Shapefile&#xff0c;因为的确经常会把数据格式的一些细节忘记&#xff0c;所以复制过来&#xff0c;以供后续有必要的时候&#xff0c;查缺补漏。 一、简介 ESRI Shapefile&#xff08;shp&#xff09;&#xff0…

gis利器之Gdal(二)shp数据读取

本文将简单介绍shp数据的基本知识&#xff0c;以java语言为例&#xff0c;介绍如何基于java调用gdal完成对shp数据的解析&#xff0c;主要包括空间信息解析、属性信息解析、空间参考信息解析&#xff0c;bbox信息解析等等。 shp文件是一种矢量图形存储文件&#xff0c;可以用于…

全国矢量shp数据:行政区划,县界,道路,河流....都可下载

前段时间我们分享过一次全国矢量数据&#xff0c;包含道路&#xff0c;水系&#xff0c;铁路等等 不过第二天我们就把文章删除了 以至于后台不少留言问为啥删除 主要原因是数据精度稍微有点差&#xff08;部分数据偏差过大&#xff09; 不过 今天我们来重新分享 这次本着授…

为什么不太建议你通过 Python 去找工作?

有小伙伴问&#xff1a;我是一名大专生&#xff0c;学校把 Python 做为主语言教给我们&#xff0c;但是我也去了解过&#xff0c;其实 Python 门槛挺高的&#xff0c;所以我在自学 Java&#xff0c;但是我现在并不清楚到底要不要全心的去学 Java&#xff0c;学校里的课程也越来…

学Python真的好找工作吗?资深程序员为你解答

找工作难不难&#xff0c;主要还是看你自身的经验以及个人能力&#xff0c;如果决定学的话就要仔细去学习&#xff0c;而不是分散学习&#xff0c;这样既浪费了你的学习时间&#xff0c;又没有学到东西&#xff0c;尤其是大三即将毕业的同学,你只有其实不到一年的时间去学习,正…

【转行python】:简要说说python最好找工作的三个方向

前言 目前来说python最好找工作的三个方向&#xff1a;爬虫、数据分析和web开发。 之前我跟一些转行成功的朋友交流过&#xff0c;有一个朋友印象深刻&#xff0c;跟大家聊一下&#xff0c;朋友A某211研究生毕业&#xff0c;毕业后到了一家航空相关的企业上班&#xff0c;上了…

学Python好找工作吗?需要满足Python岗位哪些要求?

学Python好找工作吗&#xff1f;需要满足哪些要求&#xff1f;随着Python的火爆&#xff0c;国内Python的岗位也随之增多&#xff0c;只要技术能力强项目经验充足&#xff0c;找到工作不是问题。即使是一些二线城市&#xff0c;Python的薪资待遇也比较好。 一、学Python好找工作…

学习Python编程好找工作吗?

说起编程语言&#xff0c;不少人都会推荐学习Python&#xff0c;但很多人对Python不太了解&#xff0c;所以比较好奇“学习Python编程是否好找工作”&#xff0c;关于这个问题&#xff0c;小编通过下文为大家详细解答一下。 从市场情况来讲&#xff0c;Python职位比较多&…

学Python真的好找工作吗?工作多年的程序员为你解答

找工作难不难&#xff0c;主要还是看你自身的经验以及个人能力&#xff0c;如果决定学的话就要仔细去学习&#xff0c;而不是分散学习&#xff0c;这样既浪费了你的学习时间&#xff0c;又没有学到东西&#xff0c;尤其是大三即将毕业的同学,你只有其实不到一年的时间去学习,正…

Python虽然很火,为啥找工作这么难

知乎有人提了这么个问题&#xff0c;Python这么火&#xff0c;为啥找工作这么难呢? 这两年因为第三波人工智能热潮让 Python火了一把&#xff0c;让中小学生、非程序员(产品经理、运营)都加入到了学习Python的行列&#xff0c;那之前Python火吗? 虽然和Java、C这些大佬有差距…

学Python找工作你起码要会这些

要想通过自学Python并找到第一份工作应该做好以下几方面的事情&#xff1a; 第一&#xff1a;掌握Python的Web开发。 虽然Python目前在大数据、机器学习领域有大量的应用&#xff0c;但是掌握Python的Web开发依然是很有必要的&#xff0c;毕竟在生产环境下&#xff0c;Python…

对于你学了python是否可以找工作。

‘’’ Date: 2022-04-22 13:50:12 LastEditors: YuanPangZi LastEditTime: 2022-04-22 13:50:14 FilePath: \python_base\0_node_base\python_des.py ‘’’ 学python能找工作吗&#xff1f;需要计算机基础吗&#xff1f; 答案是**肯定的** 学python找工作这个事情 现在pyth…

Python虽然很火,为啥找工作这么难?

前几天看到某论坛有人提了这么个问题&#xff0c;Python这么火&#xff0c;为啥找工作这么难呢? 这两年因为第三波人工智能热潮让 Python火了一把&#xff0c;让中小学生、非程序员(产品经理、运营)都加入到了学习Python的行列&#xff0c;那之前Python火吗? 虽然和Java、C这…

扎心“我学了六个月 Python,怎么还是会找不到工作”

在编程界&#xff0c;Python是一种神奇的存在。有人认为&#xff0c;只有用Python才能优雅写代码&#xff0c;提高代码效率&#xff1b;但另一部分人恨不能把Python喷成筛子。那么&#xff0c;Python到底有没有用&#xff0c;为什么用Python找不到工作&#xff1f; Python到底能…

python这么火找不到工作_python工作太难找,python找不到工作原因。

python工作难找&#xff0c;是目前python发展的必然历程&#xff0c;因为python市场虽然有点火&#xff0c;但是市场却没有那么多的python职位提供。python专家急需&#xff0c;python新手却胜任不了。python基础岗位又太少了。我们一起来看一下。 1、python的工作难找原因之一…

Python学到什么程度才可以去找工作?掌握这4点足够了!

大家在学习Python的时候&#xff0c;有人会问“Python要学到什么程度才能出去找工作”&#xff0c;对于在Python培训机构学习Python的同学来说这都不是问题&#xff0c;因为按照Python课程大纲来&#xff0c;一般都不会有什么问题&#xff0c;而对于自学Python来说&#xff0c;…

去年那些口口声声说“学Python找不到工作”的人,今年为何被打脸?

最近在网上看到了一件比较有意思的事情&#xff0c;就是伴随着Python在TIOBE排行榜上多次超越了Java登上第2名的时候&#xff0c;去年口口声声说"不推荐学Python&#xff0c;学Python找不到工作"的一些博主&#xff0c;居然出现了剧情大转变&#xff0c;居然公然承认…

为什么我不建议你通过 Python 去找工作?

二哥&#xff0c;你好&#xff0c;我是一名大专生&#xff0c;学校把 Python 做为主语言教给我们&#xff0c;但是我也去了解过&#xff0c;其实 Python 门槛挺高的&#xff0c;所以我在自学 Java&#xff0c;但是我现在并不清楚到底要不要全心的去学 Java&#xff0c;学校里的…

学python为何不好找工作呢?

随着人工智能的大火&#xff0c;越来越多的人选择去学习Python编程语言&#xff0c;但是总会在网上看到有人吐槽学完Python找不到工作。 为什么会出现这种情况呢? 为什么会出现这种学习完Python编程语言却无法找到工作的情况呢? 虽然Python是一个当前十分热门的编程语言&am…

自学python能不能找到工作,学会了python好找工作吗

python学到什么程度可以就业 Python可以从事的岗位有很多&#xff0c;就业岗位不同&#xff0c;需要具备的技能不同&#xff0c;具体要求如下&#xff1a;阶段一&#xff1a;Python开发基础Python全栈开发与人工智能之Python开发基础知识学习内容包括&#xff1a;Python基础语…