1. 地理空间数据云数据覆盖不了一个市怎么办
这次的主要任务是学会下载哨兵二号的遥感影像数据,学长推荐了几个常用的网站如GEE、EOS、USGS、地理空间数据云,我计划把几个网站都尝试一下,下面就按顺序进行尝试:
一、GEE
网址:https://code.earthengine.google.com
GEE(Google Earth Engine),即谷歌地球引擎,据说是世界上使用量最大的云平台(如果真是这样的话,那说明遥感和地信的分量确实很重了)。
登录这个网站需要科学上网,首先需要用一个谷歌账号登录(关于谷歌账号的注册门道也有点多,这里就不细说了),然后用该账号提出申请,申请界面如下:
虽然这里的邮箱使用的是qq邮箱,但还是很不建议使用,最好使用学校的官方邮箱,申请成果的可能性会大一些。
机构就选择所在的大学,类型选择acadamic即可,国家选择China,至于最后的“申请账号来干什么”,我当时是先用网络翻译把我的申请理由给翻译成英文后再复制上去的,具体理由就是说一下要做研究之类的。我当时这样申请之后可以说是秒通过了(邮箱里会收到通知),这也是在之前失败了n次之后的结果。
来到主界面,是这个样子的:
首先导入武汉的矢量文件,注意是压缩包(zip)格式:
通过如下代码可实现导入:
导入结果:
在资源搜索栏中寻找哨兵二号的数据集,并选择导入(IMPORT):
可以看到代码编辑区为我们准备好了代码:
接下来使用如下代码下载影像:
var district = table;
var dsize = district.size();
var district_geometry = district.geometry();
print(dsize);
Map.centerObject(district_geometry,7);
//去云
function maskS2clouds(image) {
var qa = image.select('QA60');
// Bits 10和11分别是云和卷云
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
// Both flags should be set to zero, indicating clear conditions.
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
.and(qa.bitwiseAnd(cirrusBitMask).eq(0));
return image.updateMask(mask).divide(10000);
}
//处理数据,生成数据集
var dataset = ee.ImageCollection('COPERNICUS/S2')
.filterBounds(district_geometry)//区域筛选
.filterDate('2020-01-01', '2020-12-30')//时间范围
// 选择云量
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 1))
.map(maskS2clouds)
.select(['B8', 'B4', 'B3']);
//可视化参数
var rgbVis = {
min: 0.0,
max: 0.3,
bands: ['B8', 'B4', 'B3'],//按照8波段、4波段、3波段放入通道合成
};
var IMAGE = dataset.mosaic();
//下载数据
Export.image.toDrive({
image:IMAGE,
description:'image_really_none',//设置下载任务tasks的名称
scale:10,//分辨率是10m
maxPixels: 1e13,//单幅影像输出的最大像元数
region:district_geometry,//下载范围
fileFormat: 'GeoTIFF',//设置影像导出格式,注意GeoTIFF格式需要所有波段存储类型一致(如不能同时存Int16和Int32)
formatOptions: {
cloudOptimized: true
}
});
可以在右上角的Tasks栏中看到加载的任务:
点击“Open in Drive”,可以从云端下载影像:
将下载后的影像加载到ENVI中进行查看:
二、USGS
网址:EarthExplorer (usgs.gov)
USGS是美国地质调查局的官方网站,同样需要科学上网,我这里使用的是学校邮箱注册的官网账号,登陆后就可以进行数据下载了。
首先,我还是通过想通过矢量数据直接定位武汉,所以就选择"KML/Shapefile Upload",再选择Shapefile格式,加载文件(注意这里加载的文件必须是zip压缩文件形式):
但是很遗憾的是出现了如下状况:
这里显示我的武汉市范围矢量文件不只一个多边形,我有些奇怪,就把文件加载到arcgis里看了下,果然在右上角发现了一个小范围的多边形:
所以我选择从行政区划的角度来选择,在左侧栏中输入关键字“wuhan”即可得到结果:
为了找出下载的具体范围,我们需要进行选定,这里方法比较多,比如说下图中的画圆法,先点击一下可得圆心,再点击一下可得半径:
也可以选择多边形法,这样画的范围可能更为准确:
下面还可以选择影像时间,默认为全部时间段的影像:
接下来选择数据源,这里是哨兵二号:
接下来可以选择一些具体的参数,如云量:
接下来就可以检索到符合条件的一些影像数据了,可以选择第一个像脚印一样的符号来把影像加载到地图上来查看范围(自动会用不同颜色标识):
选择第五个图标即可进行下载:
三、地理空间数据云
网址:地理空间数据云 (gscloud.cn)
在这个上面下数据是比较简单的了,之前做遥感实习时的数据也主要是从这上面下的。打开官网后选择“高级检索”,可以看到界面是非常简洁明了的:
选择数据集为哨兵二号,选择用矢量文件来划定区域:
比较奇怪的是,这里用矢量数据划定区域后找不到合适的影像(可能和之前在USGS下载时的问题一样,由于矢量文件不只一个多边形所导致):
所以这里就采取另一种方法:先根据行政区划找到覆盖武汉市影像,然后再用武汉市范围的矢量数据进行剪裁,这就需要找到能够覆盖武汉市全部范围的图像,总共是3张(之前做实习下的是Landsat8的数据,也是三张即可覆盖武汉全境),注意要检索能够下载的数据,因为很多数据能被检索到但我们却不能下载:
总结
哨兵二号的数据可以从很多网站上下载得到,除了上面介绍的这些还有很多,担上面这三种应当可以满足大部分时候的需求了。
2. 地理空间数据云没有数据怎么办
地理空间数据云没有数据需要注册后才能显示。步骤如下:
1、下载地理空间数据云APP,点进入,登陆。
2、没有帐号需要注册,填写个人资料,就注册成功了。
3、首页高级搜索可以看到数据。
3. 91卫图下载dem如何使用
1、打开网页,搜索“地如衡理空间数据云”,进入其官网,登陆个人账户密码。
2、单击“DEM数字高程模型”,目前提供的DEM数据有SRTM90米分辨率数字高程数据和GDEM30米分辨率数字高程数据二种,可以根据需要选择下载。
3、输入下载范围,点滑橡卜击右方“信穗下载”按钮。下载完成后,用arcgis打开即可。
4. 地理空间数据云,传感器怎么选择
1、首先打开电脑,点击下载软件《地理空间数据云》。
2、其次在软件中找到相对应的设备。
3、最后通过数据转换得出的型号就是最合适的传感器型号。
5. 乌克兰地理空间数据云怎么下载
下载具体步骤如下:
1.注册账号
首先需要注册一个账号。注册账号比较简单。
2.选择数据集
登陆进来以后,我们可以直奔主题,选择自己想要下载的数据。点击高级检索。
点击“点击选择数据集”选择要下载的数据,这里我们选择SRTMDEM90M分辨率数据,然后点击确定。
选择数据集成功
3.选择数据集范围
接下来我们要圈定自己想要下载的区域的DEM,这里提供了5种确定自己研究区范围的选项。对于行政区来说,如果知道自己研究区在哪个区县里,就可以通过这种方式直接选择;如果知道研究区的经纬度范围就可以选择第二种方式下载;行列号与经纬度类似,用的也比较少;地图选择就是直接在地图上手动画一个范围;第五种方法就是直接上传一个.shp文件,然后地图会自动显示该.shp文件范围。
4.数据下载
按照行政区选择范围后,点击“搜索”,就可以得到覆盖数据了。
6. 地理空间数据云云量怎么填
地理数据空间云并不需要填写云量。它是一款中国科学院计算机网络信息中心科学数据中心启动了“国际科学数据服务平台”建设。
2011年,科学数据中心在“国际科学数据服务平台"基础上开始建设“地理空间数据云平台",并于2013年1月正式对外投入使用。
地理数据云使用方法:
1、进入该平台的官方网站,直接在官网上完成账号的注册;
2、完成注册之后,可以进入该平台检索你所需要的信息。
3、如果你想要下载免费的DEM数据,同样需要再注册账号之后在高级检索中选择你想寻找的数据集,之后进行下载操作即可。
7. 地理空间数据云怎么查找公园数据
可以通过地理信息平台或地理信息系统软件来查找公园数据。
地理信息平台和地理信息系统软件都是可以用来处理和展示地理空间数据的工具。在地理信息平台中,可以通过搜索或者浏览的方式来查找公园数据。例如,在网络地图中,可以在搜索框中输入“公园”或者“park”,然后在搜索结果中选择相关的公园,就可以查看公园的位置信息、周边环境等相关数据。在地理信息系统软件中,可以通过导入公园数据或橡侍拦者下载相关的数据集来获谈郑取公园数据。例如,在ArcGIS等地理信息系统软件中,可以通过下载相关的地理空间数据集,从而获取包括公园在内的各种空间数据。
地理空间数据云是一种基于云计算技术的地理信息服务平台,可以提供丰富的地理信息数据和分析工具,帮助用户完成各种空间数据处理和分析工作。在地梁胡理空间数据云中,用户可以通过搜索和浏览的方式来查找公园数据,同时还可以进行空间查询、空间分析等操作,从而获取公园数据的各种属性信息和相关的空间分析结果。对于需要大量地理空间数据处理和分析的用户来说,地理空间数据云是一种非常方便和高效的工具,可以大大提高工作效率和数据准确性。
8. 怎么在中国地理空间数据云找梅州市行政边界
今天我们以高德地图为例,讲解一下如何获取全国省市区行政边界数据。
高德开放平台Web服务API
https://lbs.amap.com/
依次点击开发支持–Web服务–Web服务API,即可进入到高德开放平台Web服务API页面。
在这里插入图片描述
可以发现,官方已开放了行政区域查询的接口。
在这里插入图片描述
点击查看该接口的详细介绍:
在这里插入图片描述
其实就是先申请Key,然后构造Http请求,发送请求解析返回数据即可。
同时接口文档提到,该接口只能返回国、省、市、区的polyline(边界点集合),不支持街道级别,但已经满足我们的需求了。
首先分析下接口请求参数:
在这里插入图片描述
有4点值得关注:
keywords支持行政区名称、citycode、adcode这3种格式,行政区名称可能存在重复(尤其level是县/区时),而citycode只有level在市或市以下才有,只有adcode可以唯一指定某个行政区,所以检索的时候,我们使用adcode作为keywords传入;
subdistrict可以指定子级行政区的嵌套层数;
当最外层的districts超过20个元素时,需要配合page参数来获取全部元素;
只有extensions配置为all时,接口才会返回我们需要的区域边界数据。
想要一次性采集全国省市区行政边界数据的话,第1步肯定是先设法拿到省、市、区的列表,然后逐个遍历。
我们可以设置keywords为"中华人民共和国",然后将subdistrict设置为3,下3层(省、市、区)的子行政区信息就会返回。
这样,我们发送1次请求就可以拿到省、市、区的列表了。
接着,我们将subdistrict调整为1(减少数据冗余),依次遍历各个行政区域即可。
实现代码如下:
# -*- coding:utf-8 -*-
import requests
import time
import mongo_util #自行封装的操作mongodb的工具类
def get_district_info(key, col, time_delay, headers={}):
request_url = 'https://restapi.amap.com/v3/config/district'
country_name = '中华人民共和国'
params = {
'subdistrict':'3',
'extensions':'all',
'key':key,
'output':'json',
'keywords':country_name,
}
# 设置subdistrict为3,1次请求获取到国、省、市、区的信息
country_res = requests.get(url=request_url, headers=headers, params=params).json()
if country_res['status'] != "1":
print("调用高德地图Web API失败!")
return
country = country_res['districts'][0]
col.insert_one(country)
print(f'{country_name}数据插入成功!')
params['subdistrict'] = '1'
# 遍历省
provinces = country['districts']
for province in provinces:
province_name = province['name']
params['keywords'] = province['adcode']
prov_res = requests.get(url=request_url, headers=headers, params=params).json()
if prov_res['status'] == "0":
print(f'{country_name}-{province_name}数据获取失败!')
continue
col.insert_one(prov_res['districts'][0])
print(f'{country_name}-{province_name}数据插入成功!')
time.sleep(time_delay)
# 遍历市
cities = province['districts']
if len(cities) == 0:
continue
for city in cities:
city_name = city['name']
params['keywords'] = city['adcode']
city_res = requests.get(url=request_url, headers=headers, params=params).json()
if city_res['status'] == "0":
print(f'{country_name}-{province_name}-{city_name}数据获取失败!')
continue
col.insert_one(city_res['districts'][0])
print(f'{country_name}-{province_name}-{city_name}数据插入成功!')
time.sleep(time_delay)
# 遍历区
districts = city['districts']
if len(districts) == 0:
continue
for district in districts:
distinct_name = district['name']
params['keywords'] = district['adcode']
distinct_res = requests.get(url=request_url, headers=headers, params=params).json()
if distinct_res['status'] == "0":
print(f'{country_name}-{province_name}-{city_name}-{distinct_name}数据获取失败!')
continue
col.insert_one(distinct_res['districts'][0])
print(f'{country_name}-{province_name}-{city_name}-{distinct_name}数据插入成功!')
time.sleep(time_delay)
# 主函数
if __name__ == '__main__':
key = "******"
# 接口请求之间的间隔
time_delay = 0.01
db_name = 'web_map'
col_name = 'distinct'
# MongoDB数据库所在的服务器
host = '******'
port = 27017
# 获取mongodb的表句柄
col = mongo_util.get_col(db_name, col_name, host, port)
# 获取全国各级行政区的数据
get_district_info(key, col, time_delay)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
因为接口返回的是JSON类型的嵌套数据,所以这里选择MongoDB作为存储组件。
为了防止爬取过程中,进程宕掉导致已请求的数据丢失,可以拿到1条数据就入库1条数据。
避免数据全都在内存中,执行批量插入的过程中异常退出,又得重复请求,但每个账号的天请求次数是有限制的。
同时,各个接口均有QPS阈值,所以我们通过time_delay参数来控制数据采集的频率。
但是高德开方平台Web服务API有天调用次数的限制,如果想获取大量数据,可能需要多个账号或者分多天进行请求,有没有更好的方法呢?
带着这样的疑问,我又看了看高德地图其他的API版块。
JS API
浏览高德开放平台的JS API示例,里面也有个行政区边界查询的Demo。
https://lbs.amap.com/demo/jsapi-v2/example/district-search/draw-district-boundaries
在这里插入图片描述
打开浏览器的"开发者工具",我们抓包一下哪个请求是用来获取行政区域数据的。
在这里插入图片描述
在这里插入图片描述
哈哈哈,其实跟开放的Web API接口地址是一致的,而且通过分析接口请求,我们直接可以拿到key。
也就是说,不需要用自己高德账号里生成的key值了。
使用这个key构建接口请求,悲伤的发现,接口返回异常。
在这里插入图片描述
说明该接口其实还是跟开放的Web API接口还是有区别的,一般体现在请求参数和Headers上。
我们把浏览器抓取到的请求参数和Headers配置原封不动的拷贝过来,再次构建接口请求,此时接口正常返回。
但请求参数里的csid是个啥东西,而且不同行政区域请求里的csid还不同。
在这里插入图片描述
尝试着去掉该参数,然后构建接口请求,发现接口仍然可以正常返回,说明该参数是可选参数,而且不是检索字段。
按照这个思路,我们逐步尝试去掉其他请求参数和Headers里的配置。
发现该接口与开放的Web API接口相比,本质仅有2点不同:
请求参数
请求参数需要额外指定: s=rsv3
Headers
需要添加如下Headers:
在这里插入图片描述
调整原来的代码:
在params里增加s配置
params = {
'subdistrict':'3',
'extensions':'all',
'key':key,
'output':'json',
'keywords':country_name,
's':'rsv3' # 该项配置是关键配置
}
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
在发送请求的时候传入headers
headers = {
'Host': 'restapi.amap.com',
'Referer': 'https://lbs.amap.com/'
}
# 获取mongodb的表句柄
col = mongo_util.get_col(db_name, col_name, host, port)
# 获取全国各级行政区的数据
get_district_info(key, col, time_delay, headers)
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
该种方法的优点是绕开了第1种方法的日调用次数限制(高德是否有额外的反爬策略,待验证)。
AMAP Service
其实前面headrs的Referer配置就提醒我了,是不是高德地图在https://lbs.amap.com/这个地址下也有功能相同的接口。
所以就在高德平台上随意点了点,逛了逛,还真就发现了,哈哈哈。
在这里插入图片描述
与上面两个接口不同的是,这个接口是POST请求,而且竟然不需要指定key,这也太爽了吧,哈哈哈。
接着看一下请求参数:
在这里插入图片描述
参数和开放平台Web服务API的完全一致。
最后看一下表单数据:
在这里插入图片描述
显然表单数据是用来配置请求哪个接口的,这里的config/district代表的就是行政区域查询。
代码调整起来也不难:
# 调整请求的url
request_url = 'https://lbs.amap.com/service/api/restapi'
# 将所有的请求调整为POST,并传入表单数据,例如:
body = {
"type": "config/district",
"version": "v3"
}
country_res = requests.post(url=request_url, params=params, data=body).json()
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
该接口跟第2种接口相比,更近一步,连key值都省略了。
总结
本文介绍了3种基于高德地图获取全国省市区行政
9. 地理空间数据云条带号怎么检索数据
1、确定云条带号。猛禅根据所需要的遥感数据的时间和地点信息,可以查找相应的云条带号。
2、选择数据源。根据所需的数据类型和地区,选择相应的遥灶戚感影像数据源。
3、进行数据检索。在数据源的网站上,使用云条带号或其他相关关键词进行数据检索。使用云条带号进行检索,可以在网站的搜索框中输入云条带号进行检索。使用其他关键词进行检索,可以根据数据源的搜索方式进行操作枝辩尘。