使用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’”的语句作为空间过滤条件即可。
同样ArcMap中,图层对话框的Definition Query标签页,也接受空间SQL语句。
背景:这是在使用动态缓存图层时遇到的问题。
Category Archives: 从这里发布的
此刻,无法自抑
阿琳的病情却在逐步地恶化。1945年6月16日,她去世了,那时他们结婚才三年,离第一次核爆炸只有一个月了。理查德陪她度过了生命的最后一刻,可是他很麻木,仿佛失去了知觉。他对自己的缺乏感情感到很吃惊。几个星期以后,当他路过一家商店的时候,看到了一件连衣裙,他想要是阿琳穿上一定很美。这时他才突然悲从中来,他失声痛哭,无法自抑。
此刻,无法自抑
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-wzfarcgisserverconfig-store’.”
排查和解决办法:
- 确保config-store目录的权限正确:文件夹属性中“共享”和“安全”两个标签页中都需要让系统账户(默认为“arcgis”)具有读写权限;
- 确保ArcGIS Server的Windows服务的登陆账户为ArcGIS的系统账户(默认为“arcgis”),而不是localsystem。因为以localsystem启动的Windows服务进程对局域网共享位置没有访问权限。正确设置如下:
这回问题出在第二点,ArcGIS 10.1 for Server的安装进行过一次修复,之后Windows服务的启动账户就变成localsystem了。改回默认的arcgis账户即可。
ArcGIS中读取.bil文件
客户现有一应用程序可读取.bil栅格文件作为高程背景显示,如下图:
数据文件有:demo.bil文件(2,077,616字节),index文件(74字节),projection文件(58字节)。现需要转入ArcGIS平台来进行显示,查看帮助,ArcGIS对.bip栅格格式有原生支持。但在ArcMap中加载该文件时,确报错无法打开。
查看ArcGIS关于.bil格式的帮助说明,得知.bil是一种未经过压缩的二进制文件。存储格式如下图:
是按行依次存储每个波段每列像元信息的。要在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文件如下:
有了正确的.hdr文件后,就可以在ArcMap中直接加载了(projection文件用于设置正确的投影信息):
感谢@红毛小屁孩的指导帮助,比帮助文件好用得多。
Portable Basemap Server发布2.0.7版本
更新内容:
~为影像数据源增加本地缓存(.cache文件)功能。详见这里;
~在线地图转换/下载到MBTiles格式时,增加按Shapefile文件范围下载功能。详见这里;
~为转换后的MBTiles文件增加了”压缩”选项,某些情况下可大幅减小MBTiles文件体积。详见这里;
下载地址:https://geopbs.codeplex.com/
详见:https://blog.newnaw.com/?p=890
出租车拼车应用
和上回的地图微博一样,这只是个想法,欢迎各位转载(请注明出处),讨论,实现。
拼车应用搜索一下已经有不少,可问题是普遍功能过于繁琐,需要注册,并且拼车需要事先商定,不够自由和实用;前些天看了有报道说重庆推出了打车的移动应用,用户可以呼叫附近的空车。可问题是,在大多数人需要打车到时候不是看不到附近的出租车,而是根本就没有空车。这个与用手机查询附近厕所在哪,加油站在哪一样,有点多此一举,直接动嘴问问要快速环保得多。
所以这次设想的是一个专门针对出租车的拼车移动应用。虽然一些城市已经开始鼓励拼车,但实施起来问题很多,经常造成矛盾,设想有了这个应用后,出租车拼车可能会变得方便可行受欢迎。应用分两种客户端,一个是乘客用的,一个是出租车司机用的。
- 如何拼车:乘客打开应用后,可自动获取自己当前所在位置,只需输入自己想去的目的地即可;出租车司机在每拉到一个客人后,输入一下本次送客的目的地即可。这样出租车的客户端就可以计算出从当前位置到达目的地的所有路线,并显示出所有可行路线附近,与本次目的地相同的想要搭车的乘客位置,司机就能根据意愿,准确找到可以捎带的乘客,而不用盲目停车询问;乘客输入目的地后,可在手机上看到,行进路线经过当前或附近位置,并且目的地与自己相同或相近的附近出租车,通过点击该出租车,就可以向出租车司机发出拼车请求,出租车司机收到请求后(可能有多个拼车请求),可以根据意愿选择要捎带的乘客。在没有拼车成功之前,出租车的客户端可根据当前的行进路线,动态刷新周围需要拼车乘客的信息;而乘客也可实时看到,可以满足自己拼车要求的出租车位置;乘客和出租车都有发起请求或接受请求的机会;
- 如何避免抢客或抢车冲突:仅仅有匹配机制还不行,因为如果多辆出租车同时想拉同一个乘客或者多个乘客想拼同一辆车就会产生冲突,这时可以通过和阿凡达星球的生物配对一样的机制,来解决这个问题。当乘客向出租车发起请求,该出租车应答了乘客请求后,或出租车向乘客发起请求,乘客应答了出租车后,即认为他们配对成功,就会同时从其他所有乘客和出租车的客户端上消失;对于出租车而言,本来想去拉乘客A,但还未走到跟前发现A已经消失了,就知道A被同行拉走了,应用会自动推荐并显示下几个适合捎带的乘客,由于没有绕路和停车,就不会影响最先上车的乘客;对于乘客来说,本来想搭乘出租车A,但还没发起请求或发起请求未收到应答之前,就发现A已经消失了,就知道A拉了别的乘客或者出租车拼的已经满掉了,即可向下一辆车发出请求,这对于打车的人来说再正常不过;
- 如何避免恶意请求或恶意应答:这个可以借助评价体系和移动设备的定位功能来解决。乘客和出租车都有相应的信誉值,比如淘宝的几颗心或者几颗钻。乘客发起或应答请求时自然会选择钻比较多的出租车,出租车应答或发起请求时自然会选择心比较多的乘客。信誉值如何累计呢?如上面所说,乘客和出租车建立阿凡达连接双双消失在地图上后,他们必然会为本次建立连接而增加或减少信誉值。依据就是乘客的位置和出租车的位置是否有过重叠。如果是乘客发出的请求,系统会以乘客当前位置为评价标准,如果出租车到过该位置而最终此次拼车没有成功,则可能是乘客放了鸽子,搭别的车走了,乘客信誉减少;如果是出租车发起的请求,系统仍然以需要搭车乘客的当前位置为标准,如果此次拼车未能成功是因为出租车根本没有经过该位置,则可能是出租车放了乘客的鸽子,出租车信誉减少;拼车成功并结束后,双方信誉加一;
- 如何计算合理的收费:有了位置信息后这个就很简单了,按照乘客上下车经过的路线来计程即可,避免了传统拼车司机不好合理收费的问题。而收费时可以利用移动设备NFC(近场通信)功能来完成,只需将手机和出租车客户端接近一次即可完成收费付费过程,具体应用可以是支付宝/paypal或者网银/google wallet。
一些补充:
- 出租车使用的客户端可以是具有语音输入输出,大字体显示功能的平板设备,方便司机在不停车的情况下进行操作(这在国外已经是事实了);
- 这个应用双方无需注册即可使用,减少部分用户对于任何注册过程的抵触情绪。但如果不注册则无法显示用户信誉,减少拼车成功的可能性(对于低信誉的用户如果想要通过匿名使用的方式来隐藏自己的劣迹的话,若干次后服务器可将其列入黑名单或标记该移动设备为欺诈等级,依据是设备的mac地址或其他唯一标识);
- 对于平台运营方来说,功能简单所以实现成本小,应用必须通过服务器端交互所以具有很强的用户粘黏度,不用担心用户流失或被抄袭;
- 可抽成,在每一次拼车成功支付时抽成5毛,做为平台报酬;
- 如此拼车若可行,可考虑适当降低燃油附加费甚至起步价,降低乘客成本的同时也可给司机带来更多的收入机会;
- 至于拼车是否合法的问题在此不做讨论。
此刻的心情
两种极端的情感同时袭来,两种不知所措的感觉,让我双倍不安,不知如何是好。
Portal for ArcGIS迁移
针对目前的1.6.2.1版本。
Portal for ArcGIS产品的目录结构如下:
portal
–mysql-5.5.9-winx64
–…
arcgisportal
–content
–db
–index
–logs
–portal-config.properties
portal文件夹下存储Portal for ArcGIS所要用到的若干应用,包括对账户,组,权限等关系进行存储的mysql程序;arcgisportal文件夹下存储相关的数据文件,content里存储所有用户上传的item信息,db目录即是mysql内数据库文件的物理存储路径,index和logs文件内容如其名。portal-config.properties文件存储了Portal for ArcGIS产品的配置信息。
如果部署了Portal产品,并在其中建立了账户,组,上传了项目,这时想要将这些内容迁移到另一台机器的Portal中去,只需要停止Portal相应的服务,拷贝arcgisportal文件夹下的content,db,index三个文件夹并覆盖新Portal中的同名目录即可。如果不想停止Portal服务的话只要用mysql的工具备份/还原其中的geowarehouse这一个数据库即可。
ps:portalmysql-5.5.9-winx64data目录下的文件夹可以忽略或删除,因为从my.ini文件可以看到物理存储位置是在arcgisportaldb文件夹下;
pps:Portal for ArcGIS产品用于搭建GIS资源门户网站,与云环境配合可为企事业单位节约大量成本。目前安装非常简单,只需install和portal start两个命令即可,10秒之内搞定。具体功能可参考ArcGIS.com和GISDay。
Portable Basemap Server发布2.0.6版本
更新内容:
~Portable Basemap Server已在CodePlex上开源,LGPL协议;
~添加ArcGIS Cache/在线地图数据源到MBTiles格式(.mbtiles)的转换/下载工具。详见这里;
~为在线地图数据源添加本地缓存功能。详见这里;
~改进ArcGIS Tile Package(.tpk)格式文件的读取速度;
~修复已知bug;
详见:https://blog.newnaw.com/?p=890
Stan
听Eminem大概是从上大二开始,《8 mile》也很喜欢,Stan这首歌自然凭借它的旋律给我留下了深刻的印象。以前只知道Dido部分的旋律很好听,但最近才仔细看了这首歌的歌词,才知道里面有这么悲伤、励志的一个故事,像看了一场电影。
移动设备观看
Chorus: Dido
My tea’s gone cold I’m wondering why I..
茶越来越凉,我始终不知道为什么…
got out of bad at all
我的心情总是不好。
The morning rain clouds up my window..
清晨的雨遮住了我的窗
and I can’t see at all
我什么也看不见了
And even if I could it’ll all be gray,
看见的都是灰色
but your picture on my wall
但在墙上却有你的照片,
It reminds me, that it’s not so bad,
它提醒我,这还不算坏,
it’s not so bad..
还不算坏……
1st Chorus: volume gradually grows over raindrop background
2nd Chorus: full volume with beat right after “thunder” noise
Dear Slim, I wrote you but you still ain’t callin
亲爱的Slim,我写信给你,但你仍未答复。
I left my cell, my pager, and my home phone at the bottom
我把我的地址、姓名和电话都留在了信末,
I sent two letters back in autumn, you must not-a got ’em
秋天里发了两封信,你肯定都没有收到
There probably was a problem at the post office or something
可能是邮局或是什么地方搞错了
Sometimes I scribble addresses too sloppy when I jot ’em
有时我总是把地址写得很潦草
but anyways; fuck it, what’s been up? Man how’s your daughter?
但又能怎样呢?操他的蛋吧!你的女儿好吗?
My girlfriend’s pregnant too, I’m bout to be a father
我的女朋友也怀孕了,我就要做爸爸了
If I have a daughter, guess what I’ma call her?
如果是女孩,你猜我会叫她什么?
I’ma name her Bonnie
我会给她起名叫Bonnie
I read about your Uncle Ronnie too I’m sorry
我也读到了你的Ronnie叔叔的事儿,我很难过。
I had a friend kill himself over some bitch who didn’t want him
我有个朋友因为一个女人不要他而自杀了,
I know you probably hear this everyday, but I’m your biggest fan
我知道你也许每天都听到这个,可我是你的超级歌迷
I even got the underground shit that you did with Skam
我甚至有你和Skam一起做的地下音乐
I got a room full of your posters and your pictures man
我的房间里贴满了你的海报和照片
I like the shit you did with Rawkus too, that shit was phat 我也喜欢你和Rawkus的歌,那棒极了
Anyways, I hope you get this man, hit me back,
反正,我很希望你能看见这封信,给我回信吧,
just to chat, truly yours, your biggest fan,This is Stan
只是聊个天,我是你最忠诚的歌迷―stan
{Chorus: Dido}
Dear Slim, you still ain’t called or wrote, I hope you have a chance
亲爱的Slim,你还是没有给我回复,希望你能有机会回信
I ain’t mad – I just think it’s FUCKED UP you don’t answer fans
我还没疯,我只是认为你不给歌迷回复简直太糟糕了
If you didn’t wanna talk to me outside your concert, you didn’t have to,
如果你不想在剧场外理我,你就可以不理,
but you coulda signed an autograph for Matthew
但至少应该为Matthew签个名。
That’s my little brother man, he’s only six years old
那是我的小弟弟,只有六岁
We waited in the blistering cold for you,four hours and you just said, “No.”
我们在该死的寒风中等了四个小时,可你只是说了个“不”
That’s pretty shitty man – you’re like his fuckin idol
这太TMD糟糕了,伙计,那个小家伙可是把你当成了他的偶像。
He wants to be just like you man, he likes you more than I do
他想要成为像你那样的人,他比我更喜欢你。
I ain’t that mad though, I just don’t like bein lied to
我还没疯,我只是不喜欢被欺骗。
Remember when we met in Denver – you said if I’d write you
记得我们在丹佛的相遇吗?你说如果我写信,
you would write back
你会回信的
see I’m just like you in a way
看吧!我们其实有相同的境遇
I never knew my father neither;
我也不知道我爸是谁,
he used to always cheat on my mom and beat her
他总是背着我妈妈在外面鬼混而且还打我妈妈。
I can relate to what you’re saying in your songs so when I have a shitty day, I drift away and put ’em on, cause I don’t really got shit else so that shit helps when I’m depressed
我能在你的歌里看到自己。所以在那些心情沮丧的日子里, 我就飚着车漂着移听着你的歌,
因为只有你的歌能帮我。
I even got a tattoo of your name across the chest
我甚至在胸前纹上你的名字
Sometimes I even cut myself to see how much it bleeds
有时我也会割开手腕看它到底能流多少血
It’s like adrenaline, the pain is such a sudden rush for me
那样非常刺激,那些痛楚一阵阵向我袭来
See everything you say is real, and I respect you cause you tell it
看,你说的什么事情我都认为是对的,因为那是你说的
My girlfriend’s jealous cause I talk about you 24/7
我女友开始嫉妒,因为我每天都在谈论你
But she don’t know you like I know you Slim, no one does
她不像我如此的了解你,没人能
She don’t know what it was like for people like us growin up
她不会明白有着我们这样成长经历的人
You gotta call me man, I’ll be the biggest fan you’ll ever lose
你一定要回信,我是你永远都不能失去的最忠实的歌迷
Sincerely yours, Stan .
你真诚的朋友,Stan
– PS: We should be together too
另外,我们也将会在一起的
{Chorus: Dido}
Dear Mister-I’m-Too-Good-To-Call-Or-Write-My-Fans,
亲爱的从不回信先生
this’ll be the last package I ever send your ass
这将是我寄给你最后的邮件了
It’s been six months and still no word – I don’t deserve it?
六个月了,你一个字都没回―我不配得到你的回信吗?
I know you got my last two letters;
我知道你收到了最近的两封信;
I wrote the addresses on ’em perfect
我把地址写的清清楚楚
So this is my cassette I’m sending you, I hope you hear it
这回是我要寄给你的磁带,我希望你能听到
I’m in the car right now, I’m doing 90 on the freeway
我在车上,在高速路上开到90
Hey Slim, I drank a fifth of vodka, you dare me to drive?
嘿,slim,我喝了15瓶伏特加,你说我还能开吗?
You know the song by Phil Collins, “in the air tonight”
你知道PhilCollins的那首歌“in the air tonight”吗?
about that guy who coulda saved that other guy from drowning
那首歌说的是有一个人可以救另一个落水的人,
but didn’t, then Phil saw it all, then at a a show he found him?That’s kinda how this is, you coulda rescued me from drowning
但那家伙没有去救,Phil看到是事件的全过程,并且在后来的一个演出上找出了那个见死不救的人,那情形就和现在一样,你本可以阻止我溺水,
Now it’s too late – I’m on a 1000 downers now, I’m drowsy
但现在一切都晚了,我吃了1000片安眠药
and all I wanted was a lousy letter or a call
眼睛睁不开了,我想要的只不过是个该死的回信
I hope you know I ripped +ALL+ of your pictures off the wall
我希望您能知道我把你所有的照片都从墙上撕了下来
I love you Slim, we could be together, think about it
我爱你slim。我们本应该在一起的,想想吧
You ruined it now, I hope you can’t sleep and you dream about it
现在你把一切都毁了,我希望你会因此而失眠,你一定会梦到这一切。
And when you dream I hope you can’t sleep and you SCREAM about it
当你梦到时,你会醒来并且尖叫
I hope your conscience EATS AT YOU and you can’t BREATHE without me
我希望你会受到良心的谴责,失去我,你将无法呼吸
See Slim; {*screaming*} Shut up bitch! I’m tryin to talk!
看看吧,slim贱货,闭嘴!我正在说话呢
Hey Slim, that’s my girlfriend screamin in the trunk
嘿,slim,那是我的女友在后备箱中尖叫
but I didn’t slit her throat, I just tied her up, see I ain’t like you
但我不会割开她的喉咙,我只是绑住她,看,我才不像你呢
cause if she suffocates she’ll suffer more, and then she’ll die too
因为窒息而死会让她更痛苦,而且她马上也就要死了
Well, gotta go, I’m almost at the bridge now
好了,该走了,我已经到桥上了,
Oh shit, I forgot, how’m I supposed to send this shit out?
噢,见鬼,我TMD怎么才能把磁带寄出去呢?
{*car tires squeal*} {*CRASH*}
.. {*brief silence*} .. {*LOUD splash*}
{Chorus: Dido}
Dear Stan, I meant to write you sooner but I just been busy
亲爱的Stan,我本打算尽快回信给你,但最近太忙了
You said your girlfriend’s pregnant now, how far along is she?
你说你的女朋友怀孕了,她现在怎样了?
Look, I’m really flattered you would call your daughter that
你能给你女儿起那个名字,我真的感到十分高兴
and here’s an autograph for your brother,
这里有给你弟弟要的签名,
I wrote it on the Starter cap
我写在了照片的上面
I’m sorry I didn’t see you at the show, I must miss you
很抱歉在演唱会上没能见到你,我肯定是错过了
Don’t think I did that shit intentionally just to diss you
不要认为我写那些歌是故意让你难过的
But what’s this shit you said about you like to cut your wrists too?
但是你说你自残割自己手腕,那是多么愚蠢的事情啊?
I say that shit just clownin dogg,
我唱那些只是说着玩的,笨蛋
c’mon – how fucked up is you?
拜托,你TMD在搞什么?
You got some issues Stan, I think you need some counseling to help your ass from bouncing off the walls when you get down some
你有些小问题,Stan,我想你需要些建议来帮帮你如何在沮丧的时候坚强起来
And what’s this shit about us meant to be together?
你说我们将会在一起是什么意思?
That type of shit’ll make me not want us to meet each other
这种话让我不想和你见面
I really think you and your girlfriend need each other
我想你和你的女友确实是相互需要的
or maybe you just need to treat her better
而且你应该对她好一些
I hope you get to read this letter, I just hope it reaches you in time, before you hurt yourself,
希望你能读到这封信,但愿它能赶在你伤害自己前寄到,
I think that you’ll be doin just fine
我感觉那会让你好起来的
if you relax a little, I’m glad I inspire you Stan, but why are you so mad? Try to understand, that I do want you as a fan
如果你放松一下,很高兴我可以激励你,但你为何那样疯狂,要试着去理解,我非常喜欢你当我的歌迷
I just don’t want you to do some crazy shit
我不想再看到你做疯狂的举动了
I seen this one shit on the news a couple weeks ago that made me sick
几周前我看到一个让我恶心的新闻
Some dude was drunk and drove his car over a bridge
一个家伙喝醉了并且开车冲到了桥下
and had his girlfriend in the trunk, and she was pregnant with his kid
后备箱里是他怀孕的女友
and in the car they found a tape, but they didn’t say who it was to
在车上还找到了一盒磁带 可他们没说磁带是给谁的……
Come to think about it, his name was.. it was you
我想想,他的名字是……是你
Damn!
该死的!