Ⅰ 地理信息系统中的数据来源及获取方式(明天考试,急)
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种基于高德地图获取全国省市区行政