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

基于SpringBoot的全国风景区WebGIS按省展示实践

目录

前言

一、全国风景区信息介绍

1、全国范围内数据分布

2、全国风景区分布

3、PostGIS空间关联查询

二、后台查询的设计与实现 

1、Model和Mapper层

2、业务层和控制层设计

三、WebGIS可视化

1、省份范围可视化

2、省级风景区可视化展示 

3、成果展示 

总结 


前言

        旅行是心灵的洗涤,让每一步都充满感悟和思考。在旅途中,我学会了更加珍惜眼前的风景和时光。每一次旅行都是一次重新认识自己的机会,让我更加明白自己想要的是什么。旅途中的风景和经历,成为了我人生中最宝贵的财富。旅行让我感受到了世界的广阔和无限可能,让我更加勇敢地追求自己的梦想。在旅途中,我学会了用心去感受每一个细节,去品味生活的美好。旅行是一种生活方式,让我不断地探索和发现,不断地成长和进步。每一次旅行都是一次心灵的洗礼,让我更加清晰地认识自己和世界。旅途中的风景和经历成为了我人生中最珍贵的记忆,陪伴着我走过每一个春夏秋冬。旅行是一种自由和释放,让我在行走中找到自己的方向和目标。

        不知道您是否还记得自己上一次旅行是在什么时候?是跟身边的谁一起去参加的旅行?在旅行中最令人难忘的风景是什么?除了风景还有什么让你印象深刻。身体和灵魂,总要有一个在路上。既然选择了在路上,那么我们就要去风景优美的地方看看,去美丽的景区游览,让身心得到放松,放松之后积蓄能量,为以后的生活持续奋斗。

各省风景区

        不管是作为爱旅游的你,还是热爱文旅分析。使用WebGIS,我们来进行一场时空之旅,在地图上实现我们的地图旅行。本文以全国的旅游资源为例,分省份进行展示,将不同省份的风景区信息进行地图标注。我们也可以看一下全国范围内,风景区的时空分布。

        本文即是在此背景下创作的,文章首先对数据库中的风景区数据进行简单介绍,然后介绍如何使SpringBoot进行风景区查询功能的设计与实现,接着介绍前端基于Leaflet进行可视化设计,最后使用实际应用,介绍和分析不同省份的风景区旅游资源。热爱旅游的你,一定不要错过,欣赏风景,让我们一起去看看吧。

一、全国风景区信息介绍

        本节将对涉及的主要数据,即全国风景区信息进行简单介绍,其实在之前的一篇博客中,曾经对全国的风景区数据进行了详细的介绍,使用Java和PostGis的全国A级风景区数据入库实战。在这篇博客中,对全国A级风景区进行了入库的实践。

1、全国范围内数据分布

        在之前的博客中,我们已经实现了数据的入库,为了避免让读者引起唐突的感觉,这里首先将数据表结构再次进行介绍,让读者熟悉和掌握对空间表的设计与实现。

        对应的表结构脚本如下:

CREATE TABLE "public"."biz_scenic_spot" ("id" int8 NOT NULL,"name" varchar(255) COLLATE "pg_catalog"."default","level" varchar(4) COLLATE "pg_catalog"."default","province" varchar(255) COLLATE "pg_catalog"."default","city" varchar(255) COLLATE "pg_catalog"."default","area" varchar(255) COLLATE "pg_catalog"."default","address" varchar(255) COLLATE "pg_catalog"."default","evaluation_time" varchar(255) COLLATE "pg_catalog"."default","publish_time" varchar(255) COLLATE "pg_catalog"."default","lng_gcj02" varchar(30) COLLATE "pg_catalog"."default","lat_gcj02" varchar(30) COLLATE "pg_catalog"."default","lng_bd09" varchar(30) COLLATE "pg_catalog"."default","lat_bd09" varchar(30) COLLATE "pg_catalog"."default","lng_wgs84" varchar(30) COLLATE "pg_catalog"."default","lat_wgs84" varchar(30) COLLATE "pg_catalog"."default","geom" "public"."geometry","publish_link" varchar(255) COLLATE "pg_catalog"."default",CONSTRAINT "pk_biz_scenic_spot" PRIMARY KEY ("id")
);CREATE INDEX "idx_biz_scenic_spot_geom" ON "public"."biz_scenic_spot" USING gist ("geom" "public"."gist_geometry_ops_2d"
);COMMENT ON COLUMN "public"."biz_scenic_spot"."id" IS '主键';COMMENT ON COLUMN "public"."biz_scenic_spot"."name" IS '景区名称';COMMENT ON COLUMN "public"."biz_scenic_spot"."level" IS '景区级别';COMMENT ON COLUMN "public"."biz_scenic_spot"."province" IS '所属省份';COMMENT ON COLUMN "public"."biz_scenic_spot"."city" IS '所属城市';COMMENT ON COLUMN "public"."biz_scenic_spot"."area" IS '所属区县';COMMENT ON COLUMN "public"."biz_scenic_spot"."address" IS '地址';COMMENT ON COLUMN "public"."biz_scenic_spot"."evaluation_time" IS '评定时间';COMMENT ON COLUMN "public"."biz_scenic_spot"."publish_time" IS '发布时间';COMMENT ON COLUMN "public"."biz_scenic_spot"."lng_gcj02" IS 'lng_GCJ02';COMMENT ON COLUMN "public"."biz_scenic_spot"."lat_gcj02" IS 'lat_GCJ02';COMMENT ON COLUMN "public"."biz_scenic_spot"."lng_bd09" IS 'lng_BD09';COMMENT ON COLUMN "public"."biz_scenic_spot"."lat_bd09" IS 'lat_BD09';COMMENT ON COLUMN "public"."biz_scenic_spot"."lng_wgs84" IS 'lng_WGS84';COMMENT ON COLUMN "public"."biz_scenic_spot"."lat_wgs84" IS 'lat_WGS84';COMMENT ON COLUMN "public"."biz_scenic_spot"."publish_link" IS '发布链接';COMMENT ON TABLE "public"."biz_scenic_spot" IS '全国风景区信息表';

        数据库库一共有风景区14847条,在数据库中执行以下sql可以实现按照风景区级别进行分组统计,sql语句如下:

select count(level),level from biz_scenic_spot group by level;

        按照景区级别分类如下,其中有3条没有具体的级别(应该是数据的问题):

序号景区级别数量
15A336
24A4486
33A7866
42A2066
5A93

2、全国风景区分布

        首先从数据库层面,我们先来看一下全国的风景区分布是一个什么样的情况,这里使用表格的方式进行汇总。在上述的风景区表中执行以下语句,可以得到按省份分组的景区分布(注意:这里的分组没有使用关联外部的省份信息表,而是直接利用风景区表内的省份字段),在我们的系统中,我们有省份的空间信息表,在本文的空间分析中,我们使用省级行政区表。

select count(1) num,province from biz_scenic_spot group by province order by num desc;

        执行后可以在数据库中看到以下数据:

序号城市名称景区数量
1浙江1322
2山东1205
3四川895
4广西662
5安徽605
6江苏600
7广东597
8河南580
9湖北576
10新疆574
11贵州570
12云南561
13辽宁558
14湖南550
16陕西527
17河北490
18福建463
19甘肃442
20内蒙古428
21江西421
22黑龙江409
23吉林275
24重庆272
25山西268
26北京216
27青海163
28西藏148
29宁夏147
30上海139
31天津100
32海南84

        从上表中可以很直观的看出,浙江省、山东省、四川省的旅游资源相当丰富,居全国前三甲。而海南省、天津市、上海市位于后三甲。这里仅对数据进行表格可视化,为了让数据具有空间分布,我们将使用WebGIS的方式进行展示,让地图具有空间分布的特性。

3、PostGIS空间关联查询

        为了让景区信息更加具有空间分布的特性,我们采用和biz_province即省级行政区划信息表进行关联,查询出指定省份对应的风景信息,这里使用st_contains(geom,geom)这个函数来进行对比。sql查询示例如下所示(以湖南省430000为例):

SELECT T.*,st_asgeojson ( T.geom ) AS geomJson 
FROMbiz_province P,biz_scenic_spot T 
WHEREP.code = '430000' AND st_contains ( P.geom, T.geom );

二、后台查询的设计与实现 

        本节重点讲解后台服务的设计,这里我们依然采用SpringBoot和Mybatis-Plus的组合,空间数据库采用PostGIS数据。因此后台服务的设计采用MVC模式,下面针对每一层进行详细的设计。

1、Model和Mapper层

        model层包括实体类和相关视图层对象。Mapper即dao层,数据访问层。通过Mapper来操作数据库,基于MP进行实体数据库操作。

package com.yelang.project.extend.scenicspot.domain;
import java.io.Serializable;
import org.apache.ibatis.type.BlobByteObjectArrayTypeHandler;
import org.apache.ibatis.type.BlobInputStreamTypeHandler;
import org.apache.ibatis.type.BlobTypeHandler;
import org.apache.ibatis.type.ByteArrayTypeHandler;
import org.apache.ibatis.type.ByteObjectArrayTypeHandler;
import org.apache.ibatis.type.ByteTypeHandler;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yelang.framework.handler.PgGeometryTypeHandler;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;/***  全国风景区信息表
* @author wzh
*
*/
@TableName(value = "biz_scenic_spot", autoResultMap = true)
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class ScenicSpot implements Serializable{private static final long serialVersionUID = 1830004907219610805L;@TableIdprivate Long id;private String name;//景区名称private String level;//景区级别private String province;//所属省份private String city;//所属城市private String area;//所属区县private String address;//地址@TableField(value="evaluation_time")private String evaluationTime;//评定时间@TableField(value="publish_time")private String publishTime;//发布时间@TableField(value="publish_link")private String publishLink;//发布时间@TableField(value="lng_GCJ02")private String lngGCJ02;@TableField(value="lat_GCJ02")private String latGCJ02;@TableField(value="lng_BD09")private String lngBD09;@TableField(value="lat_BD09")private String latBD09;@TableField(value="lng_WGS84")private String lngWGS84;@TableField(value="lat_WGS84")private String latWGS84;@TableField(typeHandler = PgGeometryTypeHandler.class)private String geom;@TableField(exist=false)private String geomJson;@TableField(exist=false)private byte[] tile;public ScenicSpot(String name, String level, String province, String city, String area, String address,String evaluationTime, String publishTime, String publishLink,String lngGCJ02, String latGCJ02, String lngBD09, String latBD09,String lngWGS84, String latWGS84, String geom) {super();this.name = name;this.level = level;this.province = province;this.city = city;this.area = area;this.address = address;this.evaluationTime = evaluationTime;this.publishTime = publishTime;this.publishLink = publishLink;this.lngGCJ02 = lngGCJ02;this.latGCJ02 = latGCJ02;this.lngBD09 = lngBD09;this.latBD09 = latBD09;this.lngWGS84 = lngWGS84;this.latWGS84 = latWGS84;this.geom = geom;}
}

        mapper层主要提供查询省级范围内的风景区列表方法,关键代码如下:

package com.yelang.project.extend.scenicspot.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.type.JdbcType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yelang.project.extend.scenicspot.domain.ScenicSpot;
import com.yelang.project.extend.scenicspot.domain.TileBox;
public interface ScenicSpotMapper extends BaseMapper<ScenicSpot>{static final String FIND_GEOJSON_SQL="<script>"+ "select st_asgeojson(geom) as geomJson from biz_scenic_spot "+ "where id = #{id} "+ "<if test='null != name'>and name like concat('%', #{name}, '%')</if>"+ "</script>";@Select(FIND_GEOJSON_SQL)ScenicSpot findGeoJsonById(@Param("id")Long id,@Param("name")String name);static final String FIND_LISTBY_PCODE = "<script>"+ " select t.*,st_asgeojson(t.geom) as geomJson from biz_province p,biz_scenic_spot t where p.code = #{code} and st_contains(p.geom, t.geom) "+ "</script>";/***  根据省级行政区划code查询对应的风景名胜列表* @param code 省份编码* @return 对应的风景名胜区列表*/@Select(FIND_LISTBY_PCODE)List<ScenicSpot> findListByPcode(@Param("code")String code);
}

2、业务层和控制层设计

        业务层比较简单,实现控制层到数据库访问层的调用。这里贴出关键代码:

package com.yelang.project.extend.scenicspot.service.impl;@Service
public class ScenicSpotServiceImpl extends ServiceImpl<ScenicSpotMapper, ScenicSpot> implements IScenicSpotService{@Overridepublic List<ScenicSpot> findListByPcode(String code) {return this.baseMapper.findListByPcode(code);}
}

        

package com.yelang.project.extend.scenicspot.controller;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/sspot/province")
public class ScenicSpotProvinceController extends BaseController{
private String prefix = "scenicspot/province";@Autowiredprivate IProvinceService provinceService;@Autowiredprivate IScenicSpotService sspotService;@RequiresPermissions("sspot:province:view")@GetMapping()public String map(){return prefix + "/map";}@RequiresPermissions("sspot:province:list")@PostMapping("/list")@ResponseBodypublic TableDataInfo list(Province province){startPage();List<Province> list = provinceService.selectList(province);return getDataTable(list);}@RequiresPermissions("sspot:province:geom")@GetMapping("/geojson/{id}")@ResponseBodypublic AjaxResult getGeojson(@PathVariable("id") Long id){Province province = provinceService.findGeoJsonById(id, null);return AjaxResult.success().put("data", province.getGeomJson());}@RequiresPermissions("sspot:province:sspotlist")@GetMapping("/datalist/{code}")@ResponseBodypublic AjaxResult sspotList(@PathVariable("code") String code){List<ScenicSpot> list = sspotService.findListByPcode(code);AjaxResult ar = AjaxResult.success();ar.put("data", list);return ar;}
}

        控制层提供四个主要的方法,第一个是跳转到页面的方法,第二个是获取省份列表,第三个是获取省份geojson数据,最后一个是获取省份下辖风景区列表。以上就是后台各层的代码设计与实现。通过这几个方法为前台提供服务。

三、WebGIS可视化

        本节将重点讲解如何WebGIS当中采用leaflet框架实现对风景区信息的展示,这里采用熟悉的Leaflet架构。使用基于Canvas的文本标记方法。关于地图的定义,列表的展示非本文重点,这里不再赘述。

1、省份范围可视化

        在界面中,首先会展示省份列表,通过点击省份列表的操作按钮,获取当前省份的code,然后根据code获取对应的省级行政区划范围GeoJSON,然后使用Leaflet将GeoJSON展示出来。关键代码如下:

function showProvince(id){var myStyle = {color:"white",weight:5,"opacity":1,fillOpacity: 0};$.ajax({  type:"get",  url:prefix + "/geojson/" + id,  data:{},  async: false,dataType:"json",  cache:false,processData:false,success:function(result){if(undefined != provinceAreaLayer ){provinceAreaLayer.removeFrom(mymap);//先移除}if(result.code == web_status.SUCCESS){var geojson = JSON.parse(result.data);provinceAreaLayer = L.geoJSON(geojson,{style:myStyle}).addTo(mymap);//同时设置中心位置和级别,一般省份设置为7mymap.setView(provinceAreaLayer.getBounds().getCenter(),7);}},error:function(){$.modal.alertWarning("获取空间信息失败");}});}

2、省级风景区可视化展示 

        通过code关联省级行政区划表和风景区信息表,进行两个图层的空间叠加分析,实现省级区域的风景区划覆盖。前台的核心代码如下所示:

 function showScenicSpot(code){$.ajax({  type:"get",  url:prefix + "/datalist/" + code,  dataType:"json",  cache:false,processData:false,success:function(result){if(result.code == web_status.SUCCESS){var strokeStyleSet = "#23168d";var lat,lng,cityInfo;for(var i=0;i<result.data.length;i++){var dataInfo = result.data[i];var geomObj = JSON.parse(dataInfo.geomJson);if(i == 0){lat = geomObj.coordinates[1];lng = geomObj.coordinates[0];continue;}var radiusSize = 5;switch(dataInfo.level) {case '5A':  strokeStyleSet = "#c50808";radiusSize += 7;break;case '4A':  strokeStyleSet = "#c37322";radiusSize += 5;break;case '3A':strokeStyleSet = "#6f8d16";radiusSize += 3;break;case '2A':strokeStyleSet = "#168d40";radiusSize += 1;break;default:strokeStyleSet = "#23168d";}var content = "<strong>名称:</strong>"+dataInfo.name + "<br/><strong>级别:</strong>"+ dataInfo.level;content += "<br/><strong>所属行政区划:</strong>"+ dataInfo.province + "/" + dataInfo.city + "/" + dataInfo.area;content += "<br/><strong>评定时间:</strong>"+ dataInfo.evaluationTime ;var latlng = new L.latLng(geomObj.coordinates[1], geomObj.coordinates[0]);let marker = L.circleMarker(latlng, {radius: radiusSize,color: strokeStyleSet,labelStyle: {offsetX: 0, //横坐标偏移(像素)offsetY: 30, //纵坐标偏移(像素)text: dataInfo.name,rotation: 0,zIndex: radiusSize,minZoom : 5,strokeStyle: strokeStyleSet}}).addTo(showLayerGroup);marker.bindPopup(content); }mymap.addLayer(showLayerGroup);}},error:function(){$.modal.alertWarning("获取信息失败");}});}

3、成果展示 

        通过以上的代码,大致实现了风景区的WebGIS展示,这里将选择几个省份将其旅游资源进行集中展示。也让大家了解项目实际的成果。快来看看你所在省份的风景区信息吧。如果没有的省份,感兴趣的可以私聊,可以私发可视化结果哦。

山西省风景区分布图

辽宁省风景区分布图

江苏省风景区分布图

安徽省风景区分布图

 四川省风景区分布图

新疆维吾尔自治区风景区分布示意图

总结 

        以上就是本文的主要内容,本文即是在此背景下创作的,文章首先对数据库中的风景区数据进行简单介绍,然后介绍如何使SpringBoot进行风景区查询功能的设计与实现,接着介绍前端基于Leaflet进行可视化设计,最后使用实际应用,介绍和分析不同省份的风景区旅游资源。行文仓促,定有不足之处,还请朋友们不吝批评指正。

相关文章:

基于SpringBoot的全国风景区WebGIS按省展示实践

目录 前言 一、全国风景区信息介绍 1、全国范围内数据分布 2、全国风景区分布 3、PostGIS空间关联查询 二、后台查询的设计与实现 1、Model和Mapper层 2、业务层和控制层设计 三、WebGIS可视化 1、省份范围可视化 2、省级风景区可视化展示 3、成果展示 总结 前…...

深入理解网络原理3----TCP核心特性介绍(上)【面试高频考点】

文章目录 前言TCP协议段格式一、确认应答【保证可靠性传输的机制】二、超时重传【保证可靠性传输的机制】三、连接管理机制【保证可靠性传输的机制】3.1建立连接&#xff08;TCP三次握手&#xff09;---经典面试题3.2断开连接&#xff08;四次挥手&#xff09;3.3TCP状态转换 四…...

Java并发编程之锁的艺术:面试与实战指南(三)

Java并发编程之锁的艺术&#xff1a;面试与实战指南&#xff08;三&#xff09; 文章目录 Java并发编程之锁的艺术&#xff1a;面试与实战指南&#xff08;三&#xff09;前言十七、Java中线程和进程的区别是什么&#xff1f;十八、什么是Java内存模型&#xff08;JMM&#xff…...

Final Draft 12 for Mac:高效专业剧本创作软件

对于剧本创作者来说&#xff0c;一款高效、专业的写作工具是不可或缺的。Final Draft 12 for Mac就是这样一款完美的选择。这款专为Mac用户设计的剧本创作软件&#xff0c;凭借其卓越的性能和丰富的功能&#xff0c;让您的剧本创作更加得心应手。 Final Draft 12支持多种剧本格…...

php字符串变量和常见的字符串函数

在 PHP 中&#xff0c;字符串变量用于存储文本数据。你可以使用单引号&#xff08;&#xff09;、双引号&#xff08;"&#xff09;或定界符&#xff08;heredoc 或 nowdoc&#xff09;来定义字符串。下面是一些关于 PHP 字符串变量的重要点和示例&#xff1a; 1. 单引号…...

PPT基础

5种ppt仅可读形式 Ⅰ 开始选项卡 1.【幻灯片】组中&#xff1a;新建幻灯片&#xff0c;从大纲中导入幻灯片&#xff1b;修改幻灯片的版式&#xff1b;节&#xff08;新增节&#xff0c;重命名节&#xff09;。 2.【字体】组中&#xff1a;设置字体&#xff0c;字体大小&…...

初识JDBC

1、JDBC是什么&#xff1f; Java DataBase Connectivity(Java语言连接数据库) 2、JDBC的本质是什么&#xff1f; JDBC是SUN公司制定的一套接口(interface) java.sql.*;(这个包下有很多接口) 接口都有调用者和实现者。 面向接口调用、面向接口写实现类&#xff0c;这都属于…...

React 学习-5

React 条件渲染: 与js中的写法一致 注意&#xff1a;在 JavaScript 中&#xff0c;true && expression 总是返回 expression&#xff0c;而 false && expression 总是返回 false。 因此&#xff0c;如果条件是 true&#xff0c;&& 右侧的元素就会被渲…...

深入浅出TCP 与 UDP

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f525; 引言&#x1f310; 基础认知概览&#x1f4bb; TCP - 稳健的信使 &#x1f6e1;️&#x1f3ad; UDP - 敏捷的使者 &#x1f3c3;‍♂️ &#x1f9d1;‍&#x1f4bb; 实战演练&#xff1a;代码示例TCP 服务…...

Leetcode—387. 字符串中的第一个唯一字符【简单】

2024每日刷题&#xff08;127&#xff09; Leetcode—387. 字符串中的第一个唯一字符 实现代码 class Solution { public:int firstUniqChar(string s) {int count[26] {0};for(char c: s) {count[c - a];}for(int i 0; i < s.length(); i) {if(count[s[i] - a] 1) {re…...

Blazor入门-调用js+例子

参考&#xff1a; Blazor入门笔记&#xff08;3&#xff09;-C#与JS交互 - 半野 - 博客园 https://www.cnblogs.com/zxyao/p/12638233.html 本地环境&#xff1a;win10, visual studio 2022 community 其他例子写了再更新&#xff01; 调用js函数并传递参数 首先要加上injec…...

暴力数据结构之栈与队列(队列详解)

1.队列的定义 队列是一种特殊的线性表&#xff0c;它遵循先进先出&#xff08;FIFO&#xff09;的原则。在队列中&#xff0c;只允许在表的一端进行插入操作&#xff08;队尾&#xff09;&#xff0c;而在另一端进行删除操作&#xff08;队头&#xff09;。这种数据结构确保了最…...

仿照JDK源码写一个ArrayList实现

仿照JDK编写一个简化的ArrayList实现是一个很好的学习Java集合框架内部工作原理的方式。以下是一个简化版的ArrayList实现,它包含了基本的添加、获取、删除和大小检查功能。 public class MyArrayList<E> {private static final int DEFAULT_CAPACITY = 10;private Obj…...

[链表专题]力扣21, 234

1. 力扣21 题 : 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a;输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a;输入&#xff1a;l1 [], l2 [] 输出&…...

智慧便民小程序源码系统 求职招聘+房产出租+相亲交友 带完整的安装代码包以及系统搭建教程

在数字化、智能化的今天&#xff0c;我们的生活节奏越来越快&#xff0c;对于各种服务的需求也越发多元化和个性化。为了满足广大市民对于便捷、高效、全面的服务需求&#xff0c;罗峰给大家分享一款智慧便民小程序源码系统&#xff0c;集求职招聘、房产出租、相亲交友三大功能…...

苹果免签封装的优势和安全风险

哈喽&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;许多小伙伴应该都知道&#xff0c;App Store一直是iOS应用的主要分发渠道&#xff0c;苹果生态系统的监管是十分严格的&#xff0c;以此确保了应用质量与用户的安全。而苹果免签封装则是有一种不需要通过…...

hook抓包trace定位实战

title: SO逆向之大众点评cx date: 2022-02-07 19:27:28 tags: SOfrida categories: 安卓逆向 toc_number: true抓包10.37.13 打开首页一篇文章,APP默认TCP连接,通过降级采用HTTP连接 jadx反编译代码中 public int g() {Object[] objArr = new Object[0];ChangeQuickRedire…...

SMB 协议详解之-TreeID原理和SMB数据包分析技巧

在前面分析SMB协议数据包的过程中,这里,可以看到在SMB协议中存在很多的ID,即Unique Identifiers。那么这些ID表示什么含义?在实际分析数据包的过程中如何根据这些ID进行过滤分析?本文将介绍SMB/SMB2中的tree id ,并介绍如何通过tree id 快速的分析SMB数据包中各种命令交互…...

博士阶段应该搞什么:-人才引进要求

目录 专利,高水平论文(一作),技能证书,职称,高端竞赛,科研成果奖 济宁学院...

超全MySQL锁机制介绍

前言 MySQL作为关系型数据库管理系统中的佼佼者&#xff0c;为了保证数据的一致性和完整性&#xff0c;在并发控制方面采用了锁机制。锁机制是数据库管理系统用于控制对共享资源的访问&#xff0c;避免多个事务同时修改同一数据造成的数据不一致问题。了解MySQL的锁机制对于数…...

【CV】计算机视觉中的特征追踪与背景处理

计算机视觉领域中的重要任务之一是视频特征追踪&#xff0c;它可以用于目标跟踪、运动分析、行为识别等应用。然而&#xff0c;在实际应用中&#xff0c;经常会遇到需要仅处理视频中特定特征物体而忽略背景的情况&#xff0c;这就需要进行背景处理。本文将介绍如何使用Python和…...

CAPL如何实现TLS握手认证

CAPL有专门的章节介绍如何实现TLS握手认证的函数: CAPL调用哪些函数实现TLS握手认证,需要了解TLS在整个通信过程的哪个阶段。 首先TCP需要建立连接,这是TLS握手的前提。当TLS握手认证完成后,可以传输数据。 所以TLS握手开始前需要确保TCP建立连接,TCP传输数据前需要确保…...

Linux -- 日志

一 日志的重要性 在之前的编程经历中&#xff0c;如果我们的程序运行出现了问题&#xff0c;都是通过 标准输出 或 标准错误 将 错误信息 直接输出到屏幕上&#xff0c;以此来排除程序中的错误。 这在我们以往所写的程序中使用没啥问题&#xff0c;但如果出错的是一个不断在运行…...

WebRtc 视频通话,语音通话实现方案

先了解一下流程 和 流程图(chatGpt的回答) 实现 (底层代码实现, 可作为demo熟悉) 小demo <template><div><video ref"localVideo" autoplay muted></video> <!-- 本地视频元素&#xff0c;用于显示本地视频 --><video ref"r…...

IndyTcpServer使用详解

1、IndyTCPserver的创建 IdTCPServer1.DefaultPort:= 8000; IdTCPServer1.ListenQueue:= 1024; //同时处理请求队列数限制 IdTCPServer1.MaxConnections:= 1024; //同时连接数量限制,为0不限制连接数 IdTCPServer1.ContextClass:= TNewIdServerContext; //设置为自定义TIdSe…...

pytest + yaml 框架 - 参数化读取文件路径优化

针对小伙伴提出参数化时读取外部文件&#xff0c;在项目根路径运行没问题&#xff0c;但是进入到项目下子文件夹运行用例&#xff0c;就会找不到文件问题做了优化。 关于参数化读取外部文件相关内容参考前面这篇pytest yaml 框架 -25.参数化数据支持读取外部文件txt/csv/json/…...

C++:多态-重写和重载

重写&#xff08;Override&#xff09;和重载&#xff08;Overload&#xff09;是面向对象编程中常用的两个概念&#xff0c;它们虽然都涉及到方法的定义&#xff0c;但是在实现和使用上有着不同的特点。 重写&#xff08;Override&#xff09;&#xff1a; 重写是指在子类中重…...

element ui的table多选

使用el-table的selection-change事件来获取选中的值&#xff1b; 例&#xff1a; html代码&#xff1a; <el-button type"primary" click"openTableSet">列表设置</el-button><!-- 列表设置弹框 --> <el-dialog :close-on-click-mo…...

python基础---基础运算

基础运算 可以使用type获取一个变量的类型 常见的数据类型 整形, 可以存储任意大小的整数, 支持二进制&#xff08;如0b100&#xff0c;换算成十进制是4&#xff09;、八进制&#xff08;如0o100&#xff0c;换算成十进制是64&#xff09;、十进制&#xff08;100&#xff09;…...

【数学】泰勒公式

目录 引言 一、泰勒公式 1.泰勒公式及推导 &#xff08;1&#xff09;推导 &#xff08;2&#xff09;公式 2.泰勒中值定理 &#xff08;1&#xff09;定理1&#xff08;佩亚诺余项&#xff09; &#xff08;2&#xff09;定理2&#xff08;拉格朗日余项&#xff09; …...