网易首页 > 网易号 > 正文 申请入驻

如何从开放的地理信息系统(GIS)中获取数据——以ArcGis为例

0
分享至

图源:摄图网可商用图片

交通流量是指在选定时间段内通过道路某一地点、某一断面或某一车道的交通实体数或当量数,从车流量的大小可以判定交通的拥挤状况,从而决定当前采取何种交通管理措施,以及对未来交通变化趋势和道路建设规划给出量化的指导依据,因此对交通量的准确检测在交通工程以及未来发展占有十分重要的位置。

交通流量的统计信息,在国内的部分城市是可以在政府网站上查阅的,比如上海市公共数据开放平台就可以查到金山区道路交通流量。数据下载则需要注册和申请。

相比于国内,国外的交通流量数据开放程度更高,以西方某国为例,其每个地方行政单位大多都会公开交通流量数据,部分地方会以年报的形式发布,或者在GIS中提供了原始数据下载。比如下面西方国家的某地的年均交通日流量就提供了csv格式的原始数据下载。

但是,更多的GIS系统对于交通流量的统计数据只提供在线查看,并不提供下载功能。面对这种情况,我们又该如何获取这些数据呢?下面以arcgis系统为例,浅谈一下数据获取问题。

ArcGIS 是一个全面的系统,用户可用其来收集、组织、管理、分析、交流和发布地理信息。作为世界领先的地理信息系统(GIS) 构建和应用平台,ArcGIS 可供全世界的人们将地理知识应用到政府、企业、科技、教育和媒体领域。ArcGIS 可以发布地理信息,以便所有人都可以访问和使用。

首先,我们打开一个arcgis的交通流量地图,选择图层列表,在打开的选项卡中注意到带有数据的图层,本例中我们选择“2020-average annual daily traffic and 10 year historic counts”,按住键盘上的F12,调出开发者工具,在network选项卡中先停止录制再开始录制,这样可以清空已经记录的http报文,专门记录后续操作所触发的网络通信。

之后我们选择“2020-averageannual daily traffic and 10 year historic counts”,图层后的三个点,在菜单中选择按“在属性表中查看”。此时,页面下方就会弹出该图层对应的数据表。这无疑就是我们想要的数据了。

对应观察右边的开发者工具,随着鼠标向下滑动,查看数据表,右边会记录越来越多的报文,且都带有json字样。依次查看这些报文,会发现有一个报文的preview(预览)中依次展开 displayFieldName,fields就可以看到表格中的数据啦。

这里需要简单介绍一下其原理,首先,我们在network中查到的这种带有数据文件属于xhr类型,全称为XmlHttpRequest,用于服务器和浏览器之间交换数据,在建站的时候我们往往用到XmlHttpRequest对象的open和send方法,前者规定请求方式和需要交互的文件位置,以及是否异步上传;如果是get请求,则后者空参,即可将请求发送至服务器。W3CSHOOL上的业务代码示例如下。

xmlhttp.open("GET","ajax_info.txt",true);

xmlhttp.send();

知道了xhr,再来了解json,这是一种基于JavaScript的轻量级数据交换格式。通常用{ },[ ]符号表示数据层级,用 : 表示键和值得关系,用,表示分隔符。显然,这要比用双标签传递数据的xml轻了许多。

综上所述,网站开发时用 XmlHttpRequest将编写好的json文件传给浏览器,用户就可以看到数据啦。当然,传给浏览器的json文件不可能是开发者编写的,而是从网站数据库中查询的结果生成的。知道了原理,我们只需要把这些浏览器请求到的json文件再还原成二维表,就万事大吉了。

回到上面这个文件的headers选项卡,我们确定了报文的请求方式是GET,并且请求地址也知道。仔细分析地址,有两个参数这里需要修改,一个是resultOffset,见名知意,这里指的是查询结果的偏移量.

当然,我们需要从0开始查询,即数据库中的第一条数据。ResultRecordCount为每次查询返回的结果集大小,此处我们试着把它改大一些,比如说1000。最后,我们修改过的请求地址就是:

https://enterprise.firstmap.delaware.gov/arcgis/rest/services/Transportation/DE_Assets/MapServer/11/query?f=json&where=1=1&returnGeometry=false&spatialRel=esriSpatialRelIntersects&outFields=*&orderByFields=OBJECTIDASC&resultOffset=0&resultRecordCount=1000

此时,我们只需要用python的requests库的get刚发向这个地址发送请求,再用请求对象的json方法解析返回的数据就可以了。在下面的代码中,变量data就已经是以字典的形式拿到了1000行交通数据(在名为features的列表中)。

import json

import requests

import pandas

url = "https://enterprise.firstmap.delaware.gov/arcgis/rest/services/Transportation/DE_Assets/MapServer/11/query?f=json&where=1=1&returnGeometry=false&spatialRel=esriSpatialRelIntersects&outFields=*&orderByFields=OBJECTID ASC&resultOffset=0&resultRecordCount=1000"

r =requests.get(url)

data = r.json()

最后,只需要把这个列表存储成二维表并输出即可,这里选用pandas工具代为整理,完整代码如下,整理过程不再赘述。

import json

import requests

import pandas

url = "https://enterprise.firstmap.delaware.gov/arcgis/rest/services/Transportation/DE_Assets/MapServer/11/query?f=json&where=1=1&returnGeometry=false&spatialRel=esriSpatialRelIntersects&outFields=*&orderByFields=OBJECTID ASC&resultOffset=0&resultRecordCount=1000"

r =requests.get(url)

data = r.json()

df = pandas.DataFrame(data["features"][0]["attributes"],index =[0])

df2 = pandas.DataFrame(columns=df.columns)

for d in data["features"]:

df = pandas.DataFrame(d["attributes"],index =[0])

df2 = pandas.concat([df2,df],axis = 0)

print(d)

df2.to_excel("c://Users//Administrator//Desktop//AADT_m_2019.xlsx")

本篇文章为福韵原创内容,未经授权禁止转载

封面来源:摄图网可商用图片

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
中方投下赞成票

中方投下赞成票

政知新媒体
2026-06-24 09:57:23
詹姆斯前队友谈湖人顶薪签里夫斯:有点奇怪,防守端存在问题的人

詹姆斯前队友谈湖人顶薪签里夫斯:有点奇怪,防守端存在问题的人

好火子
2026-06-25 05:23:36
不休战!曝39岁梅西将出战第3轮:2场5球 有望连续2届夺世界杯金球

不休战!曝39岁梅西将出战第3轮:2场5球 有望连续2届夺世界杯金球

风过乡
2026-06-25 05:58:56
立陶宛新任总理出面,刚上台就对台当局放话,看来又是一个狠角色

立陶宛新任总理出面,刚上台就对台当局放话,看来又是一个狠角色

古史青云啊
2026-06-24 19:38:55
瞎打!运球17秒,媒体人怒批:他一人干废王俊杰、杨瀚森和徐昕

瞎打!运球17秒,媒体人怒批:他一人干废王俊杰、杨瀚森和徐昕

南海浪花
2026-06-24 06:54:30
54分惨败后再狂输54分!女篮一夜两大惨案:U21联赛真一边倒了?

54分惨败后再狂输54分!女篮一夜两大惨案:U21联赛真一边倒了?

篮球快餐车
2026-06-25 05:55:21
被问内马尔能出场多久,安帅:如果走着踢,我也能踢满90分钟

被问内马尔能出场多久,安帅:如果走着踢,我也能踢满90分钟

懂球帝
2026-06-24 11:39:30
上海交大走访7965名痴呆患者,调查发现:患痴呆的人,有7大共性

上海交大走访7965名痴呆患者,调查发现:患痴呆的人,有7大共性

健身狂人
2026-06-24 18:00:03
向太小儿子直播带货首秀!被怀疑有唐氏综合症,向太又遭质疑!

向太小儿子直播带货首秀!被怀疑有唐氏综合症,向太又遭质疑!

情感大头说说
2026-06-24 18:32:58
快扔掉,戴一天,辐射量相当于拍117次胸片

快扔掉,戴一天,辐射量相当于拍117次胸片

北青网-北京青年报
2026-06-22 11:00:34
6分不一定能出线?世界杯K组-L组末轮形势分析

6分不一定能出线?世界杯K组-L组末轮形势分析

世界BALL
2026-06-24 14:18:08
今夜,美股拉升!光通信,暴涨

今夜,美股拉升!光通信,暴涨

中国基金报
2026-06-25 03:10:36
哈佛研究发现:人生回报率最高的一件事,培养一个输出型爱好

哈佛研究发现:人生回报率最高的一件事,培养一个输出型爱好

心理观察局
2026-06-24 07:49:11
三大运营商终于作“死”了自己

三大运营商终于作“死”了自己

细雨中的呼喊
2026-06-10 23:49:50
你们再这么清醒下去,娱乐圈迟早要挂掉!

你们再这么清醒下去,娱乐圈迟早要挂掉!

走读新生
2026-06-23 17:32:04
1-2惨遭逆转!23岁郑钦文不敌世界第25:离谱12个双误 倒在第2轮

1-2惨遭逆转!23岁郑钦文不敌世界第25:离谱12个双误 倒在第2轮

风过乡
2026-06-24 21:25:36
图赫尔脸都被打肿了!英格兰 3 大球星被弃用 世界杯想破局都没人

图赫尔脸都被打肿了!英格兰 3 大球星被弃用 世界杯想破局都没人

澜归序
2026-06-25 02:18:39
央八终于要播了!36集传奇大剧,就冲这阵容,想不火都难!

央八终于要播了!36集传奇大剧,就冲这阵容,想不火都难!

情感大头说说
2026-06-25 00:22:50
新能源渗透率突破60%,中国车市却到了最危险的时刻?| 聚论

新能源渗透率突破60%,中国车市却到了最危险的时刻?| 聚论

车聚网
2026-06-24 21:57:30
秦海璐变卖房产,清空全部资产,凑出近亿身家,绝境兜底救下刘涛

秦海璐变卖房产,清空全部资产,凑出近亿身家,绝境兜底救下刘涛

秋别离
2026-06-13 15:50:00
2026-06-25 07:28:49
福韵小福妹
福韵小福妹
整合情报干货、提供商业调查
64文章数 30关注度
往期回顾 全部

科技要闻

豆包专业版上线:定价68-500元每月

头条要闻

瑞士2-1加拿大 两队携手出线

头条要闻

瑞士2-1加拿大 两队携手出线

体育要闻

字母哥,会把凯尔特人拆了吗?

娱乐要闻

向佐向佑兄弟合体直播!母子终于和解

财经要闻

逃税23亿:审计署年报直指七家机构

汽车要闻

施鹏泽:为什么奥迪E7X强调座舱气味安全?

态度原创

本地
亲子
家居
数码
军事航空

本地新闻

2026世界杯全勤太难?这份保姆级攻略请收好

亲子要闻

难以想象这个小女孩在家里又会怎么生存

家居要闻

绿意盎然 自然之境

数码要闻

三星电子公众号注销!家电业务已官宣退出中国大陆市场

军事要闻

伊朗代表:霍尔木兹海峡已免费开放

无障碍浏览 进入关怀版