Ⅰ 地理信息系統中的數據來源及獲取方式(明天考試,急)
GIS的數據源,是指建立的地理資料庫所需的各種數據的來源,主要包括地圖、遙感圖像、文本資料、統計資料、實測數據、多媒體數據、已有系統的數據等。
①地圖
點――居民點、采樣點、高程點、控制點等。
線――河流、道路、構造線等。
面――湖泊、海洋、植被等。
注記――地名注記、高程注記等。
②遙感數據
遙感數據是GIS的重要數據源。遙感數據含有豐富的資源與環境信息,在GIS支持下,可以與地質、地球物理、地球化學、地球生物、軍事應用等方面的信息進行信息復合和綜合分析。遙感數據是一種大面積的、動態的、近實時的數據源,遙感技術是GIS數據更新的重要手段。
③文本資料
文本資料是指各行業、各部門的有關法律文檔、行業規范、技術標准、條文條例等,如邊界條約等。這些也屬於GIS的數據。
④統計資料
國家和軍隊的許多部門和機構都擁有不同領域(如人口、基礎設施建設、兵要地誌等)的大量統計資料,這些都是GIS的數據源,尤其是GIS屬性數據的重要來源。
⑤實測數據
野外試驗、實地測量等獲取的數據可以通過轉換直接進入GIS的地理資料庫,以便於進行實時的分析和進一步的應用。GPS(全球定位系統)所獲取的數據也是GIS的重要數據源。
⑥多媒體數據
多媒體數據(包括聲音、錄像等)通常可通過通訊口傳入GIS的地理資料庫中,目前其主要功能是輔助GIS的分析和查詢。
⑦已有系統的數據
GIS還可以從其它已建成的信息系統和資料庫中獲取相應的數據。由於規范化、標准化的推廣,不同系統間的數據共享和可交換性越來越強。這樣就拓展了數據的可用性,增加了數據的潛在價值。
Ⅱ 地理信息系統的數據來源
GPS 系統由3 部分組成:
空間部分:主動式工作衛星:26 顆衛星分布6 個橢圓軌道上,長半軸26600km,高度20200km,時間基準10-12?/FONT>10-13 秒。
控制部分:軌道預報(監測和控制衛星系統),確定系統時間,預報衛星星歷、衛星鍾狀態,更新衛星導航電文。
用戶部分:不同類型的接收機(由帶前置放大器的天線、信號識別和處理的射頻倉、微處理器、精密振盪器、電源、顯示屏、內存和數據存儲器組成)。利用GPS 進行GIS 地理數據更新具有及時、高效、高精度、不受惡劣環境氣候影響等優勢,GPS 作為一種便捷的科學工具將在空間科學領域獲得廣泛的應用。GPS 定位方法精度高,方便靈活。GPS 定位技術在測繪中的應用和普及,是測繪科技的一個重大的突破性進展。隨著GPS 接收站的全面建成和發展,GPS 技術在普通測量與工程測量中的應用將越來越廣泛。
2 全站儀數據用全站儀進行實地測量,將野外採集的數據自動傳輸到電子手簿,磁卡或便攜機內記錄,並在現場繪制地形(草)圖,到室內將數據自動傳輸到計算機,人機交互編輯後由計算機自動生成數字地圖,並控制繪圖儀自動繪制地形圖。這種方法是從野外實地採集數據的,又稱地面數字測圖。由於測繪儀器測量精度高,而電子記錄又如實地記錄和處理,所以地面數字測圖是幾種數字測圖方法中精度最高的一種,也是城市地區的大比例尺(尤其是1∶500 的)測圖中最主要的測圖方法。現在,各類建設使城市面貌日新月異,在已建(或將建)的城市測繪信息系統中,多採用野外數字測圖作為測量與更新系統,發揮地面數字測圖機動、靈活、易於修改的特點,局部測量,局部更新,始終保持地形圖的現勢性。MAPGIS 提供了一個完整的數字測圖成圖軟體-MAPSUV,它既可以採用野外測記,室內成圖;也可以採用電子平板測繪模式,內外業一體化,實時成圖。它具有數據採集、輸入、數據處理、成圖、圖形編輯與修改及繪圖等功能。可以自動生成和維護拓撲關系,輸入圖形屬性信息,同時可以輸出符合國家標准圖式的圖形。
原圖數據採集在已進行過測繪工作的測區,有存檔的紙介質(或聚酯薄膜)地形圖,即原圖,也稱底圖。為了圖的計算機存檔和修測,為了建立該區的GIS 或進行工程CAD,就必須將原圖數字化,才能將圖輸入計算機。數字化的方法有兩種:
1 數字化儀數字化數字化儀是—種將圖示坐標轉換為數字信息的設備。數字化的過程-即用數字化儀對原圖的地形特徵點逐點進行採集(稱手按數字化),將數據自動傳輸到計算機,處理成數字地圖的過程,採集的數據為矢量數據結構。由於數字化圖的精度一般低於原圖的精度,尤其當作業員疲勞時,精度更易受影響。數字化儀數字化在實際中的應用越來越少,基本上轉向掃描矢量化。
2 掃描儀數字化原始紙介質(或聚酯薄膜)圖件在掃描儀上走—遍,即完成圖的掃描數字化,將數據輸入計算機中存儲、處理並可再回放成圖。掃描數字化速度較快,獲得數據為柵格數據。柵格數據結構比矢量數據結構簡單,但圖形數據量大,其空間數據的疊置和組合十分簡便,圖像表現比較真切,因此在GIS 中,它與矢量數據結構並用。在數字測圖中,對原圖掃描數字化,獲得柵格圖形數據後,還必須將柵格數據轉換為矢量數據,即矢量化。
Ⅲ 在自己電腦上如何獲取自己地理位置
網上幾十塊錢買個GPS的小模塊,插電腦上,配合谷歌地圖或者網路地圖等。就可以了
Ⅳ 怎麼在中國地理空間數據雲找梅州市行政邊界
今天我們以高德地圖為例,講解一下如何獲取全國省市區行政邊界數據。
高德開放平台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種基於高德地圖獲取全國省市區行政