手把手教你抓取地图矢量数据【附代码和矢量地图数据】(续)

上一节
现在我们已经抓取到北京行政区和街道办的节点串坐标数据
行政区边界节点的txt文本
街道办边界节点的txt文本
接下来就需要在ArcMap中使用若干工具将这些点转为线,然后转为行政区划面了。

1、首先将txt文本导入至ArcMap
加载txt文本
2、然后加载点数据,注意要选择WGS1984作为空间参考
加载点数据
加载点数据
3、由于数据量较大,这里需要将数据转存至GDB中
数据转存至GDB
4、接下来使用上一篇文章提到的【点集转线】工具将节点转为线
注意参数选择:
【线字段 (可选)】选择为i字段(i为行政区划的编号);
【排序字段 (可选)】选择为j字段(j为每个行政区划下的节点编号);
【闭合线 (可选)】勾选上
点集转线
结果如下:
结果
5、使用【要素转面】工具将闭合区线转为面
要素转面

重复上述步骤可将街道办转换为面
最终结果如下
北京行政区划
飞地
可以看到在顺义区有一块属于朝阳区的飞地
飞地
叠加底图查看,该地是首都机场。
问题来了,已经有了“朝阳群众”的朝阳区,为什么还要在顺义区特别“抢了一块地”呢?
下一节,我们将从GIS选址的角度剖析一二,敬请期待。

手把手教你抓取地图矢量数据【附代码和北京矢量地图区、街道办数据下载】【一】

Hello,大家好,我是James.

偶然看道天地图北京的官网有行政区深圳街道办的边界数据
天地图
惯性使然打开F12,惊奇地看道一串串熟悉的坐标
线索

曾经搜遍论坛网站各个角落,今天在官方却能轻而易举的找到,真是太激动

于是先研究了url请求结构,最终得到了北京16个区和下属街道办的边界信息

接下来跟大家分享抓取过程,

1、首先进入首页(http://beijing.tianditu.gov.cn/bjtdt-mapcenter/),
首页

2、点击【行政区划】,F12我们可以看到在http://beijing.tianditu.gov.cn/tdt-web-sysmanager/services/catalog/special/getLoginOutCatalogSpecials/38ed87a3fe8e4bb1a01949c47baf5244请求结果中包含了北京下属的16个区!
北京16个区

3、展开其中一个后,看道更为详细的信息
北京16个区详细信息

4、点击东城区,我发现在http://beijing.tianditu.gov.cn/tdt-web-sdks/biz/httpproxy/httpproxy.jsp?url=http://www.bjmap.gov.cn:8080/dfc/services/sgssfs/2220?request=getfeature&filter=+GBCODE%3D%27110101%27请求结果中有不得了的坐标串,明显是行政区划的边界节点坐标串嘛
区坐标串

5、继续点击建国门街道,同样在http://beijing.tianditu.gov.cn/tdt-web-sdks/biz/httpproxy/httpproxy.jsp?url=http://www.bjmap.gov.cn:8080/dfc/services/sgssfs/2220?request=getfeature&filter=+GBCODE%3D%27110101001%27看道街道办的坐标穿,完美!
街道办坐标串

接下来上python代码
1、首先惯例,我使用的是python2,首先声明编码,导入request、json解析模块
导入模块

2、接下来需要写4个函数方法,
主要是:
(1)解析、构造url地址
(2)组织爬取的信息
函数方法

3、然后是调取以上函数方法,写入至txt文件
调取、写入

4、最后分别得到行政区和街道办边界节点的txt文本
txt文本
行政区边界节点的txt文本
街道办边界节点的txt文本

本节结束,这里附上完整的代码和txt文本下载链接
链接:https://pan.baidu.com/s/1eaDApBPATqf3D9sWwfAMow
提取码:gnkx
或者长按以下二维码获取下载
二维码获取下载

一道难倒不少前端面试者的问题

有一数组,里面有若干(数目和薪资一样多)数字,数字有重复,如何找出重复次数最多的数字


这个问题每次和组员面试时必问,其中能够理出逻辑过程的不到一半,大部分都是先声明一个空数组,然后经过数次循环对比处理,而首先声明空对象的不多(数据结构很重要呀!!!这是我们非科班的硬伤)。
常规答案如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let a = [1, 2, 6, 8, 9, 5, 2, 5, 6, 5, 5, 2, 5, 5];   
let numCount = {}, maxCountNum = 0, maxNum;
for (let i = 0, j = a.length; i < j; i++) {
if (a[i] in numCount) {
numCount[a[i]] += 1
} else {
numCount[a[i]] = 1
}
if (numCount[a[i]] > maxCountNum) {
maxNum = a[i];

maxCountNum=numCount[a[i]]

}

}
console.log(maxNum)

曾经看到有人说通过一句js代码就可以实现,只是这个地方太小,他写不下了。这句话怎么似曾相似呢。。。。

17世纪初,欧洲流传着公元三世纪古希腊数学家丢番图所写的《算术》一书。1621年,费马在巴黎买到此书并利用业余时间书中的不定方程进行了深入研究,从而创立了数论这门数学分支。在数论领域中,费马的巨大成果主要是费马大定理和费马小定理。其中以费马大定理最为著名。

1637年左右,费马在阅读丢番图《算术》的拉丁文译本时,曾在第11卷第8命题旁写道:“将一个立方数分成两个立方数之和,或一个四次幂分成两个四次幂之和,或者一般地将一个高于二次的幂分成两个同次幂之和,这是不可能的。关于此,我确信已发现了一种美妙的证法,可惜这里空白的地方太小,写不下。”

这就是著名的费马大定理:当整数n>2时,关于x,y,z的方程没有正整数解。
费马大定理也叫“费马最后的定理”,“最后”的意思是:其它猜想都证实了,这是最后一个。费马究竟有没有证明费马大定理,至今是人们津津乐道的话题。费马大定理被提出后,经历多人猜想辩证,历经三百多年的历史,才于1995年由英国数学家怀尔斯证明,且其证明的过程相当艰深。
费马大定理

话说回来,对于一行代码实现文章开头的问题,我开始是深信不疑的,然后今天尝试了一下,最后想法遭到了动摇。
在不声明其他变量的情况,我是这样写的:

1
2
let a = [1, 2, 6, 8, 9, 5, 2, 5, 6, 5, 5, 2, 5, 5];
a.map((value, index) => {if (index === 0) {a[a.length] = {};a[a.length - 1][value] = 1;a[a.length] = value} else {if (value in a[a.length - 2]) {a[a.length - 2][value] += 1;if (a[a.length - 2][value] > a[a.length - 1]) {a[a.length - 1] =value}}else {a[a.length - 2][value] = 1}}if(index+3===a.length)console.log(a[a.length-1])})

实际上面一行是伪代码,ctrl+Alt+L格式化一下,重新排版成酱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a.map((value, index) => {
if (index === 0) {
a[a.length] = {};
a[a.length - 1][value] = 1;
a[a.length] = value
} else {
if (value in a[a.length - 2]) {
a[a.length - 2][value] += 1;
if (a[a.length - 2][value] > a[a.length - 1]) {
a[a.length - 1] = value
}
} else {
a[a.length - 2][value] = 1
}
}
if (index + 3 === a.length) console.log(a[a.length - 1])
})

看起来更复杂了,有兴趣的小伙伴可以试一试,欢迎留言交流

发现一个大坑!!!

本篇文章是为了重现element-ui的新版本(2.9.1)BUG所提交的issue

前几天没事重新安装了依赖,也是闲的蛋疼,更新完后就悲剧了,表格高度全都变为100px。
100px!!!
然后捯饬了半天,一直到今天上午,what the f//K!。
这个问题解决不了,因此自己无法打包工程部署,只能麻烦组员了。
下午决定再次攻克一下:

**使用排除法

1、排除开发环境:操作系统+idea+npm+node+vue版本都一致;
2、排除代码错误:都在git上同一分支下;
3、排除接口数据:都是同一个后台接口环境;

以上,那么真相只有一个:都是蛋疼惹的事—依赖版本

**破案过程:
由于package.json中声明所有依赖使用最新版本,所以写了一个脚本放在我和组员的依赖文件夹(node_modules)下,获取安装依赖的名称和版本;
然后使用notepad++中的compare插件对比,才发现是element-ui的版本不一致,去其官网查看,果然半个月前更新了版本,然后区GitHub的代码仓库查看release,下图可以说明一些问题,
element-ui 2.9.1
于是回退版本,这个鸟问题终于解决了!
目前的解决方案是将将package.json中的

1
"element-ui": "^2.8.2",

改为

1
"element-ui": "2.8.2",

记录贼坑一件事

昨天下班前将某个地区的所有站点发布成服务,数据保存在mysql中,但是老是显示不了,中间考虑了特殊字符,站点堆叠的原因,都不对。
最后发现是空间几何字段的空间参考不一致的问题,233333.

ArcGIS Enterprise中Portal发布场景服务后无法查看

大家都知道ArcGIS现在整个产品体系特别庞大,以我来看,个人是不能将所有的产品学到精通的,毕竟整个产品已经年近五旬,积累沉淀的东西非一人所能穷尽的。
现在就说一下ArcGIS Enterprise,俗称”ArcGIS 全家桶“套餐,为什么这么叫呢,因为之前这个系统有多个组件。ArcGIS Enterprise 在是在10.5版本以后才叫这个名字的,算是一个统称,包括了Portal Server Datastore Webadaptor,所以需要一个个组件安装,并且有一定的部署顺序,如果不太熟悉这个流程,好不容易在漫长的安装过程之后,出现令人崩溃的不能用,排查问题的时候又很困难,所以,目前这套系统再生产环境中需要Esri官方技术人员现场部署,以保证系统的安全。

点击继续阅读