首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)

  • 25-02-22 02:41
  • 2363
  • 12912
blog.csdn.net

目录

一、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的核心组成部分包括:

  1. 点(Point):表示地理空间中的一个具体点。
  2. 线(LineString):由两个或多个点组成的线段。
  3. 面(Polygon):由多个点组成的闭合环,通常用于表示地理区域。
  4. 多点(MultiPoint):多个点的集合。
  5. 多线(MultiLineString):多个线段的集合。
  6. 多面(MultiPolygon):多个多边形的集合。
  7. 几何集合(Geometry Collection):不同类型几何对象的集合。
  8. 特征(Feature):包含几何对象和属性的组合。
  9. 特征集合(Feature Collection):多个特征的集合。

        GeoJSON广泛应用于地理信息系统(GIS)、地图服务和位置智能应用中,是许多现代地图库和地理数据服务的标准格式之一。由于其基于JSON,GeoJSON易于阅读和编写,同时也方便与Web技术集成。

二、GeoJSON的结构组成

        GeoJSON是一种基于JSON格式的地理数据编码标准,其结构由一系列的键值对组成,用于描述地理空间数据。下面是GeoJSON的主要组成结构:

  1. 类型(type):GeoJSON对象的类型,如"Point"、"LineString"、"Polygon"等。

  2. 坐标(coordinates):表示几何对象的位置,由经纬度组成的数组。对于不同的几何类型,坐标的格式会有所不同。

  3. 属性(properties):一个JSON对象,包含与几何对象相关的属性信息。

  4. 特征(Feature):一个包含几何对象和属性的对象,它有以下键:

    • "type": "Feature":表示这是一个特征对象。
    • "geometry":几何对象,可以是"Point"、"LineString"、"Polygon"等。
      "properties":与几何对象相关的属性。
  5. 特征集合(Feature Collection):一个包含多个特征的对象,它有以下键:

    • "type": "FeatureCollection":表示这是一个特征集合对象。
      "features":一个数组,包含该集合中的所有特征对象。
  6. CRS(坐标参考系统):可选字段,指定了GeoJSON数据使用的坐标系统。

2.1、点(Point)数据示例

  1. {
  2. "type": "Point",
  3. "coordinates": [longitude, latitude]
  4. }

2.2、线(LineString)数据示例

  1. {
  2. "type": "LineString",
  3. "coordinates": [
  4. [longitude1, latitude1],
  5. [longitude2, latitude2],
  6. // 更多点
  7. ]
  8. }

2.3、面(Polygon)数据示例

  1. {
  2. "type": "Polygon",
  3. "coordinates": [
  4. [
  5. [longitude1, latitude1],
  6. [longitude2, latitude2],
  7. // 更多点,形成闭合环
  8. ],
  9. // 可选:内部环(洞)
  10. ]
  11. }

2.4、特征(Feature)数据示例

  1. // point feature
  2. {
  3. "type": "Feature",
  4. "geometry": {
  5. "type": "Point",
  6. "coordinates": [longitude, latitude]
  7. },
  8. "properties": {
  9. "property1": "value1",
  10. // 更多属性
  11. }
  12. }
  13. // line feature
  14. {
  15. "type": "Feature",
  16. "geometry": {
  17. "type": "LineString",
  18. "coordinates": [
  19. [-122.4194, 47.8584],
  20. [-122.4141, 47.8586],
  21. [-122.4112, 47.8583]
  22. ]
  23. },
  24. "properties": {
  25. "name": "LineString Example",
  26. "description": "This is a line feature."
  27. }
  28. }
  29. // polygon feature
  30. {
  31. "type": "Feature",
  32. "geometry": {
  33. "type": "Polygon",
  34. "coordinates": [
  35. [
  36. [-122.4159, 47.8581],
  37. [-122.4159, 47.8595],
  38. [-122.4126, 47.8591],
  39. [-122.4126, 47.8579],
  40. [-122.4159, 47.8581]
  41. ]
  42. ]
  43. },
  44. "properties": {
  45. "name": "Polygon Example",
  46. "description": "This is a polygon feature."
  47. }
  48. }

2.5、特征集合(Feature Collection)数据示例

  1. {
  2. "type": "FeatureCollection",
  3. "features": [
  4. {
  5. "type": "Feature",
  6. "geometry": {
  7. "type": "Point",
  8. "coordinates": [longitude, latitude]
  9. },
  10. "properties": {
  11. "property1": "value1",
  12. // 更多属性
  13. }
  14. },
  15. {
  16. "type": "Feature",
  17. "geometry": {
  18. "type": "LineString",
  19. "coordinates": [
  20. [-122.4194, 47.8584],
  21. [-122.4141, 47.8586],
  22. [-122.4112, 47.8583]
  23. ]
  24. },
  25. "properties": {
  26. "name": "LineString Example",
  27. "description": "This is a line feature."
  28. }
  29. },
  30. {
  31. "type": "Feature",
  32. "geometry": {
  33. "type": "Polygon",
  34. "coordinates": [
  35. [
  36. [-122.4159, 47.8581],
  37. [-122.4159, 47.8595],
  38. [-122.4126, 47.8591],
  39. [-122.4126, 47.8579],
  40. [-122.4159, 47.8581]
  41. ]
  42. ]
  43. },
  44. "properties": {
  45. "name": "Polygon Example",
  46. "description": "This is a polygon feature."
  47. }
  48. }
  49. // 更多特征
  50. ]
  51. }

三、GeoJSON的获取方式

3.1、在线网站mapshaper

3.1.1、mapshaper简介

        传送门:mapshaper

        这玩意儿谁用谁知道,特别方便。缺点就是不知道怎么调整精度,精度有些太高了,随随便便一个省的地级市GeoJSON都有十几MB,几十万甚至上百万组坐标点,很多时候不需要那么精确,数据量太大会导致可读性严重降低,并且二次处理困难,读取速度受限。

3.1.2、操作步骤

①载入Shapefile数据

②点击导出

 ③选择数据格式并导出

        就这样一个长三角区域的市级行政矢量图,就有1.3MB的数据量,真的有点夸张,其实大多数情况下这种数据导出的GeoJSON能有个100KB就完全够用了。

3.2、使用python将Shapefile转化为GeoJSON

3.2.1、安装geopandas库

pip install geopandas

3.2.2、使用geopandas读取Shapefile文件,并转换为GeoJSON格式

  1. import geopandas as gpd
  2. # 读取Shapefile文件
  3. shp_file_path = 'path_to_your_shapefile.shp' # 替换为你的Shapefile路径
  4. gdf = gpd.read_file(shp_file_path)
  5. # 将GeoDataFrame转换为GeoJSON格式
  6. # epsg=4326代表WGS84坐标系,不需要坐标系可以省略该参数
  7. geojson = gdf.to_crs(epsg=4326).to_json()
  8. # 可以选择将GeoJSON保存到文件
  9. with open('output.geojson', 'w') as f:
  10. f.write(geojson)

3.2.3、使用geopandas库提供的simplify()方法来控制精度

  1. import geopandas as gpd
  2. # 读取Shapefile文件
  3. shp_file_path = 'path_to_your_shapefile.shp' # 替换为你的Shapefile路径
  4. gdf = gpd.read_file(shp_file_path)
  5. # 使用simplify方法简化几何,tolerance参数控制简化的精度
  6. # 值越小,简化的程度越高,点的数量越少
  7. gdf_simplified = gdf.simplify(tolerance=0.001, preserve_topology=True)
  8. # 将简化后的GeoDataFrame转换为GeoJSON格式
  9. geojson = gdf_simplified.to_json()
  10. # 将GeoJSON保存到文件
  11. with open('output_simplified.geojson', 'w') as f:
  12. f.write(geojson)

四、总结

        在使用Openlayers、leaflet、mapbox等地图控件的时候,GeoJSON几乎是不可避免打交道的数据类型,如果您想要从事gis行业相关的开发工作,本篇文章应该能为您带来一些帮助。

        博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览62647 人正在系统学习中
注:本文转载自blog.csdn.net的Watermelo617的文章"https://blog.csdn.net/RenGJ010617/article/details/138395134"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top