网站建设公司该怎么销售重庆网红打卡景点

张小明 2025/12/30 15:05:10
网站建设公司该怎么销售,重庆网红打卡景点,设计师导航网站,网站建设费 账务处理目录 前言 一、行政区划物理表设计 1、物理表字段设计 2、表结构脚本 二、行政区划在线API 1、请求参数简介 2、响应参数简介 三、Java后台数据获取及空间存储 1、API服务调用 2、递归获取数据 四、成果展示 1、PostGIS数据查询 2、WebGIS可视化 五、总结 前言 在…目录前言一、行政区划物理表设计1、物理表字段设计2、表结构脚本二、行政区划在线API1、请求参数简介2、响应参数简介三、Java后台数据获取及空间存储1、API服务调用2、递归获取数据四、成果展示1、PostGIS数据查询2、WebGIS可视化五、总结前言在当今数字化时代地理信息数据的应用场景日益丰富从城市规划到物流配送从旅游出行到环境监测地图数据都扮演着不可或缺的角色。然而在线地图服务虽然便捷但在一些特殊场景下如网络不稳定地区、数据安全要求较高的内部系统等离线存储地图数据的需求应运而生。行政区划数据作为地图数据的重要组成部分包含了国家、省、市、区等各级行政区域的边界和属性信息对于地理信息系统的分析和应用至关重要。因此如何高效地将在线地图的行政区划数据进行离线存储并在本地系统中进行管理和查询成为了一个值得研究的课题。本文将深入探讨如何结合强大的 SpringBoot 框架和专业的地理空间数据库 PostGIS以高德地图开放平台为例实现在线地图行政区划数据的离线存储以满足多样化的业务需求提升系统的灵活性和可靠性。通过本次实践探索我们不仅能够掌握 SpringBoot 和 PostGIS 在地理空间数据处理方面的应用还能深入了解在线地图数据离线存储的关键技术和实现方法。这将为我们在地理信息系统开发、大数据处理、移动应用开发等领域提供宝贵的经验和参考。此外该实践成果还可以推广应用于其他类型的地理空间数据离线存储场景具有广泛的应用前景和实际价值。在接下来的内容中我们将详细阐述数据获取与预处理的过程、数据库设计与建模的方法、SpringBoot 后端开发的具体实现以及前端展示与交互的设计思路希望本文的分享能够帮助更多对地理空间数据离线存储感兴趣的开发者和研究人员共同推动地理信息技术的发展和应用。一、行政区划物理表设计本节将对行政区划的物理表设计和表结构脚本进行详细的介绍。物理表很重要是我们后续内容的开展和继续的基础。1、物理表字段设计行政区划信息表的物理模型如下图所示为了有效减少物理表的数量与一些按照不同层级设计不同的表的方法不一样这里我们增加了一个parent_id字段以此来维护上下级的关系达到一张表管理不限层级的数据。2、表结构脚本为方便大家学习这里直接分享我的行政区划物理表数据设计仅供参考。这里的字段信息大家可以根据自己的需要进行灵活调整。如果有字段信息没有包含进来可以新增。实例表结构如下大家可以按需使用CREATE TABLE public.biz_region_info ( pk_id int8 NOT NULL, parent_id int8 DEFAULT 0, city_code varchar(6) COLLATE pg_catalog.default DEFAULT ::character varying, adcode varchar(6) COLLATE pg_catalog.default DEFAULT ::character varying, name varchar(50) COLLATE pg_catalog.default DEFAULT ::character varying, polyline_geom public.geometry, center varchar(30) COLLATE pg_catalog.default DEFAULT ::character varying, level varchar(10) COLLATE pg_catalog.default DEFAULT ::character varying, lon numeric, lat numeric, center_geom public.geometry, CONSTRAINT pk_biz_region_info PRIMARY KEY (pk_id) ); COMMENT ON COLUMN public.biz_region_info.pk_id IS 主键; COMMENT ON COLUMN public.biz_region_info.parent_id IS 上级主键最上级默认0; COMMENT ON COLUMN public.biz_region_info.city_code IS 城市编码; COMMENT ON COLUMN public.biz_region_info.adcode IS 区域编码; COMMENT ON COLUMN public.biz_region_info.name IS 行政区名称; COMMENT ON COLUMN public.biz_region_info.polyline_geom IS 行政区边界坐标点; COMMENT ON COLUMN public.biz_region_info.center IS 区域中心点; COMMENT ON COLUMN public.biz_region_info.level IS 行政区划级别; COMMENT ON COLUMN public.biz_region_info.lon IS 中心点经度; COMMENT ON COLUMN public.biz_region_info.lat IS 中心点纬度; COMMENT ON COLUMN public.biz_region_info.center_geom IS 中心点位置; COMMENT ON TABLE public.biz_region_info IS 行政区划信息表;需要注意的是这里没有增加空间索引和其他的物理索引。在实际业务中我们会经常进行行政区划内的数据检索因此建议大家在使用时对行政区边界坐标点字段设计一个空间索引。二、行政区划在线API本节将重点介绍高德地图的行政区划检索在线API主要包括请求参数和响应参数。这是后续我们使用在线地图的基础知识。行政区域查询是一类简单的 HTTP 接口根据用户输入的搜索条件可以帮助用户快速的查找特定的行政区域信息。例如中国山东省济南市历下区舜华路街道国省市区街道。URL请求方式https://restapi.amap.com/v3/config/district?parametersGETparameters 代表的参数包括必填参数和可选参数。所有参数均使用和号字符()进行分隔。下面的列表枚举了这些参数及其使用规则。1、请求参数简介参数名含义规则说明是否必须缺省值key请求服务权限标识用户在高德地图官网 申请 Web 服务 API 类型 KEY必填无keywords查询关键字规则只支持单个关键词语搜索关键词支持行政区名称、citycode、adcode例如在 subdistrict2搜索省份例如山东能够显示市例如济南区例如历下区adcode 信息可参考 城市编码表 获取可选无subdistrict子级行政区规则设置显示下级行政区级数行政区级别包括国家、省/直辖市、市、区/县、乡镇/街道多级数据可选值0、1、2、3等数字并以此类推0不返回下级行政区1返回下一级行政区2返回下两级行政区3返回下三级行政区需要在此特殊说明目前部分城市和省直辖县因为没有区县的概念故在市级下方直接显示街道。例如广东-东莞、海南-文昌市可选1page需要第几页数据最外层的 districts 最多会返回20个数据若超过限制请用 page 请求下一页数据。例如page2page3。默认page1可选1offset最外层返回数据个数可选20extensions返回结果控制此项控制行政区信息中返回行政区边界坐标点 可选值base、all;base:不返回行政区边界坐标点all:只返回当前查询 district 的边界值不返回子节点的边界值目前不能返回乡镇/街道级别的边界值可选basefilter根据区划过滤按照指定行政区划进行过滤填入后则只返回该省/直辖市信息需填入 adcode为了保证数据的正确强烈建议填入此参数可选callback回调函数callback 值是用户定义的函数名称此参数只在 outputJSON 时有效可选output返回数据格式类型可选值JSONXML可选JSON2、响应参数简介行政区域查询的响应结果的格式由请求参数output指定。名称含义规则说明status返回结果状态值值为0或10表示失败1表示成功info返回状态说明返回状态说明status 为0时info 返回错误原因否则返回“OK”。infocode状态码返回状态说明10000代表正确详情参阅 info 状态表suggestion建议结果列表keywords建议关键字列表cities建议城市列表districts行政区列表district行政区信息citycode城市编码adcode区域编码街道没有独有的 adcode均继承父类区县的 adcodename行政区名称polyline行政区边界坐标点当一个行政区范围由完全分隔两块或者多块的地块组成每块地的 polyline 坐标串以 | 分隔 。如北京 的 朝阳区center区域中心点乡镇级别返回的center是边界线上的形点其他行政级别返回的center不一定是中心点若政府机构位于面内则返回政府坐标政府不在面内则返回繁华点坐标。level行政区划级别country:国家province:省份直辖市会在province显示city:市直辖市会在province显示district:区县street:街道districts下级行政区列表包含 district 元素三、Java后台数据获取及空间存储SpringBoot 是一个开源的 Java 基于 Spring 框架的快速开发平台它简化了基于 Spring 框架的应用开发通过一系列的默认配置和约定让开发者能够快速搭建出稳定、高效的系统。PostGIS 是一个开源对象关系型空间数据库扩展它允许用户在 PostgreSQL 数据库中存储和操作地理空间数据提供了强大的空间数据类型和几何函数。通过将 SpringBoot 与 PostGIS 结合我们可以充分利用 SpringBoot 的开发优势和 PostGIS 的地理空间处理能力构建出一个高效、稳定的在线地图行政区划离线存储系统。在实践过程中我们将面临数据格式转换、性能优化以及数据更新与同步等挑战但这些挑战也将为我们提供宝贵的经验和学习机会。1、API服务调用为了简化调用我们使用UniHttp进行在线服务的集成接口定义如下package org.yelang.pcwater.amap.service; import com.burukeyou.uniapi.http.annotation.HttpApi; import com.burukeyou.uniapi.http.annotation.param.QueryPar; import com.burukeyou.uniapi.http.annotation.request.GetHttpInterface; import com.burukeyou.uniapi.http.core.response.HttpResponse; /** * - 高德地图开放平台API接口负责与高德交互 * * author 夜郎king * */ HttpApi(url https://restapi.amap.com) public interface AmapService { /** * - 行政区域查询 API 服务 * * param key 请求服务权限标识,必填 * param keywords 查询关键字 * param subdistrict 子级行政区 * param extensions 此项控制行政区信息中返回行政区边界坐标点 可选值base、all; * -base:不返回行政区边界坐标点all:只返回当前查询 district * -的边界值不返回子节点的边界值目前不能返回乡镇/街道级别的边界值 * return */ GetHttpInterface(/v3/config/district) public HttpResponseString district(QueryPar(key) String key, QueryPar(keywords) String keywords, QueryPar(subdistrict) int subdistrict, QueryPar(extensions) String extensions); }下面针对返回的数据进行反序列化将字符串转换为对象后续可以直接进行数据入库。对应我们定义两个JavaBean实体类一个是行政区划响应类代码如下package org.yelang.pcwater.amap.dto.amap.district; import java.util.List; import org.yelang.pcwater.amap.dto.amap.CommonDTO; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; NoArgsConstructor AllArgsConstructor Setter Getter ToString(callSupertrue)//callSupertrue表示输出父类属性 EqualsAndHashCode(callSupertrue) public class DistrictRespDTO extends CommonDTO{ private static final long serialVersionUID 3562870512223434443L; private ListDistrictDTO districts;//行政区列表 }还有一个最重要的行政区划信息类在这里类中包含了一个List的集合就是用来保存当前行政区划的下级单位代码如下package org.yelang.pcwater.amap.dto.amap.district; import java.io.Serializable; import java.util.List; import com.google.gson.annotations.SerializedName; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; /** * - 行政区信息数据传输对象 * author 夜郎king * */ NoArgsConstructor AllArgsConstructor Setter Getter ToString public class DistrictDTO implements Serializable{ private static final long serialVersionUID -6086240995930742268L; SerializedName(citycode) private String cityCode;//城市编码 private String adcode;//区域编码 private String name;//行政区名称 private String polyline;//行政区边界坐标点 private String center;//区域中心点 private String level;//行政区划级别 private ListDistrictDTO districts;//下级行政区列表包含 district 元素 }2、递归获取数据下面以深圳市为例详细讲解三级行政区划的数据获取及离线存储。在前面的接口说明中已经了解了一次可以返回多个下层数据的信息。大家可以根据自己的需要来调整业务但是不可避免的需要对不同层级的数据进行统一处理。这里演示一种简单的使用递归的方式来进行数据的获取。package org.yelang.pcwater.service.impl; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.yelang.pcwater.amap.dto.amap.district.DistrictDTO; import org.yelang.pcwater.amap.dto.amap.district.DistrictRespDTO; import org.yelang.pcwater.amap.service.AmapService; import org.yelang.pcwater.domain.RegionInfo; import org.yelang.pcwater.mapper.RegionInfoMapper; import org.yelang.pcwater.service.IRegionInfoService; import org.yelang.pcwater.utils.PolygonStringToWKTConverter; import org.yelang.pcwater.utils.StringUtils; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.burukeyou.uniapi.http.core.response.HttpResponse; import com.google.gson.Gson; Service public class RegionInfoServiceImpl extends ServiceImplRegionInfoMapper, RegionInfo implements IRegionInfoService{ // 高德地图的key需要替换成自己申请的key private static final String DEFAULT_AMAP_KEY yourkey; private static final String EXTENSIONS all; Autowired private AmapService amapService; Override public void syncDistrict() throws InterruptedException { Gson gson new Gson(); int subdistrict 3;// 返回下三级行政区 HttpResponseString result amapService.district(DEFAULT_AMAP_KEY, 深圳市, subdistrict, EXTENSIONS); if (StringUtils.isEmpty(result.getBodyResult())) { return; } DistrictRespDTO districtRespDTO gson.fromJson(result.getBodyResult(), DistrictRespDTO.class); ListRegionInfo regionList new ArrayListRegionInfo(); this.extractDistrict(districtRespDTO.getDistricts(), regionList, 0L); if(StringUtils.isEmpty(regionList)) { return ; } for (RegionInfo regionInfo : regionList) { String polylineGeom regionInfo.getPolylineGeom(); String level regionInfo.getLevel(); //市、区等行政区划如果第一轮没有采集需要重新获取行政区划边界 if(StringUtils.isEmpty(polylineGeom) (level.equalsIgnoreCase(city) || level.equalsIgnoreCase(district))) { //System.out.println(单独处理边界 regionInfo.getAdcode() regionInfo.getName()); //这里只需要返回当前层级即可 HttpResponseString _tempResp amapService.district(DEFAULT_AMAP_KEY, regionInfo.getAdcode(), 0, EXTENSIONS); String amapPolyline this.getPolyline(_tempResp.getBodyResult()); if(StringUtils.isNotEmpty(amapPolyline)) { String polylineGeomWkt PolygonStringToWKTConverter.convertToWKT(amapPolyline); regionInfo.setPolylineGeom(SRID 4326 ; polylineGeomWkt);//拼接srid实现动态写入); } Thread.sleep(100); } } this.saveBatch(regionList, 50); } /** * - 行政区划信息抽取 * param dataList * param regionList * param parentId */ public void extractDistrict(ListDistrictDTO dataList, ListRegionInfo regionList, Long parentId) { if (StringUtils.isNotEmpty(dataList)) { for (DistrictDTO dto : dataList) { Long pkId IdWorker.getId(); String center dto.getCenter(); String polyline dto.getPolyline(); String level dto.getLevel(); double lon Double.parseDouble(center.split(,)[0]); double lat Double.parseDouble(center.split(,)[1]); String centerGeomWkt PolygonStringToWKTConverter.point(lon, lat); RegionInfo region new RegionInfo(pkId, parentId, dto.getCityCode(), dto.getAdcode(), dto.getName(), center, level, lon, lat, SRID 4326 ; centerGeomWkt); if(StringUtils.isNotEmpty(polyline)) { String polylineGeomWkt PolygonStringToWKTConverter.convertToWKT(polyline); region.setPolylineGeom(SRID 4326 ; polylineGeomWkt);//拼接srid实现动态写入); } regionList.add(region); if (StringUtils.isNotEmpty(dto.getDistricts())) { extractDistrict(dto.getDistricts(), regionList, pkId); } } } } /** * - 从响应文本中获取边界 * param responseResult 响应文本 * return */ public String getPolyline(String responseResult) { String result ; if (StringUtils.isEmpty(responseResult)) { return result; } DistrictRespDTO districtRespDTO new Gson().fromJson(responseResult, DistrictRespDTO.class); if(null ! districtRespDTO StringUtils.isNotEmpty(districtRespDTO.getDistricts())) { result districtRespDTO.getDistricts().get(0).getPolyline(); } return result; } }使用以上代码就可以实现将行政区划代码离线存储保存到空间数据库中。大家可以使用Junit的方式进行集成也可以做成API的方式进行调用。需要说明的是在使用高德地图时返回的数据坐标是高德的坐标系在设置SRID时大家可以使用4326但是在程序中需要进行标注尤其是在别的底图上展示时对坐标进行处理处理偏移的问题。具体的处理方法这里不进行赘述。之前的博客中已经做过介绍。四、成果展示本节将对深圳的三级行政区划信息进行展示包括直接在PostGIS中进行查询和WebGIS可视化。以此验证我们的数据采集是否成功。1、PostGIS数据查询在我们的程序中调用数据库的方法后可以实现将深圳市的三级行政区划数据进行PostGIS存储下面来验证一下是否成功使用以下SQL语句查询select * from biz_region_info;在Navicat客户端中执行以上sql后在返回结果中可以看到以下内容如果能看到输出说明数据已经成功进行了采集。2、WebGIS可视化根据实际的需要我们可以将上述的行政区划数据进行空间可视化。这里我们使用Leaflet对深圳市的三级区划进行展示这里仅演示实际的效果具体Leaflet的集成内容之前有系列博客讲解。深圳市行政区划坪山行政区划五、总结以上就是本文的主要内容本文将深入探讨如何结合强大的 SpringBoot 框架和专业的地理空间数据库 PostGIS以高德地图开放平台为例实现在线地图行政区划数据的离线存储以满足多样化的业务需求提升系统的灵活性和可靠性。通过本次实践探索我们不仅能够掌握 SpringBoot 和 PostGIS 在地理空间数据处理方面的应用还能深入了解在线地图数据离线存储的关键技术和实现方法。这将为我们在地理信息系统开发、大数据处理、移动应用开发等领域提供宝贵的经验和参考。行文仓促定有不足之处欢迎各位朋友在评论区批评指正不胜感激。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

什么样的网站做百度广告好华为手机网站建设策划方案

文章目录 系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统截图 盘ython-flask-django_sd6vz0 学习课程辅助系统设计与实现 项目技术简介 Python版本&#…

张小明 2025/12/30 15:04:39 网站建设

房产中介如何做网站wordpress设置背景

Ext3文件系统:日志功能解析与应用 1. Ext3文件系统概述 Ext3是从Ext2发展而来的增强型文件系统,其设计主要基于两个理念:一是成为日志式文件系统;二是尽可能与旧的Ext2文件系统兼容。 Ext3很好地实现了这两个目标。它主要基于Ext2,磁盘上的数据结构与Ext2基本相同。如果…

张小明 2025/12/30 15:04:04 网站建设

上海手机网站制作常熟网站网站建设

Bootstrap Icons 终极指南:2000免费开源图标库完整使用教程 【免费下载链接】icons Official open source SVG icon library for Bootstrap. 项目地址: https://gitcode.com/gh_mirrors/ic/icons 还在为项目寻找合适的图标而烦恼吗?Bootstrap Ico…

张小明 2025/12/30 15:02:56 网站建设

公司做企业网站的必要性免费关键词挖掘工具

多组学因子分析MOFA:让复杂生物数据开口说话的秘密武器 🧬 【免费下载链接】MOFA Multi-Omics Factor Analysis 项目地址: https://gitcode.com/gh_mirrors/mo/MOFA 还在为海量的转录组、蛋白质组、表观基因组数据发愁吗?MOFA多组学因…

张小明 2025/12/30 15:02:21 网站建设

在线刷关键词网站排名电商网站建设的意义

本文来源:k学长的深度学习宝库,点击查看源码&详细教程。深度学习,从入门到进阶,你想要的,都在这里。包含学习专栏、视频课程、论文源码、实战项目、云盘资源等。 1、研究背景与动机 (1)人体…

张小明 2025/12/30 15:01:46 网站建设

温州网站提升排名招标网站建设

EmotiVoice语音合成在图书馆自助服务系统中的便捷应用 在一座现代化的智慧图书馆里,一位视障读者轻轻触碰自助终端屏幕,询问:“《平凡的世界》在哪里?”几秒钟后,一个温和、清晰且略带关切语气的声音响起:“…

张小明 2025/12/30 15:00:39 网站建设