shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)
目录
一、GeoJSON是什么
二、GeoJSON的结构组成
2.1、点(Point)数据示例
2.2、线(LineString)数据示例
2.3、面(Polygon)数据示例
2.4、特征(Feature)数据示例
2.5、特征集合(Feature Collection)数据示例
三、GeoJSON的获取方式
3.1、在线网站mapshaper
3.1.1、mapshaper简介
3.1.2、操作步骤
①载入Shapefile数据
②点击导出
③选择数据格式并导出
3.2、使用python将Shapefile转化为GeoJSON
3.2.1、安装geopandas库
3.2.2、使用geopandas读取Shapefile文件,并转换为GeoJSON格式
3.2.3、使用geopandas库提供的simplify()方法来控制精度
四、总结
一、GeoJSON是什么
GeoJSON是一种编码各种地理数据结构的格式。它是JSON(JavaScript Object Notation)的一个地理空间扩展,用于在网络中交换地理数据。GeoJSON对象可以表示几何(点、线、面)、特征(包含几何和属性的对象)以及特征集合。
GeoJSON的核心组成部分包括:
- 点(Point):表示地理空间中的一个具体点。
- 线(LineString):由两个或多个点组成的线段。
- 面(Polygon):由多个点组成的闭合环,通常用于表示地理区域。
- 多点(MultiPoint):多个点的集合。
- 多线(MultiLineString):多个线段的集合。
- 多面(MultiPolygon):多个多边形的集合。
- 几何集合(Geometry Collection):不同类型几何对象的集合。
- 特征(Feature):包含几何对象和属性的组合。
- 特征集合(Feature Collection):多个特征的集合。
GeoJSON广泛应用于地理信息系统(GIS)、地图服务和位置智能应用中,是许多现代地图库和地理数据服务的标准格式之一。由于其基于JSON,GeoJSON易于阅读和编写,同时也方便与Web技术集成。
二、GeoJSON的结构组成
GeoJSON是一种基于JSON格式的地理数据编码标准,其结构由一系列的键值对组成,用于描述地理空间数据。下面是GeoJSON的主要组成结构:
-
类型(type):GeoJSON对象的类型,如"Point"、"LineString"、"Polygon"等。
-
坐标(coordinates):表示几何对象的位置,由经纬度组成的数组。对于不同的几何类型,坐标的格式会有所不同。
-
属性(properties):一个JSON对象,包含与几何对象相关的属性信息。
-
特征(Feature):一个包含几何对象和属性的对象,它有以下键:
- "type": "Feature":表示这是一个特征对象。
- "geometry":几何对象,可以是"Point"、"LineString"、"Polygon"等。
"properties":与几何对象相关的属性。
-
特征集合(Feature Collection):一个包含多个特征的对象,它有以下键:
- "type": "FeatureCollection":表示这是一个特征集合对象。
"features":一个数组,包含该集合中的所有特征对象。
- "type": "FeatureCollection":表示这是一个特征集合对象。
-
CRS(坐标参考系统):可选字段,指定了GeoJSON数据使用的坐标系统。
2.1、点(Point)数据示例
{"type": "Point","coordinates": [longitude, latitude]
}
2.2、线(LineString)数据示例
{"type": "LineString","coordinates": [[longitude1, latitude1],[longitude2, latitude2],// 更多点]
}
2.3、面(Polygon)数据示例
{"type": "Polygon","coordinates": [[[longitude1, latitude1],[longitude2, latitude2],// 更多点,形成闭合环],// 可选:内部环(洞)]
}
2.4、特征(Feature)数据示例
// point feature{"type": "Feature","geometry": {"type": "Point","coordinates": [longitude, latitude]},"properties": {"property1": "value1",// 更多属性}
}// line feature{"type": "Feature","geometry": {"type": "LineString","coordinates": [[-122.4194, 47.8584],[-122.4141, 47.8586],[-122.4112, 47.8583]]},"properties": {"name": "LineString Example","description": "This is a line feature."}
}// polygon feature{"type": "Feature","geometry": {"type": "Polygon","coordinates": [[[-122.4159, 47.8581],[-122.4159, 47.8595],[-122.4126, 47.8591],[-122.4126, 47.8579],[-122.4159, 47.8581]]]},"properties": {"name": "Polygon Example","description": "This is a polygon feature."}
}
2.5、特征集合(Feature Collection)数据示例
{"type": "FeatureCollection","features": [{"type": "Feature","geometry": {"type": "Point","coordinates": [longitude, latitude]},"properties": {"property1": "value1",// 更多属性}},{"type": "Feature","geometry": {"type": "LineString","coordinates": [[-122.4194, 47.8584],[-122.4141, 47.8586],[-122.4112, 47.8583]]},"properties": {"name": "LineString Example","description": "This is a line feature."}},{"type": "Feature","geometry": {"type": "Polygon","coordinates": [[[-122.4159, 47.8581],[-122.4159, 47.8595],[-122.4126, 47.8591],[-122.4126, 47.8579],[-122.4159, 47.8581]]]},"properties": {"name": "Polygon Example","description": "This is a polygon feature."}}// 更多特征]
}
三、GeoJSON的获取方式
3.1、在线网站mapshaper
3.1.1、mapshaper简介
传送门:mapshaper
这玩意儿谁用谁知道,特别方便。缺点就是不知道怎么调整精度,精度有些太高了,随随便便一个省的地级市GeoJSON都有十几MB,几十万甚至上百万组坐标点,很多时候不需要那么精确,数据量太大会导致可读性严重降低,并且二次处理困难,读取速度受限。
3.1.2、操作步骤
①载入Shapefile数据

②点击导出

③选择数据格式并导出

就这样一个不完整的边界地图,就有4MB的数据量,真的有点夸张,其实大多数情况下这种数据导出的GeoJSON能有个100KB就完全够用了。
3.2、使用python将Shapefile转化为GeoJSON
3.2.1、安装geopandas库
pip install geopandas
3.2.2、使用geopandas读取Shapefile文件,并转换为GeoJSON格式
import geopandas as gpd# 读取Shapefile文件
shp_file_path = 'path_to_your_shapefile.shp' # 替换为你的Shapefile路径
gdf = gpd.read_file(shp_file_path)# 将GeoDataFrame转换为GeoJSON格式
# epsg=4326代表WGS84坐标系,不需要坐标系可以省略该参数
geojson = gdf.to_crs(epsg=4326).to_json()# 可以选择将GeoJSON保存到文件
with open('output.geojson', 'w') as f:f.write(geojson)
3.2.3、使用geopandas库提供的simplify()方法来控制精度
import geopandas as gpd# 读取Shapefile文件
shp_file_path = 'path_to_your_shapefile.shp' # 替换为你的Shapefile路径
gdf = gpd.read_file(shp_file_path)# 使用simplify方法简化几何,tolerance参数控制简化的精度
# 值越小,简化的程度越高,点的数量越少
gdf_simplified = gdf.simplify(tolerance=0.001, preserve_topology=True)# 将简化后的GeoDataFrame转换为GeoJSON格式
geojson = gdf_simplified.to_json()# 将GeoJSON保存到文件
with open('output_simplified.geojson', 'w') as f:f.write(geojson)
四、总结
在使用Openlayers、leaflet、mapbox等地图控件的时候,GeoJSON几乎是不可避免打交道的数据类型,如果您想要从事gis行业相关的开发工作,本篇文章应该能为您带来一些帮助。
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
相关文章:
shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)
目录 一、GeoJSON是什么 二、GeoJSON的结构组成 2.1、点(Point)数据示例 2.2、线(LineString)数据示例 2.3、面(Polygon)数据示例 2.4、特征(Feature)数据示例 2.5、特征集合&…...
没有强有力的科技支撑,就没有保密工作的高质量发展。新修订的《中华人民共和国保守国家秘密法》在总则中新增保密科技创新有关内容包括()
没有强有力的科技支撑,就没有保密工作的高质量发展。新修订的《中华人民共和国保守国家秘密法》在总则中新增保密科技创新有关内容包括() 点击查看答案内容: A.国家鼓励和支持保密科学技术研究和应用B.提升自主创新能力 C.明确依法保护保密领…...
【快速入门】数据库的增删改查与结构讲解
文章的操作都是基于小皮php study的MySQL5.7.26进行演示 what 数据库是能长期存储在计算机内,有组织的,可共享的大量数据的集合。数据库中的数据按照一定的数据模型存储,具有较小的冗余性,较高的独立性和易扩展性,并为…...
使用AIGC生成软件类图表
文章目录 如何使用 AI 生成软件类图表什么是 MermaidMermaid 的图片如何保存?mermaid.liveDraw.io Mermaid可以画什么图?流程图时序图 / 序列图类图状态图甘特图实体关系图 / ER图 如何使用 AI 生成软件类图表 ChatGPT 大语言模型不能直接生成各类图表。…...
机器学习实践:超市商品购买关联规则分析
第2关:动手实现Apriori算法 任务描述 本关任务:编写 Python 代码实现 Apriori 算法。 相关知识 为了完成本关任务,你需要掌握 Apriori 算法流程。 Apriori 算法流程 Apriori 算法的两个输人参数分别是最小支持度和数据集。该算法首先会生成所…...
自动化图像识别:提高效率和准确性的新途径
自动化图像识别是人工智能领域中的一项关键技术,它通过算法自动解析图像内容,为各种应用提供准确的信息。随着技术的不断发展,自动化图像识别在提高效率和准确性方面展现出新的途径。 一、深度学习技术的应用 深度学习是自动化图像识别领域…...
根据最近拒包项目总结,详细讲解Google最新政策(上)
关于占比最多的移动垃圾软件拒审问题 移动垃圾软件(Mobile Unwanted Software)特征表现1> 具有欺骗性,承诺其无法实现的价值主张。2> 诱骗用户进行安装,或搭载在用户安装的其他程序上。3> 不向用户告知其所有主要功能和重要功能。4> 以非预期方式影响用户的系统…...
【Qt之OpenGL】01创建OpenGL窗口
1.创建子类继承QOpenGLWidget 2.重写三个虚函数 /** 设置OpenGL的资源和状态,最先调用且调用一次* brief initializeGL*/ virtual void initializeGL() override; /** 设置OpenGL视口、投影等,当widget调整大小(或首次显示)时调用* brief resizeGL* param w* para…...
如何判断代理IP质量?
由于各种原因(从匿名性和安全性到绕过地理限制),代理 IP 的使用变得越来越普遍。然而,并非所有代理 IP 都是一样的,区分高质量和低质量的代理 IP 对于确保流畅、安全的浏览体验至关重要。以下是评估代理 IP 质量时需要…...
2023-2024年Web3行业报告合集(精选13份)
Web3行业报告(精选13份) 2023-2024年 来源:2023-2024年Web3行业报告合集(精选13份) 【以下是资料目录】 2023Web3产业发展现状分析及国内外落地实践报告 2023模块化区块链承载Web3.0应用的新模式 2023年AI应用需求…...
CSS中文本样式(详解网页文本样式)
目录 一、Text介绍 1.概念 2.特点 3.用法 4.应用 二、Text语法 1.文本格式 2.文本颜色 3.文本的对齐方式 4.文本修饰 5.文本转换 6.文本缩进 7.color:设置文本颜色。 8.font-family:设置字体系列。 9.font-size:设置字体大小。…...
tensorflow学习笔记(2)线性回归-20240507
通过调用Tensorflow计算梯度下降的函数tf.train.GradientDescentOptimizer来实现优化。 代码如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- #程序作用: #线性回归:通过调用Tensorflow计算梯度下降的函数tr.train.GradientDescentOptimizer来实现优化。import os …...
【JavaScript】作用域
作用域是指在程序中定义变量的区域,决定了这些变量在哪里可以被访问和使用。JavaScript 中的作用域有全局作用域、函数作用域和块级作用域。 1. 什么是作用域? 作用域是代码中定义变量的区域,它决定了变量的可见性和生命周期。作用域规定了…...
C++程序设计教案
文章目录: 一:软件安装环境 第一种:vc2012 第二种:Dev-C 第三种:小熊猫C 二:语法基础 1.相关 1.1 注释 1.2 换行符 1.3 规范 1.4 关键字 1.5 ASCll码表 1.6 转义字符 2.基本框架 2.1 第一种&…...
修改Ubuntu远程登录欢迎提示信息
无论何时登录公司的某些生产系统,你都会看到一些登录消息、警告或关于你已登录服务器的信息,如下所示。 修改方式 1.打开ubuntu终端,进入到/etc/update-motd.d目录下面 可以发现目录中的文件都是shell脚本, 用户登录时服务器会自动加载这个目录中的文件…...
暗区突围pc端下载教程 暗区突围pc端怎么下载
暗区突围pc端下载教程 暗区突围pc端怎么下载 《暗区突围》是一款刺激的第一人称射击游戏。目前pc版本要上线了,即将在5月正式上线。在这款游戏里,我们会在随机的时间、地点,拿着不一定的装备,跟其他玩家拼个高低,还需…...
大数据技术原理与技术简答
1、HDFS中名称节点的启动过程 名称节点在启动时,会将FsImage 的内容加载到内存当中,此时fsimage是上上次关机时的状态。然后执行 EditLog 文件中的各项操作,使内存中的元数据保持最新。接着创建一个新的FsImage 文件和一个空的 Editlog 文件…...
Mybatis的简介和下载安装
什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的…...
大历史下的 tcp:一个松弛的传输协议
如果 tcp 是一个相对松弛的协议,会发生什么。 所谓松弛感,意思是它允许 “漏洞”,允许可靠传输的不封闭,大致就是:“不求 100% 可靠,只要 90%(或多或少) 可靠,另外 10% 的错误可检测到” or “…...
加州大学欧文分校英语中级语法专项课程03:Tricky English Grammar 学习笔记
Tricky English Grammar Course Certificate Course Intro 本文是学习 https://www.coursera.org/learn/tricky-english-grammar?specializationintermediate-grammar 这门课的学习笔记 文章目录 Tricky English GrammarWeek 01: Nouns, Articles, and QuantifiersLearning …...
XNBCLI终极指南:如何轻松解包打包星露谷物语XNB文件
XNBCLI终极指南:如何轻松解包打包星露谷物语XNB文件 【免费下载链接】xnbcli A CLI tool for XNB packing/unpacking purpose built for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/xn/xnbcli 想要深度定制星露谷物语游戏体验吗?…...
减肥成功的人,都有这 4 个共同点
减肥成功的人,都有这 4 个共同点 为什么你总是减肥失败,而有的人却轻松瘦下来不反弹? 今天告诉你真相 👇 01| 吃够基础代谢值 ❌ 极端节食 → 代谢下降 → 越减越肥 ✅ 男生 ≥1400 大卡,女生 ≥1100 大卡 …...
HEIF Utility:当跨平台技术遇上真实世界的照片困境
HEIF Utility:当跨平台技术遇上真实世界的照片困境 【免费下载链接】HEIF-Utility HEIF Utility - View/Convert Apple HEIF images on Windows. 项目地址: https://gitcode.com/gh_mirrors/he/HEIF-Utility 你是否曾经历过这样的场景?用iPhone记…...
告别SAP GUI!Notepad++配置ABAP语法高亮,离线查看代码更高效
告别SAP GUI!Notepad配置ABAP语法高亮,离线查看代码更高效 对于ABAP开发者而言,代码阅读和分析是日常工作中不可或缺的部分。然而,传统的SAP GUI环境并非总是最便捷的选择——无论是通勤途中、客户现场无系统访问权限,…...
Armbian编译避坑指南:如何绕过‘Docker不可用’及国内网络依赖问题,成功构建RK3588固件
Armbian编译实战:RK3588平台高效构建与网络优化策略 当国内开发者尝试为RK3588这类高性能ARM平台定制Armbian系统时,往往会遇到两个"拦路虎":Docker环境配置报错和海外资源下载困难。本文将以Rock 5B开发板为例,通过全本…...
RPG Maker Decrypter:如何5步解密RPG Maker加密资源并生成可编辑项目
RPG Maker Decrypter:如何5步解密RPG Maker加密资源并生成可编辑项目 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/g…...
Helix QAC 2023.1更新:编码标准覆盖率如何提升C/C++项目合规性
1. 项目概述:一次聚焦于“合规性”的精准升级最近在梳理团队今年的代码质量工具链时,Helix QAC 2023.1的更新通知引起了我的注意。作为一名常年与C/C代码质量、功能安全标准(如MISRA、AUTOSAR C14)打交道的开发者,我对…...
HS2-HF_Patch汉化补丁:3分钟打造完美中文游戏体验
HS2-HF_Patch汉化补丁:3分钟打造完美中文游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面而烦恼吗…...
华为昇腾PTO指令集优化SSA架构Gather操作
华为昇腾的PTO(Pipeline Tensor Operations)指令集通过其异构流水线、内存层次优化和软硬件协同设计,为优化亚二次注意力(SSA)架构中的不规则Gather(聚集)操作提供了系统性的解决方案。这些优化…...
STM32CubeMX配置FreeRTOS时,那个不起眼的定时器TIM16到底在干嘛?新手避坑指南
STM32CubeMX配置FreeRTOS时,那个不起眼的定时器TIM16到底在干嘛?新手避坑指南 第一次在STM32CubeMX里勾选FreeRTOS组件时,很多开发者会对配置页面底部那个"Hardware Timer"选项感到困惑——为什么默认选中了TIM16?这个看…...
