2013年5月10日星期五

Portable Basemap Server发布3.0版本

更新内容:

~添加以Windows服务方式运行功能,即使不登陆系统,也可通过REST Admin API对PBS进行管理;
~发布的缓存服务增加对OGC WMTS规范的支持。详见这里
~数据源增加对OGC WMS服务的支持。详见这里
~数据源增加对高德本地缓存文件的支持。详见这里
~预览界面中可显示切片来源(动态生成/文件缓存/内存缓存,以不同底色区分);
~添加日志功能;
~修复已知bug;

下载地址:https://geopbs.codeplex.com/
详见:http://blog.newnaw.com/?p=890

2013年4月25日星期四

在ArcGIS Server REST API中的Export Map操作里进行空间查询

使用ArcGIS API for Javascript/Flex/Silverlight有一段时间的朋友应该知道,客户端动态地图服务的显示是由服务器端ArcGIS Server REST API中的Export Map操作完成的。而Export Map这个操作中有一个layerDefs参数,允许传入sql语句进行属性过滤。如果想在出图时,除了属性过滤,同时也进行空间过滤该怎么办(类似query的geometry空间查询,注意和bbox参数区别)?
乍一看export操作并没有像服务子图层query操作一样的geometry参数,而我遇到的地图服务也只有一个点图层。一开始想首先用子图层的query进行空间查询,设置returnIdsOnly为true,之后将这些符合空间条件要素的ids写到layerDefs里,类似”0:objectid IN (1,2,3,4…)”。但最后发现,layerDefs这个参数是接受空间SQL语句的,所以只需构造好空间查询的SQL语句,写入layerDefs进行过滤即可获得想要的结果。
比如想在出图时,限定只输出某个矩形范围内的要素,则可用类似”0:sde.st_within (shape, sde.st_geometry ('polygon ((12818466 4196179,13308886 4196179,13308886 4499482,12818466 4499482,12818466 4196179))', 3857)) = 't'”的语句作为空间过滤条件即可。
image 同样ArcMap中,图层对话框的Definition Query标签页,也接受空间SQL语句。
image  背景:这是在使用动态缓存图层时遇到的问题。

2013年2月21日星期四

此刻,无法自抑

阿琳的病情却在逐步地恶化。1945年6月16日,她去世了,那时他们结婚才三年,离第一次核爆炸只有一个月了。理查德陪她度过了生命的最后一刻,可是他很麻木,仿佛失去了知觉。他对自己的缺乏感情感到很吃惊。几个星期以后,当他路过一家商店的时候,看到了一件连衣裙,他想要是阿琳穿上一定很美。这时他才突然悲从中来,他失声痛哭,无法自抑。

此刻,无法自抑

出处:the whole universe is in a glass of wine
更多:百度百科:理查德·费曼

2013年1月27日星期日

ArcGIS 10.1 for Server加入站点时报错Unable to access the config store on …

在一台Windows Server 2003 R2 X64 SP2机器上装好ArcGIS 10.1 for Server后,加入已有site时,Manager报错:

Failed to join the site 'http://esri-wzf:6080/arcgis/admin/'. Server machine 'http://esri-wzf:6080/arcgis/admin//machines/register' returned an error. 'Failed to register the server machine 'WIN03'. Server machine 'http://WIN03:6080/arcgis/admin' returned an error. 'Unable to access the config store on '\\esri-wzf\arcgisserver\config-store'.''

排查和解决办法:

  1. 确保config-store目录的权限正确:文件夹属性中“共享”和“安全”两个标签页中都需要让系统账户(默认为“arcgis”)具有读写权限;
  2. 确保ArcGIS Server的Windows服务的登陆账户为ArcGIS的系统账户(默认为“arcgis”),而不是localsystem。因为以localsystem启动的Windows服务进程对局域网共享位置没有访问权限。正确设置如下:
    image

这回问题出在第二点,ArcGIS 10.1 for Server的安装进行过一次修复,之后Windows服务的启动账户就变成localsystem了。改回默认的arcgis账户即可。

2012年12月21日星期五

ArcGIS中读取.bil文件

客户现有一应用程序可读取.bil栅格文件作为高程背景显示,如下图:
planetbil 
数据文件有:demo.bil文件(2,077,616字节),index文件(74字节),projection文件(58字节)。现需要转入ArcGIS平台来进行显示,查看帮助,ArcGIS对.bip栅格格式有原生支持。但在ArcMap中加载该文件时,确报错无法打开。
查看ArcGIS关于.bil格式的帮助说明,得知.bil是一种未经过压缩的二进制文件。存储格式如下图:
bilformat 是按行依次存储每个波段每列像元信息的。要在ArcGIS中显示,必须有一个.hdr头文件描述其所需的一些元数据信息才行。而拿到的数据中并没有这个.hdr文件,所以要构造出该文件。查看.hdr文件的说明,是以文本方式记录了该栅格文件的行、列数,每个像元值所占的大小等内容。而原来的应用程序之所以能够读取该图像,也离不开这些信息。用记事本打开index文件,内容如下:

demo.bil 641890.000000 656130.000000 3251870.000000 3281050.000000 20.000000

乍一看并没有.hdr文件中所需的信息,但能看出上述的5个数字分别代表了.bil文件空间范围和空间分辨率。由此我们来推导.hdr文件所需的元数据信息:

  • NROWS:栅格文件的行数,(3281050-3251870)/20=1459;
  • NCOLS:栅格文件的列数,(656130-641890)/20=712;
  • NBANDS和NBITS:分别代表栅格文件的波段数和存储一个波段中每个像元值所需的比特数(pixel depth),index文件中并没有这两个信息。但.bil文件是未经过压缩的,所以我们用.bil文件的大小除以行数再除以列数,2077616/1459/712=2,得知每个像元位置上所有波段值共占2个字节(16bit)空间。理论上可以是NBANDS等于1,NBITS等于2×8=16,也可以是NBANDS等于2,NBITS=8。但我们知道逻辑上此图记录的是高程信息,相当于dem,所以应该只有一个波段,由此得知NBANDS=1,NBITS=16;
  • PIXELTYPE:由于是高程信息,所以pixel value都是正值,因此此处是UNSIGNEDINT;
  • BYTEORDER:存储每个像元值字节的排列顺序。可以由高位到低位的M,也可以是由低位到高位的I。结合原程序代码,得知此处是M。

由此创建的.hdr文件如下:
image  有了正确的.hdr文件后,就可以在ArcMap中直接加载了(projection文件用于设置正确的投影信息):
image

感谢@红毛小屁孩的指导帮助,比帮助文件好用得多。