水文数据的采集 | 您所在的位置:网站首页 › qgis文件保存路径 › 水文数据的采集 |
一、获取站点列表数据
参考 水利部河库水文实时数据全国批量接口【最新版】_数据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 实验室设备网 版权所有 |