水文数据的采集 您所在的位置:网站首页 qgis文件保存路径 水文数据的采集

水文数据的采集

2023-03-31 15:09| 来源: 网络整理| 查看: 265

一、获取站点列表数据

参考

水利部河库水文实时数据全国批量接口【最新版】_数据API_API-云市场-阿里云 (aliyun.com)

1.请求示例

Java实现

package com.example.utils; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; import java.util.HashMap; import java.util.Map; /** * @author King * @description: 站点列表数据接口 * @create 2023-03-21-12:01- */ public class Stations { public static void main(String[] args) { String host = "https://hydro.market.alicloudapi.com"; String path = "/api/water_rain/stations"; String method = "GET"; String appcode = "你自己的AppCode"; Map headers = new HashMap(); //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105 headers.put("Authorization", "APPCODE " + appcode); Map querys = new HashMap(); //指定想要查询的省份 querys.put("province", "xx省"); try { /** * 重要提示如下: * HttpUtils请从 * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java * 下载 * * 相应的依赖请参照 * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml */ HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys); System.out.println(response.toString()); //获取response的body System.out.println(EntityUtils.toString(response.getEntity())); } catch (Exception e) { e.printStackTrace(); } } }

Tips:

appcode的获取方式:

在这里插入图片描述

这里把阿里云请求示例中的System.out.println(EntityUtils.toString(response.getEntity()));注释打开,否则返回的响应中不包含站点数据。

2.响应示例

正常执行之后返回的数据样式:

{ "data": [ { "流域": "长江", "测站类型": "河道站", "纬度": 30.25, "河名": "长江", "经度": 115.05, "地址": "鄂-黄石市", "水系": "长江中游干流下段", "行政区": "湖北省 黄石市", "站名": "黄石港" } ], "errCode": 0, "requestId": "7237c65316264300934626749e46a1", "errMsg": "success", "apiLog": null } 3.接口所需的依赖 com.alibaba fastjson 1.2.15 org.apache.httpcomponents httpclient 4.2.1 org.apache.httpcomponents httpcore 4.2.1 commons-lang commons-lang 2.6 org.eclipse.jetty jetty-util 9.3.7.v20160115 二、数据处理

需要做的事情就是将处理返回的Json数据,将其转化为shp格式的数据,再通过PostgreSQL的转换工具将shp文件导入数据库

1.处理Json数据

将Json数据转换为shp格式数据分为以下几步:

1.1转换成TXT文件

将返回的Json数据保存下来到一个xxx.json的文件中,然后将其转换成.txt文件

转换前:

在这里插入图片描述

转换后:

在这里插入图片描述

1.1.1准备工作

在转换之前,需要手动为Json数据中的经纬度添加双引号使其变为字符串形式,否则后续使用Python时会报错TypeError:expected str instance, float found(由于不会Python,我只好一个一个加,如果有熟悉Python的同学可以在评论区留言)

在这里插入图片描述

1.1.2转换

使用Python来完成转换工作(代码的具体含义可以参见另一篇博客——暂时还没写)

>>> import json >>> path='xxxxxx' >>> with open(path + 'xxx.json','r',encoding='utf-8') as fp: ... data=json.load(fp) >>> data.keys() dict_keys(['data', 'errCode', 'requestId', 'errMsg', 'apiLog']) >>> p=data['data'] >>> p[0] {'行政区': '河南省 南阳市', '地址': '南阳市西峡县城郊乡十亩地村', '流域': '长江', '水系': '丹江', '河名': '老灌河', '站 名': '石门', '测站类型': '水库站', '经度': '111.4752', '纬度': '33.3698'} >>> p[0].keys() dict_keys(['行政区', '地址', '流域', '水系', '河名', '站名', '测站类型', '经度', '纬度']) >>> f=['行政区', '地址', '流域', '水系', '河名', '站名', '测站类型', '经度', '纬度'] >>> out=[] >>> for poi in p: ... line=[] ... for i in f: ... line.append(poi[i]) ... out.append(line) ... >>> len(out) 166 >>> out[0] ['河南省 南阳市', '南阳市西峡县城郊乡十亩地村', '长江', '丹江', '老灌河', '石门', '水库站', '111.4752', '33.3698'] >>> output=open('xxx.txt','wb') >>> t=['district', 'address', 'basin', 'riversys', 'river', 'station', 'type', 'lng', 'lat'] >>> title='\t'.join(t)+'\n' >>> print(title) district address basin riversys river station type lng lat >>> output.write(title.encode('utf8')) 59 >>> for l in out: ... output.write(('\t'.join(l)+'\n').encode('utf8')) ... 118 xxx xxx >>> output.close()

这里只需要修改3个地方(使用的Python版本为3.7.3)

path=‘xxxxxx’——Json文件保存的路径(Windows的\为转义字符,需要改为\\)with open(path + ‘xxx.json’,‘r’,encoding=‘utf-8’) as fp:—xxx为Json文件的文件名output=open(‘xxx.txt’,‘wb’)——xxx为输出TXT文件的文件名

至此就完成了Json格式数据转为TXT文件

1.2转换成shp文件

将txt文件转为shp文件需要以下几步:

1.2.1转为csv文件

将TXT文件中的全部内容复制,新建一个Excel文件并将其粘贴到Excel中(如图)。

在这里插入图片描述

然后将该文件另存为csv文件

1.2.2使用QGIS或ArcMap导入

这里选择使用QGIS(开源免费),QGIS的下载安装可以自行百度,不再赘述。

打开QGIS,点击图层,选择添加图层,点击添加分隔文本图层

在这里插入图片描述

如图操作

在这里插入图片描述

添加图层成功之后可以查看属性表(没有出现中文乱码)

在这里插入图片描述

1.2.3导出shp文件

导出图层为shp文件

在这里插入图片描述

设置生成shp文件路径、编码等信息

在这里插入图片描述

到对应路径下查看生成的shp文件

在这里插入图片描述

Json数据处理完成

2.shp文件入库

将shp文件导入PostgreSQL数据库中

创建一个数据库,并安装PostGIS扩展

借助PostGIS的PostGIS PostGIS Bundle 3 for PostgreSQL x64 14 Shapefile and DBF Loader Exporter工具可以将shp文件导入PostgreSQL数据库中(步骤如图)

在这里插入图片描述

查看数据库 在这里插入图片描述

大功告成!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有