扩展你的ArcGIS Earth

文章首发于Esri Beijing R&D Center的公众号。

前言

ArcGIS Earth是一款免费的桌面应用,也是ArcGIS平台中最重要的桌面端。ArcGIS Earth可以免费使用Esri提供的全球地形、影像服务,像Google Earth一样浏览感兴趣的地区;同时用户还可添加自己的二、三维数据如shapefile、KML/KMZ数据,实现在三维空间内展现二、三维数据并满足用户绘制基本要素、量测、分享等基本需求。ArcGIS Earth对企业级用户而言,可以让企业内每一个人根据角色的不同访问发布在Server上二维要素服务、三维场景服务等。

本文介绍一下ArcGIS Earth的一些不为人知的功能。

Point based service

当你安装完ArcGIS Earth后,会发现在X
C:\Users\username\AppData\Local\Programs\ArcGIS\Earth\bin. XX位置有一个config.xml文件,这是earth的配置文件。详细说明见文档。里面有一个
positionServiceUrl, 详细说明如下:

计算机管理员可以输入某些带有编码值的URL, 这些编码值会被ArcGIS Earth识别,并填充相应的位置信息。 在设置好该参数后,用户在ArcGIS Earth中使用鼠标右键单击地面,将会把点击的点的经纬度,高程等信息传递到该URL,并向管理员配置的服务器发送请求,当服务器返回有效的KML时,该KML将会显示在地球窗口中。


调用google街景服务,在ArcGIS Earth中显示街景

收到了很多用户的反馈,要求我们提供类似与Google街景的功能,目前ArcGIS Earth里还不支持街景,但是我们可以使用上面的方式来查看街景。

此处嵌入视频

实现的原理大概是这样的。

用户鼠标右键点击->earth获取点击位置的经纬度坐标->将位置信息填充到URL模板中,并发送请求->服务器解析请求,并生成kml->Earth加载KML并显示Popup。

用户可以按照以下步骤创建一个能返回kml的服务器。

  1. 搭建一个CherryPy 的服务器
  2. 创建一个KML的模板文件,支持替换其中的位置参数,例如:




%title%


%lon%,%lat%#golf-balloon-style]]>%description2%%lon%%lat%%elevation%0.00265562742696041011030676.39798315%lon%,%lat%,%elevation%



  1. 创建一个cherrypy app,支持解析用户的请求,替换模板中的参数,并返回kml文件。

@cherrypy.expose
def callWhat3Words(self, lon=0, lat=0, elv=0):cherrypy.response.headers['Content-Type']= 'text/xml'w3wURL = 'https://api.what3words.com/position?key={MYKEYNOTYOURS}&position=' + str(lat) + ',' + str(lon)req = urllib.request.Request(w3wURL)c = urllib.request.urlopen(req)res = c.read()data = json.loads(res.decode("utf-8"))#Build my HTML that will be embedded in KMLdescription1 = '' + '' + '

' + data['words'][0] + ':' + data['words'][1] + ':' + data['words'][2] + '

'description2 = ''#Load and modify the KML templatekmlFile = open('home/templates/response.kml', 'r')result = kmlFile.read() result = result.replace("%lon%", str(lon)).replace("%lat%", str(lat)).replace("%elevation%", str(elv)).replace("%description1%", description1).replace("%description2%", description2).replace("%title%", "What3Words Test")return result
  1. 修改ArcGISEarth.exe.config文件,加入以下配置。
 
  1. 重启Earth,右键单击,就会看到

目前支持的参数有:

  • %LONGITUDE% - 表示单击点的经度的键值
  • %LATITUDE% - 表示单击点的纬度的键值
  • %ELEVATION% - 表示单击点的高程的键值,当前以米为单位
  • %HEADING% - 表示朝向

Automation API

ArcGIS Earth的Automation API则是ArcGIS Earth另一个扩展功能。更多信息请见ArcGIS for Developers 或者是 ArcGIS Earth homepage

在我们发布ArcGIS Earth的第一个版本的时候,就听到有关于API的需求。使用这些API能够控制ArcGIS Earth以及与二三维的数据内容进行交互。因此,我们设计了这个API,主要用于app to app(应用程序对应用程序)的通讯。

它是什么?

ArcGIS Earth Automation API 提供了基于WCF的服务契约(Service Contract),这样第三方的基于.Net的应用程序就可以通过使用API提供的服务契约与ArcGIS Earth进行通讯。ArcGIS Earth提供的通讯方式使用NetNamedPipeBinding,可以提供快速,安全的单机绑定。

它能做什么?

通过ArcGIS EarthAPI,用户可以在他们自己的应用程序基础上创建.Net的扩展,并使用这个扩展来访问ArcGIS Earth的资源,或者是控制3D浏览。

ArcGIS Earth Automation API 提供了以下的功能:
1、 获取和设置相机信息
2、 控制相机的飞行
3、 从本地文件夹或者网络路径添加图层
4、 管理workspace内容(目前仅提供添加图层和删除所有图层)
5、 提供当前视图的截图

目前的ArcGIS Earth Automation API为用户的痛点提供的解决方案。它能给你场景和工作区的控制能力。Esri将会添加更多功能。

现在就试试!

我们来看看能用它干什么吧。下面的一个例子展示了,如何在ArcGIS Pro 2.0中关键一个扩展,并使用这个扩展来同步ArcGIS Pro和ArcGIS Earth的三维场景的相机视角。如你所见,在切换ArcGIS Pro的书签的同时,我们会发现ArcGIS Earth的相机视角也会进行相应的改变。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-peF37TBq-1573224168903)(https://community.esri.com/servlet/JiveServlet/downloadImage/38-57809-370813/api3.gif)]

[外链图片转存失败(img-aAo8YPbS-1565227643427)(https://geonet.esri.com/servlet/JiveServlet/showImage/38-57809-370813/api3.gif)]
想试试这个add-in吗,去这个页面View Synchronization Sample,然后下载用例代码到你本机。请注意,你需要在你本地的开发环境中编程生成该插件。如果你想获取add layer是否成功等信息,你需要修改这部分的代码以完善双工通讯部分。

后记

从ArcGIS Earth product homepage中获取更多信息,在GeoNet上并上传你的问题或者与我们分享你的想法。
请尽情发挥想象吧。

参考

  • ArcGIS Earth Document
  • https://www.esri.com/arcgis-blog/products/arcgis-earth/3d-gis/point-based-service-access-with-arcgis-earth/
  • arcgis-earth-automation-api-is-here
  • Using the Automation API
  • ArcGIS API samples
  • ArcGIS Earth Automation API GitHub


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部