Monthly Archives: April 2010

File Geodatabase中的lock文件

        与Personal GDB的单个.mdb文件表现形式不同,File GDB是以文件夹的形式存放在磁盘中的,进入File GDB的文件夹可以看到许多凭我们肉眼凡胎无法辨认的文件(你要是能认出来叫你犀利哥~),这向你传递一个信息,没事别到里面瞎逛。
        当一个ArcGIS程序,比如ArcMap、ArcCatalog或者ArcGIS Server(将其中的数据发布成了服务),正在访问File GDB时,ArcGIS会给其中相应的数据加上(悲观)锁,表现出来就是在该File GDB的文件夹里多了若干.lock结尾的文件。当数据被锁定时,你是无法对其进行修改或删除的。比如ArcMap里加载了一个FeatureClass,这时你无法用ArcCatalog删除它;在ArcCatalog中预览一个FeatureClass,这时你无法用ArcMap编辑它。
        除了正在使用的数据会肯定被锁以外,以下情况中还有其他数据也会被锁住:1、正在访问包含在DataSet中的某个FeatureClass时,这个DataSet内的其他FeatureClass也会被锁;2、单独的FeatureClass之间如果做了Relate,那么访问其中一个时其他的也会被锁。
        9.3+sp1以后,每个.lock文件的文件名会至少带有以下两个信息:产生该锁的进程的ID号(任务管理器,查看,选择列,勾选PID可查看),以及该进程所在的机器名。当数据被锁定时,除了以上标志明显的.lock文件外,还会有一些系统锁文件。所以根据这些.lock文件的命名,你就能判断出是哪个进程占用了数据,从而做出正确的处理。
        一般来说,.lock文件会在生成它的进程正常退出时被自动删除掉。但如果进程没有正常退出,比如崩溃后,由该进程生成的.lock文件则会继续存在,但已经没有任何作用。清除这些因意外状况遗留下的.lock文件的方法:1、重新开启该进程,则会清理上一次遗留的.lock文件;2、用Compact Database工具或ArcCatalog中的右键菜单;3、手动删除。推荐方法2,方法3慎用。除非你有备份,否则误删File GDB文件夹下一个哪怕0k的文件,都有极大的可能造成整个数据库损坏而无法修补。
        如果非要用方法3,建议在命令行下用del *.lock命令删除;如果非要用资源管理器删,建议左手在按住ctrl或shift时,右手食指不要发抖。

ESRI Silverlight Application Plus(chs)

演示地址:http://newnaw.com/pub/sl/esrislappplus 其中一些布局感谢”金属狂人”的建议
版本:ArcGIS API for Silverlight 1.2
说明:安装好ArcGIS API for Silverlight 1.2后,在vs2008中会出现两个模板程序:ESRI Standard Map Application和ESRI Showcase Map Application。其中前者与广为流传的Flex Viewer很像,但界面过于简陋,功能过于简单,如果想以它为基础构建快速应用的话还得费点功夫。在它的基础上,我将Code Gallery中的一些功能添加了进来,并将界面基本汉化,下面放出程序代码供大家学习交流之用。
功能:放大/缩小,前/后视图,放大镜,缩略图,书签,Identify,图层属性表,3个测量功能,地址定位。
截图:

下载地址:http://bbs.esrichina-bj.cn/ESRI/thread-64924-1-1.html

ps:地址搜索用到了Google Map API,具体应用时请注意版权问题。
pps:这个程序仅是个人集成,属于民间作品。
ppps:这两天之内ArcGIS API for Silverlight 2.0 beta版本便会放出,但要充分利用新的功能,必须拥有ArcGIS Server 10才行。所以对于暂时升级不了AGS的朋友,这个东西应该还是凑合能用一段时间的。

Silverlight中的Busy Indicator

        busy indicator就是执行任务或加载资源期间告诉使用者耐心等待的一个动画,有条的,圈的等。最简单的办法就是显示一个gif动画,ajax应用普及后出现了大量busy indicator,本人就收集了好多gif图片。也可以来在线生成一个。
        但silverlight中不支持gif格式的图片,该如何解决这个问题呢?列出以下几种办法供有需要的参考:

  1. 文字显示。利用DispatcherTimer类来处理,例子见这里
  2. Silverlight Toolkit中的Busy Indicator控件。不过目前只能显示条状的,对于钟爱转圈的人来说没办法了;
  3. 利用Silverlight中的动画。原理就是截取转圈的gif图画中的一帧出来,然后用RotateTansform和DoubleAnimation做一个循环为forever的从0到360度的动画,这个效果可以以假乱真,推荐使用;
  4. 利用.net image tools控件,据说可以在silverlight中插入gif。没有测试;
  5. 听上去很搞笑的一个办法,就是”在silverlight中播放swf动画”。有老外说silverlight3原生支持播放swf文件,至今没找到实现办法,这个想法本身也比较bug;另外就是可以利用html绝对定位,在silverlight上盖一个swf动画,这到是可行的。但对于小小的busy indicator,需要把它放到比较精确的位置上,浏览器大小稍有改变可能就露出马脚了。

t60 reborn

incident flashback:上周t60运行时感觉风扇有点异常,转的声音比较痛苦,但也不知道它想要什么,就没管;第二次开机时风扇惊叫一声,就罢工了,停留在Fan Error的画面,无法进系统;
casue investgation:google以下内容:t60 fan error。找到同样案例,描述是风扇缺油了,准备动手一试;
reborn procedure:两元店买来缝纫机油一瓶,药店买来带针注射器一只,百脑汇买来高级(据说)星牌导热膏一瓶,淘宝买来interchangeable precise manual tool set一套,花费2+0.5+10+23=35.5元。让风扇一次喝个饱。。。其实也就一滴油不到~再次开机,cpu温度39度,重启了两次风扇还是不转,于是开始玩疯狂越野.swf,过了一会风扇终于转了。细听就跟从大瓶里往出到酸奶一样——静谧无比呀,哈哈~
background information:蓝快t60风扇要加400元,还是换购,联想售后的价格和产品的品质真不成正比。

在Silverlight中为UIElement.Visibility添加动画

       Visibility可以控制UIElement的可见性,但其是一个枚举变量,msdn中说:“若要对作为枚举的值进行动画处理,必须使用 DiscreteObjectKeyFrame。”而关键帧动画没法做出平滑的过渡效果。
       可以利用Action来实现标题内容。
1、创建一个带opacity动画的Action。

using System.Windows;
using System.Windows.Interactivity;
using System.Windows.Media.Animation;
using System;

namespace SilverlightApp.Actions
{
    public class ToggleVisibilityAction : TargetedTriggerAction
    {
        protected override void Invoke(object parameter)
        {
            DoubleAnimation da = new DoubleAnimation();
            da.Duration = new System.Windows.Duration(TimeSpan.FromSeconds(0.3));
            Storyboard sb = new Storyboard();
            sb.Children.Add(da);
            Storyboard.SetTarget(da, this.Target);
            Storyboard.SetTargetProperty(da, new PropertyPath("Opacity"));
            
            if (this.Target.Visibility==Visibility.Visible)
            {
                da.To = 0;
                sb.Begin();
                sb.Completed += (o, e) => { this.Target.Visibility = Visibility.Collapsed; };
            } 
            else
            {
                this.Target.Visibility = Visibility.Visible;
                da.To = 1;
                sb.Begin();
            }
            
        }
    }
}

2、xaml中用之,替代visibility属性的设置。UIElement1是需要切换可见性的空间的x:Name。


       其中:
xmlns:i=”clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity”
xmlns:actions=”clr-namespace:SilverlightApp.Actions”

       ps:t60风扇罢工了:开机一声怒吼,停留在fan error。搜索了一下,据说是缺油了,等买的螺丝刀到了以后给它加加油,希望不用去找js修。这还不到3年,51nb上那么多用x31的,我以为thinkpad少说能用10年呢。。。