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 …...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...