kikita & Maps

GIS,spatial and artificial intellegence learning and share

为什么会有这个需求和想法呢?还是源自于 局部更新矢量切片 的想法,当我们遭遇一个海量矢量数据的矢量切片创建更新任务时,希望尽可能少且尽可能准确地更新受影响的bundle,而不是全局,那么了解bundle的范围是十分必要的。在写上一篇《紧凑型缓存技术小结》的时候,目的在于在其基础之上探索矢量切片的bundle。

为了确保单个bundle文件的矢量切片数据的完整性,每级每次至少需要更新一个bundle文件。当矢量切片的数据量不显著的时候,可能每级本身也就一个或几个bundle,那局部更新体现不出它的优势; 当某些等级(例如LOD比较大的级别)矢量切片bundle非常多的时候,如果更新的范围只影响了其中一个,或者几个文件时,局部更新是有必要的。

结论

参照栅格切片的 帮助文档 中明确说明的,  “A bundle contains up to 16,384 tiles. ” 那就是 128 × 128 的关系,照搬到矢量切片是否适用呢? 通过验证,确实如此。

先上结论,第N级的矢量切片的bundle范围刚好是第N-7级的切片范围,如下图,红线是 level 6 的切片索引,刚好可以作为level 13 的bundle范围:

示例

为了做验证和测试,我用了美国大选的区块数据做实验,这个面数据包含182895条记录,节点较多,很适合做矢量切片。假设,需要更新的切片范围仅仅是密歇根湖的一角:

PS:上图是完全由 ArcGIS Pro 制作导出的,使用到了 Layout , Extent Indicator; 从制图角度来说,ArcGIS Pro 是个非常好的桌面端应用,可以继承和超越ArcMap。

Read more »

Tiling Scheme

每个缓存服务的切片目录中都会包含一个 Conf.xml,也是就是tile scheme 文件了。

这个文件包含了很多有关切片设置的信息:

  • Spatial reference information
  • Tile origin
  • Tile width/height
  • DPI
  • LODs (Levels of detail - scales)
  • Tile Image format
  • Compression quality
  • Antialiasing settings
  • Storage method

Version Issue

紧凑型缓存的存储格式为**.bundle** 。但有时我们会看到缓存目录中包含**.bundlx** 这样的文件,这说明这些缓存是ArcGIS 10.2.2 或以下版本创建的。从 ArcGIS 10.3 开始,紧凑型缓存做了些改进, .bundlx(tile index information) 文件被包含到了 .bundle 文件中 ,从而进一步降低了文件的数量。

你可以在缓存服务的tiling scheme “Conf.xml“ 中查看确认:

10.3 or later (Compact cache V1)

1
2
3
4
<CacheStorageInfo xsi:type='typens:CacheStorageInfo'>
<StorageFormat>esriMapCacheStorageModeCompact</StorageFormat>
<PacketSize>128</PacketSize>
</CacheStorageInfo>

10.2.2 or former (Compact cache V2)

Read more »

这是一篇日记。

最近,终于把年初我和马老师的脑洞项目 局部更新矢量切片 放在了大型程序员G友交流社区,开始出 release了……

在项目的开始,这个需求来自于用户的真实需求,如下是正经的背景信息:

矢量切片是Esri在新版本中推出的一项亮点新技术,通过ArcGIS Pro中的Create Vector Tile Service工具生成切片包,再通过Portal发布成 Vector Tile Service,在前端支持各种应用,采用统一的接口进行调用,实现了一体化的平台应用解决方案。矢量切片技术充分利用GPU的渲染能力,以全新方式在设备、浏览器中以矢量的方式展现缓存地图。这项技术解决了传统基于栅格缓存切片展现地图存在的诸多问题:如设备分辨率对地图渲染效果的影响,缓存创建后无法再动态更改样式,生成缓存切片的周期过长,对硬件的需求过大等等。

众所周知,矢量切片包的生成速度相对于传统的栅格切片包具有指数极的性能提升,这也是体现矢量切片优越性的一个重要方面。对于一个常规数据量在100MB-10GB级的数据,全部生成一次矢量切片包的速度在分钟级。可能正是因为这个原因,截至目前最新版本(ArcGIS Pro 2.2),Esri仍未提供局部更新矢量切片包的功能。虽然矢量切片生成速度很快,但是到了TB级别的大数据来说,生成一次完整的切片包也是需要相当长的时间的,如果仅是更新了局部的小范围数据,那基于更新范围自动化更新矢量切片就是一个非常有实际应用价值的需求。 正是在这样的背景下,我们发起了创建自动化局部更新矢量切片工具的项目。

—— @马老师

既然是两个人的项目,又会涉及很多版本的更新同步问题,Why not Github

我们一共设计了5个Python工具,用于扩展ArcGIS Pro的功能,分别实现原始矢量切片包的创建,局部矢量切片包的创建,以及矢量切片包的更新,矢量切片服务的更新,托管在阿里云平台的矢量切片服务的更新。

截止到今天的版本 Partially Upate ArcGIS Vector Tiles Toolbox 1.1.0

Mark:

后续还有很多有待优化的关键点:

  • Bundle空间范围的精确计算
  • LOD值的自动计算
Read more »

CityEngine 的CGA建模过程是个不断迭代繁衍的过程,我们将这个过程想象成一棵树。

通过 Shapefile,File Geodatabase,AutoCAD DXF 这些矢量数据格式导入CityEngine中的2D基面(Footprint),通常称为 CityEngine Initial Shape,这是这棵树的根节点。通过CGA中的命令符 --> ,将一个shape经过各种形状(Geometry)和位置(Pivot,Scope) 的函数操作,生成另一个shape。直到最后,模型建立,最终的shape节点,通常称为 CityEngine Leaf Shape

这个细节的概念,在2013年的开发者大会中提过一次,结合模型层次结构的幻灯片理解下:

完整的幻灯片可以点 这里 下载。

为什么说是“迭代繁衍”? 因为除了 Leaf Shape 之外的所有shape 在建模过程中都被紧跟它其后的shape替代而消亡了。

举例子,在这条规则中,

1
2
A --> function() B 
B --> function() C

这条规则中 ,A shape 对象已经消亡被B替代,在后续的规则中无法再调用到 A, 如果希望取到与A相同的对象,就需要提前复制出来,如下:

1
2
3
A --> Anew function() B            //A被复制而创建了分支
B --> function() C
Anew --> function() D

了解了这些,那么我们可以进一步回答这个问题:“如何将CityEngine规则建模的模型导出成各组件独立存储的模型?”

可以的,再导出FileGDB或 Scene Layer Package的时候选中 “One Feature per Leaf Shape” 即可。

Read more »

Esri CityEngine 是一款面向于大规模城市规划行业的,交互式、沉浸式高级三维建模软件,相比传统建模更加高效省时。 通过CityEngine我们可以基于现实世界的GIS数据,构造城市的现实状态,模拟城市的历史风貌,设计城市的未来蓝图。

如何申请Esri CityEngine 30天试用?

Step 1

访问Esri官方试用地址:https://www.esri.com/en-us/arcgis/products/esri-cityengine/trial

点击“Start CityEngine Trial

Step 2

创建一个Esri账号,点击“Create a Public Account”; 如果已经拥有过 Esri 账号,可以直接登录。

PS:每个邮箱只能申请一次试用。请申请试用时,确保邮箱是第一次注册。

​ 国内不建议使用Facebook和Google账户登录,避免后续登录的麻烦,你懂的。

Read more »
0%