kikita & Maps

GIS,spatial and artificial intellegence learning and share

我们可以通过工具 Generate Map Server Cache Tiling Scheme 来生成自定义的切片方案,无论是ArcMap还是ArcGIS Pro ,无论是栅格切片还是矢量切片,都屡试不爽。

前段时间,为了方便 ArcGIS Pro 的自动化工作,我尝试用python调用这个功能,然而后面在使用其生成的切片方案(.xml)文件时,会发现切片原点总是默认值,例如地理坐标系统下是“-400,400”。

1
2
3
<TileOrigin xsi:type="typens:PointN">
<X>-400</X><Y>400</Y>
</TileOrigin>

arcpy.GenerateMapServerCacheTilingScheme_server (in_map, tile_origin, output_tiling_scheme, num_of_scales, scales, dots_per_inch, tile_size) 中,tile_origin这个参数标识为point对象,可是无论如何传参都无效。

这样会导致切片创建以及更新的一系列问题,在当时也是排查了很久才定位到这个问题。我的是测试环境是 ArcGIS Pro 2.0.x。值得欣慰的是,这个问题在 ArcMap的arcpy中没有问题,可以正确识别参数。

经过与esri美国工程师的沟通确认,此问题为arcpy for ArcGIS Pro的bug,暂时没有官方解决方法。

  • BUG-000110503 : Changing the tile origin parameter when using arcpy.server.GenerateMapServerCacheTilingScheme does not actually change the tile origin

绕行办法:

既然xml已经生成了,只有切片原点信息是错误,那就自己来解析xml修改对应参数即可。在自己的脚本中额外增加一个解析xml的逻辑吧,跳过这个坑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import xml.dom.minidom as DOM
# Modify Scheme File to Avoid the tile_Origin Specification Bug of the Pro Tool
def modifyTilingSchemeFile(tileScheme,x_origin,y_origin):
try:
doc = DOM.parse(tileScheme)
tileOriginX = doc.getElementsByTagName('X')
tileOriginY = doc.getElementsByTagName('Y')
tileOriginX[0].firstChild.data = x_origin
tileOriginY[0].firstChild.data = y_origin
f = open(tileScheme, 'w+')
doc.writexml(f)
f.close()
return True
except:
arcpy.AddMessage("tile scheme XML file does not exist.")
Read more »

​ 这篇是读书笔记。同事手里有本《面向ArcGIS的Python脚本编程》,系统的介绍了如何结合ArcGIS使用python。最近拿来阅读,觉得受益颇多。最早期我是通过python自身的学习资源、书籍、ArcGIS帮助文档入门的,知识体系虽然建立起来了,但是很多细节没有考虑到,对照书中的内容温故知新、查漏补缺。

arcpy与AO

​ 书的开篇就介绍了脚本语言和程序语言的区别。我将其引申到日常工作中用户会经常问到的,“为什么AO可以实现的东西,arcpy却不能?”“为什么arcpy的功能这么‘粗粒度’?”

​ AO中包含了ArcGIS用到的所有编程对象,包含了数以千计的不同对象,因此程序员可以精细控制软件的外观和运行机制。Python作为一种非常平易近人的语言,既是脚本语言又是程序语言,在ArcGIS平台中,python更多充当的是脚本语言的角色,例如:访问ArcGIS现有的功能,组合各种现有功能来扩展ArcGIS的功能,更可以作为一种“粘合剂”将更多的功能整合进来。用书中的话讲,脚本语言就是在“控制其他应用程序以实现任务自动化”。arcpy是ArcGIS提供的python站点包,用于访问ArcGIS 的地理处理功能,定位正在于此。

arcpymodel builder

​ model builder(简称MB吧)是ArcGIS Desktop中我认为最可爱的功能没有之一,它采用了编程的思想却免去了书写代码,是给非程序员实践创造的启航之地。日常工作中,很多逻辑简单、功能清晰的任务都可以使用MB实现。以前写过一篇,《如何在ArcGIS for Desktop中实现批量任务》,具体不再展开。你可能由这些疑问,“MB也能完成批量任务,我何时应该考虑使用python?” 当然这里回答的是“不得不”的问题,如果你本来就是编程高手,从一开始就会觉得MB限制了你的想象力,如下回答可能不需要考虑。

​ MB的局限性有什么?或者说相比之下,python能更多实现什么?

  • python可以实现更高级的编程逻辑。例如嵌套循环是MB的软肋,一遇到多重遍历之类的任务就只能呵呵了。
  • python可以实现更底层的处理任务。例如我们可以使用Cursor,遍历表并对其增删改等等。
  • python可以集成第三方的资源。例如R语言等第三方类库来处理数据执行任务。
  • python可以不在ArcGIS软件内部执行任务,只需要安装并授权ArcGIS软件,然后通过独立脚本的形式运行。既然可以独立运行,就可以定义系统任务定时执行。

python基础

命名规范

Read more »

示例

地图服务

发布单个地图服务:
https://github.com/kikitaMoon/ArcGIS-Python/blob/master/LazyWorker/AutomaticallyPublishingServices/MapServciePY27/PublishingSingleMapService.py

批量发布地图服务:
https://github.com/kikitaMoon/ArcGIS-Python/blob/master/LazyWorker/AutomaticallyPublishingServices/MapServciePY27/BatchPublishingMapService.py

要素服务

批量发布要素服务:
Hosted Feature Service
https://github.com/kikitaMoon/ArcGIS-Python/blob/master/LazyWorker/AutomaticallyPublishingServices/FeatureServicePY27/PublishingHostedFeatureService.py

ArcGIS Server Feature Service
https://github.com/kikitaMoon/ArcGIS-Python/blob/master/LazyWorker/AutomaticallyPublishingServices/FeatureServicePY27/PublishingServerFeatureService.py

影像服务

https://github.com/kikitaMoon/ArcGIS-Python/blob/master/TechConferences/2016-DeveloperTechConference-Demo/4-PublishImageService.py

自从多说挂了之后,网站的评论系统一直缺席中,今天自己部署个LiveRe吧,现在用的hueman主题,就以此主题为例,自己动手丰衣足食了。

  1. 在主题的配置文件中增加一项,livere
    ...\themes\hueman\_config.yml
1
2
comment:
livere: your data id

2.在...\themes\hueman\layout\comment增加livere.ejs评论模块代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- LiveRe City install code -->
<div id="lv-container" data-id="city" data-uid="********">
<script type="text/javascript">
(function(d, s) {
var j, e = d.getElementsByTagName(s)[0];

if (typeof LivereTower === 'function') { return; }

j = d.createElement(s);
j.src = 'https://cdn-city.livere.com/js/embed.dist.js';
j.async = true;

e.parentNode.insertBefore(j, e);
})(document, 'script');
</script>
<noscript>Please activate JavaScript for write a comment in LiveRe</noscript>
</div>
<!-- completed City install code -->

3.相关文件增加判断

...\themes\hueman\layout\comment\index.ejs

1
2
<% } else if (theme.comment.livere) { %>
<%- partial('comment/livere') %>

...\themes\hueman\layout\comment\scripts.ejs

Read more »

学习python是个有趣的过程,不知不觉累积了一些有意思的小案例和小工具,一直都在本地磁盘流浪,这好像不是一个好主人的作风呢。 把它们放到该去的地方,在这里:https://github.com/kikitaMoon/ArcGIS-Python

开始从来不知道自己会在编程的道路上越走越远,积极用脑、专注做事可能是推迟进入油腻中年的最好途径。 这一年生命中多了一个人,生活有了很多变化,纵然精力旺盛的我也开始觉得分身乏力,感谢宝宝的乖巧才让我有了很多的时间做“贤妻良母”之外的事情。希望我的宝宝长大后,可以看到妈妈的文字,互相感恩乐观前行。

0%