当前位置: 首页 > wzjs >正文

视频网站的防盗链是怎么做的怎么做百度网页

视频网站的防盗链是怎么做的,怎么做百度网页,钓鱼网站实施过程,公司注册网上注册怎么做前言 在现代GIS开发中,OpenLayers 作为强大的前端地图库,与后端服务的无缝集成是实现动态空间数据可视化的关键。GeoJSON 作为一种轻量级的地理数据交换格式,因其结构清晰、兼容性强,成为前后端传输空间数据的首选方案。 本文将详…

前言

在现代GIS开发中,OpenLayers 作为强大的前端地图库,与后端服务的无缝集成是实现动态空间数据可视化的关键。GeoJSON 作为一种轻量级的地理数据交换格式,因其结构清晰、兼容性强,成为前后端传输空间数据的首选方案。

本文将详细介绍如何通过 OpenLayers 从后端服务(Spring Boot)高效加载 GeoJSON 数据。

1. 搭建SpringBoot后端服务

开发环境
:::block-1
时间:2025年

GeoTools:34-SNAPSHOT

IDE:IDEA2025.1.2

JDK:17
:::
创建好SpringBoot项目后配置数据库连接信息:

spring.application.name=geotools-boot# src/main/resources/application.properties
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost:5432/geodata?useSSL=false
spring.datasource.username=postgres
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update

pom.xml文件中安装GeoTools所需依赖。

<!-- GeoTools依赖 -->
<dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-swing</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-xml</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools.xsd</groupId><artifactId>gt-xsd-kml</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId><version>${geotools.version}</version>
</dependency>
<dependency><groupId>org.geotools.jdbc</groupId><artifactId>gt-jdbc-postgis</artifactId><version>${geotools.version}</version>
</dependency>
<!-- PostgreSQL 驱动 -->
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.7.3</version>
</dependency>

创建省级行政区实体对象Province

public class Province {@Setter@Getterpublic Integer gid;@Setter@Getterpublic String name;@Setter@Getterpublic String layer;@Setter@Getterpublic BigDecimal kind;@Setter@Getterpublic BigDecimal admincode;@Setter@Getterpublic String geom;
}

添加读取PostGIS空间数据实现类,使用GeometryJSON类将几何字段数据转换为GeoJSON数据。

@Service
public class PgService {public List<Province> readSpatialData() throws Exception{// 连接PostGIS数据库Map<String, Object> pgParams = new HashMap<>();pgParams.put(PostgisNGDataStoreFactory.DBTYPE.key, "postgis");pgParams.put(PostgisNGDataStoreFactory.HOST.key, "localhost");pgParams.put(PostgisNGDataStoreFactory.PORT.key, "5432");pgParams.put(PostgisNGDataStoreFactory.DATABASE.key, "geodata");pgParams.put(PostgisNGDataStoreFactory.USER.key, "postgres");pgParams.put(PostgisNGDataStoreFactory.PASSWD.key, "123456");pgParams.put(PostgisNGDataStoreFactory.SCHEMA.key, "public"); // 明确指定schemapgParams.put(PostgisNGDataStoreFactory.EXPOSE_PK.key, true);  // 暴露主键DataStore dataStore = DataStoreFinder.getDataStore(pgParams);// 数据库表名称String typeName = "province";SimpleFeatureSource featureSource = dataStore.getFeatureSource(typeName);// 返回数据列表List<Province> provinces = new ArrayList<>();try(FeatureIterator<SimpleFeature> features = featureSource.getFeatures().features()) {while (features.hasNext()) {SimpleFeature feature = features.next();Province province = new Province();// 添加要素province.setGid((Integer) feature.getAttribute("gid"));province.setName((String) feature.getAttribute("name"));province.setLayer((String) feature.getAttribute("layer"));province.setAdmincode((BigDecimal) feature.getAttribute("admincode"));Object geometry = feature.getAttribute("geom");// 读取几何字段数据为GeoJSON字符串GeometryJSON geometryJSON = new GeometryJSON();StringWriter writer = new StringWriter();geometryJSON.write((Geometry) geometry,writer);String jsonString = writer.toString();province.setGeom(jsonString);provinces.add(province);}}catch(Exception e){e.printStackTrace();}dataStore.dispose();return provinces;}
}

编写控制类ReadPgController读取空间数据列表接口,使用@CrossOrigin(origins = "*")注解允许前端访问,不然会报跨域。

/*** 获取空间数据列表*/
@CrossOrigin(origins = "*") // 或指定前端地址
@RestController
public class ReadPgController {@Autowiredprivate PgService pgService;@GetMapping("/spatial/list")public List<Province> getProviceList() throws Exception{return pgService.readSpatialData();}
}

2. 使用OpenLayers加载数据

具体使用情况请参考之前的文章:OpenLayers 加载GeoJSON的五种方式

在前端中读取后端数据可以使用原生XMLHttpRequest()请求实现,也可以通过引入第三方库Axios实现,本文使用更简单的fetch API请求。

// 后端服务地址
const JSON_URL = "http://127.0.0.1:8080/spatial/list"
fetch(JSON_URL).then(response => response.json().then(result => {// console.log(result)// 读取Feature要素const features = result.map(item => {const feat = {}feat.type = "Feature"feat.geometry = JSON.parse(item.geom)feat.properties = itemfeat.properties.color = `hsl(${Math.floor(Math.random() * 360)}, 100%, 50%)`const feature = new ol.format.GeoJSON().readFeature(feat)return feature})const vectorSource = new ol.source.Vector({features: features,format: new ol.format.GeoJSON()})// 行政区矢量图层const regionLayer = new ol.layer.Vector({source: vectorSource,style: {'fill-color': ['string', ['get', 'color'], '#eee'],}})regionLayer.set("title", "云南行政区")map.addLayer(regionLayer)map.getView().setCenter([108.76623301275802, 34.22939602197002])map.getView().setZoom(4.5)
)

使用GeoJSON()构造矢量数据源,所以需要使用readFeature方法将Feature Object对象转换为OpenLayers Feature对象。后端返回的几何字段geom为字符串类型,所以使用JSON.parse方法将其转换为JSON对象。

在要素属性中添加color属性,设置其值为hsl随机颜色值。feat.properties.color = `hsl(${Math.floor(Math.random() * 360)}, 100%, 50%)`

// 读取Feature要素
const features = result.map(item => {const feat = {}feat.type = "Feature"feat.geometry = JSON.parse(item.geom)feat.properties = itemfeat.properties.color = `hsl(${Math.floor(Math.random() * 360)}, 100%, 50%)`const feature = new ol.format.GeoJSON().readFeature(feat)return feature
})

设置行政区填充样式,'fill-color': ['string', ['get', 'color'], '#eee']为OpenLayers样式表达式写法,表示从color属性中获取颜色值填充要素样式,如果未获取到,则使用默认颜色值'#eee'填充。

具体可以参考文章:OpenLayers样式表达式。

// 行政区矢量图层
const regionLayer = new ol.layer.Vector({source: vectorSource,style: {'fill-color': ['string', ['get', 'color'], '#eee'],}
})

表现效果如下:

OpenLayers示例数据下载,请回复关键字:ol数据

全国信息化工程师-GIS 应用水平考试资料,请回复关键字:GIS考试

【GIS之路】 已经接入了智能助手,欢迎关注,欢迎提问。

欢迎访问我的博客网站-长谈GIShttp://shanhaitalk.com

都看到这了,不要忘记点赞、收藏 + 关注

本号不定时更新有关 GIS开发 相关内容,欢迎关注 !


文章转载自:

http://tu52WzB2.Lfqnk.cn
http://nkoy7QvN.Lfqnk.cn
http://Xdq21Pcc.Lfqnk.cn
http://V2IdIkHd.Lfqnk.cn
http://REHmKtPY.Lfqnk.cn
http://aT7a45Mw.Lfqnk.cn
http://LNMb3lul.Lfqnk.cn
http://A9RQuIBW.Lfqnk.cn
http://TYC4DPDy.Lfqnk.cn
http://0KITcllC.Lfqnk.cn
http://p7nb2cpv.Lfqnk.cn
http://YyHq6v5r.Lfqnk.cn
http://kOdnmfkX.Lfqnk.cn
http://F6JgpEl4.Lfqnk.cn
http://84yHXHA3.Lfqnk.cn
http://TYHtW7Hg.Lfqnk.cn
http://R6BAYi67.Lfqnk.cn
http://HDiVUVEA.Lfqnk.cn
http://GHRc3wMv.Lfqnk.cn
http://EejwJRt6.Lfqnk.cn
http://MwywuDNU.Lfqnk.cn
http://q3tCtQWz.Lfqnk.cn
http://sJ32Xz0B.Lfqnk.cn
http://ooZJZZ46.Lfqnk.cn
http://FkcYEcM0.Lfqnk.cn
http://7sO4ri4S.Lfqnk.cn
http://dMRxG9xL.Lfqnk.cn
http://hibtF1Cg.Lfqnk.cn
http://IyAHtos8.Lfqnk.cn
http://UD02A01l.Lfqnk.cn
http://www.dtcms.com/wzjs/698459.html

相关文章:

  • 中国建设招标网站中标公告青岛关键词快速排名
  • 爱站网关键词挖掘明薇通网站建设
  • 网站页面设计收费高端网站的设计开发公司
  • 购物网站建设市场调查论文python网站开发基础
  • 兼职做问卷调查的网站好如何给公司取一个好名字
  • 山东平台网站建设企业问卷调查网站哪个好
  • 用源代码做网站wordpress编辑器功能增强
  • 自主网站制作html网站开发软件
  • 泉州洛江住房和城乡建设局网站企业网站建设文案案例
  • 企业网站建设 推广帮忙网页设计师
  • 厦门网站建设中心注册岩土工程师
  • 百度移动seo首选帝搜软件如何做好seo
  • 永康高端网站建设多少钱可以做网站
  • 简单个人网站源码网络seo
  • 网站开发在哪个科目核算佛山商城网站建设
  • 全球军情动态济南seo网站推广公司
  • 网站建设与管理的认识软件详细设计文档模板
  • 众包网站开发电商是做什么行业的
  • 唯品会网站建设数据安全分析锤子手机网站模板
  • 惠州建设网站公司天津招投标 天津建设工程信息网
  • 网站建设怎么样做账企业展厅策划设计公司有哪些
  • 上海做网站的公中国机械加工网18易0下6拉en
  • ip查询网站备案查询系统信息手机网站模板下载安装
  • 母婴网站源码dede网络营销公司做得比较好的
  • 小学生做网站步骤为什么网络经营者要有自己的网站
  • 从零开始学ui设计seo优化软件哪个好
  • 网站后台可视化编辑wordpress角色
  • 红酒网站源码网站三元素怎么做
  • 全球搜索网站排名网站多语言包
  • 仿京东电商的网站开发报价做局域网网站