1. 如何在地質雲下載鑽孔數據
1、需要在平台注冊一個賬號,在下載數據之前需求清楚你需要的數據是什麼。
2、通過「數據檢索」菜單進行數據選擇,在檢索結果列表可以選擇需要下載的數據。
3、數據檢索的方式有多種(基於空間位置、經緯度等),從平台獲取的數據基本上都是1級產品,經過正射校正和雲、雪等預處理的產品。
4、獲取到這些數據後可以通過一些遙感軟體對影像的信息進行解譯,計算最終獲得需要的成果。
5、不清楚需要的數據,可以通過「數據資源」菜單查看平台提供的所有數據資源,在選擇出所需的數據。地理空間數據雲平台是一個公共的遙感數據產品獲取平台。
2. 怎麼在中國地理空間數據雲找梅州市行政邊界
今天我們以高德地圖為例,講解一下如何獲取全國省市區行政邊界數據。
高德開放平台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種基於高德地圖獲取全國省市區行政
3. 地理空間數據雲下載需要用戶花錢么
不需要的。
地理空間數據雲是國內能免費下載數據較全的一個網站,提供LANDSAT系列數據、MODIS系列數據、DEM數字高程數據、EO-1數據等。比較有特色的該網站那還提供數據眾包服務。
地理空間數據,定義:面向主題的、集成的、動態更新的、持久的空間數據集合。
所屬學科:地理學(一級學科),地理信息系統(二級學科)空間數據:是數據的一種特殊類型。它是指凡是帶有空間坐標的數據。
地理空間數據:是空間數據的一種特殊類型。它是指帶有地理坐標的數據,包括資源、環境、經濟和社會等領域的一切帶有地理坐標的數據,是地理實體的空間特徵和屬性特徵的數字描述。
4. 地理空間數據雲打開文件夾為空
這樣的狀況下,應該上下載失敗導致的,建議你重新下載,可以去地理空間數據雲下載。
地理空間數據雲(GSCloud),由中科院計算機網路信息中心於2008年創立,是國際先進,國內最具影響力的地學大數據平台。
平台緊密圍繞科研人員在地理空間數據搜索、獲取、存儲、分析和可視化等方面的迫切需求,利用雲計算、大數據等新一代信息技術,自主研發了可靠的大規模地理空間數據實時分析引擎,實現了億級元數據高效管理和PB級實體數據分析服務。平台不斷創新服務模式,成功實現海量數據實時在線分析服務、在線眾包創新服務及在線協同標注服務等。