Category Archives: Uncategorized

Python魅力之地理数据快速处理方法

        Python作为一种成熟的脚本语言,发展势头迅猛,长期徘徊在“编程语言谱”排行前5的位置,在脚本语言中仅次于php。通过Python,开发人员可以快速试验一个想法、研究一种对象属性或不同算法,而无需编译、执行和测试任何代码。正是因为跨平台、简洁、优美的特点,它也如同GIS应用渗透于各各个行业一样,渗透在科学计算的各个领域。在GIS领域,几乎可以说开源言必称Python;而ArcGIS则将Python称为the scientific programming language for GIS:ArcGIS Server的猛将Geoprocessing Service依赖于Python,从9.4将Python IDE集成到ArcMap中也可见一斑。        前一阵Flyingis贴出了一篇类似的文章,不过还是通过动手完成一个实例,来看看它在ArcMap中的数据快速处理能力吧。描述:上传到Panoramio的照片都会有位置信息(经纬度坐标),有些朋友非常可敬,上传的照片数量可达上万张。分析一下某个用户拍照的活动范围,是件有趣和有意义的事情。思路:1、利用Panoramio的API,获取指定用户的所有照片信息;2、将关心的信息,比如作者、照片名称、照片文件链接提取出来,并将其存储到地理数据库中。        第一步:获取照片信息。先看一下Panoramio的API,REST风格,返回JSON字符串。比如通过http://www.panoramio.com/map/get_panoramas.php?order=popularity&set=public&from=0&to=20&minx=-180&miny=-90&maxx=180&maxy=90&size=medium,即可按点击次数排序获得世界范围内所有受欢迎的照片。{ “count”: 773840,”photos”: [ { “photo_id”: 532693, “photo_title”: “Wheatfield in afternoon light”, “photo_url”: “http://www.panoramio.com/photo/532693”, “photo_file_url”: “http://static2.bareka.com/photos/medium/532693.jpg”, “longitude”: 11.280727, “latitude”: 59.643198, “width”: 500, “height”: 333, “upload_date”: “22 January 2007”, “owner_id”: 39160, “owner_name”: “Snemann”, “owner_url”: “http://www.panoramio.com/user/39160”, }, { “photo_id”: 505229, “photo_title”: “Etangs près de Dijon”, “photo_url”: “http://www.panoramio.com/photo/505229”, “photo_file_url”: “http://static2.bareka.com/photos/medium/505229.jpg”, “longitude”: 5.168552, “latitude”: 47.312642, “width”: 350, “height”: 500, “upload_date”: “20 … Continue reading Python魅力之地理数据快速处理方法 »

【转载】依赖房地产为何总是难逃崩盘?

        四个字:良药苦口!        转自:时寒冰个人维护博客        围观连接:点这里         在中国,那些指出现实中的问题,表露出忧虑情绪的人,被称为“唱衰派”——这还算是客气一点的称呼,不客气的干脆就扣上 “伪专家”、“街头理论家”、“卖国贼”之类的帽子。另一方面,那些拼命唱多的,比如提出“买房就是爱国”的学者,则受到吹捧,好像他们才真正有颗“金子般”的心,是为国家着想的。        所谓良药苦口利于病,阿谀奉承胜于杀人。那些经常鼓吹房地产救国之徒,不是良心早已喂了恶狗,就是成了权势与既得利益集团的奴才,他们制造出一个虚幻的光环,迷惑决策层出台相关政策,然后,他们再趁乱打劫,牟取私利、暴利!        古今中外的历史告诉我们,凡是一味唱赞歌的,没有一个是好东西。是房地产救了中国吗?不,是毁了中国——毁了国人的幸福,毁了国人的理想,让整个民族的价值观和理想沉沦、迷失。除了房子,这个民族还剩下什么?        昨天与一位建筑商一起吃饭,他告诉我说,他退出了,不做建筑了。为什么?过去的楼板是10公分,逐渐变成9公分、8公分、7公分、6.5公分、6公分…… 到6公分(在表面看得见的地方还正常)时,他不敢做了,他恐惧了,怕将来栽倒在这上面!一座大楼倒塌,被视为没有质量问题,乃是压力差之故,而倒塌楼房的业主,竟然被建议去买旁边没有倒塌的楼房!有这样宽松的环境,让开发商自己做好质量,实在是太小看他们的胆量和智慧了。环顾四周,凡是大一点的开发商,还有多少人的妻儿没有拿到国外的绿卡或者移民国外?        楼房质量越差,房价越涨。为何?连开发商都承认,我国的建筑寿命不到30年,30年以后,现在的楼房重新拆毁再建,拆毁楼房会增加GDP,重建又要增加 GDP,GDP继续增长。房子拆了,或者倒下了,或者不能住人了,人们又要抢着买新房,房价再涨,民众财富再被既得利益集团掠去,如此循环不已,仅仅房地产一个领域,就足以支撑一个国家GDP的繁荣。国外的高科技产品,越来越先进,而价格越来越便宜,中国的房屋越建越差,连站都站不稳了,价格却越来越高。相比之下,外国人是何等之“蠢”,中国人是何等之“聪明”!当国人被一个房地产驱赶成可怜的奴隶,这个民族的精神世界在哪里呢?这个民族的归宿感在哪里?        与溜须拍马之徒不同,“唱衰派”们大都有着良好的专业背景。比如,人们熟悉的曹建海博士,是中国社会科学院工业经济研究所投资与市场研究室主任,其观点有系统的专业知识和大量数据作为支撑,只是,其研究的结论与主流的经济学家不同而已。与那些沦为了既得利益集团代言人所谓主流专家相比,“唱衰派”要真实得多。        主流的专家已被证明是颓废的垃圾。2009年全国两会期间,全国政协委员四川科伦实业集团有限公司董事长刘革新在发言中说:“主流经济学家的判断已经证明不行了,需要有一个民间独立的机构和他们进行质询,还要淘汰一部分经济学家……我们企业做的事情和主流经济学家的说法反其道而行就行了。”这是对主流学者的最好注脚。        “唱衰派”学者提出的观点,或许并未得到验证,但是,这并不意味着他们提出的问题不存在。因为,从量变到质变总需要一个过程,如果能够及时冷静地认识到问题并采取措施解决,就能防患于未然,反之,则可能导致严重后果。        前段时间,由国家旅游局和中共湖北省委宣传部共同主办的“太极湖论坛2009”上,经济学家、中国人民大学黄卫平教授说:“在这个世界上凡是靠房地产拉动的国家,结果没有不是崩盘的,世界老大美国靠房地产拉动经济结局是崩盘;世界的老二日本靠房地产拉动经济结局是崩盘;世界经济中间早已把中国的房地产列为崩盘之列,这次下滑完全归结为错误的房地产政策造成的。在世界上大概只有德国逃过这一劫,凡是这个地球上靠房地产拉动经济的国家结局都是崩盘,尤其当房地产和金融紧密结合成为一种金融衍生工具时,不崩盘那简直就不是经济。”        这种观点令房地产大佬们不爽,引来批评是难免的。问题是,学者们的研究基于大量事实与数据的基础之上,当那些用房地产拉动经济的国家相继付出惨烈的代价,中国真的能够幸免吗?命运之神,真的会一再眷顾这个信仰缺失的民族吗?        我不禁要问:除了房地产,支撑中国经济保持可持续增长的力量还有什么?就目前而言,整个世界上除了中国,再也没有把房地产业作为支柱产业发展的。日本敢把色情业作为支柱产业之一,也不敢与民生息息相关的房地产业作为支柱产业。想到这一点,不能不令人感慨!中国的房地产业是寄生或嫁接在建筑业上的,如果将建筑业与之剥离,开发商还剩下什么?在我国房地产产业链条上,规划由政府有关部门做,设计由设计单位负责,住房由建筑企业建造,开发商扮演的只是“中间人” 或“皮包商”的角色。开发商连自有资金都非常少,他们让建筑商垫资为其盖房,然后,拖欠建筑企业的工资,农民工工资拖欠问题由此而来。房屋还没有建好,开发商就预售房屋,回收资金。因此,中国的开发商经常玩空手套白狼的游戏。也正因为中国的开发商只是一群皮包商或食利阶层,所以,他们才可以不问经营管理,每天像明星一样走穴,游走于论坛与电视节目之间,这本身难道不是皮包商的最好证明吗?除了房地产开发行业,还有哪个行业的老总可以如此逍遥?         支柱产业意味着一种定位或者引导,如果扮演“皮包商”角色的开发商被作为推动中国经济发展的主导,那么,必然把民众引向投机。道德日益滑坡的现状,就是最好的证明。        在次贷危机的影响仍在延续的大背景下,再次把房地产摆放到“救世主”的位置上,助推房价上涨,进一步蚕食和透支了民众的购买力,这必然挤压其他领域的消费。另一方面,房地产泡沫的快速累积与金融的紧密嫁接,使得整个经济的系统性风险加大。这是其他国家因此自吞苦果的原因,也是他们因此重视民生,不从房地产领域获取暴利的原因。        中国需要一个能够替代房地产的支柱产业。        摩根士丹利亚洲主席史蒂芬·罗奇最近撰文指出:“不断飙升的投资对2009年上半年中国GDP增长的贡献率达到了空前的88%——是过去10年43%均值的两倍。同时,中国各银行的贷款质量多数确实受到今年上半年大量信贷投放的影响——这一趋势可能为新一波银行不良贷款播下了种子。”        7月31日下午,有记者采访我,问我这些“唱衰派”是不是有什么阴谋。我回答说:“有没有阴谋我不知道,但有一点是肯定的,这些专家讲的隐患的确值得我们重视。”“唱衰派”专家的研究,虽然与主流格格不入,却是综合世界经济历史并结合中国国情得出的结论,应该说,这种研究是系统而严谨的。退一步说,即便 “唱衰派”学者的观点一无是处,那么,听听他们的研究,对照一下现实中存在的问题,并加以解决,难道不是理性的态度吗?        别等到问题集中释放时候才重视“唱衰派”的观点,到那个时候,可能真的晚了。无论是决策者还是投资者,都需要多一个参照,多一分冷静。千万别再妖魔化“唱衰派”,这容易扼杀或掩盖那些理性的声音,使这个国家失去理性反思的最后机会。        作为热爱这片土地的一个公民,我为这片多灾多难的土地和同样多灾多难的人民祈祷!        2009年8月3日

ArcGIS API for Silverlight开发入门(6):图层类型小结

        在用Silverlight API开发的过程中,不论是从客户端提交到服务器端的数据,还是从服务器端返回客户端的数据,都要表现在浏览器中,具体的来说是Map控件里。但根据各自类型的不同,比如数据源,地图服务的类型,是否缓存等,决定了它们将处于某个图层里,前面讲过的GraphicsLayer就是一种图层。清楚地认识这些图层类型,对于处理于服务器与客户端之间的地图数据来说是很重要的。        所有的图层都是从Layer类型继承而来的,可以参考下载的API中的对象模型图。Layer  |–TiledMapServiceLayer  |       |–ArcGISTiledMapServiceLayer  |–DynamicLayer  |       |–DynamicMapServiceLayer  |                 |–ArcGISDynamicMapServiceLayer  |                 |–ArcGISImageServiceLayer  |                 |–GPResultImageLayer  |–GraphicsLayer  |       |–FeatureLayer   |–ElementLayer         下面就按顺序认识一下这些图层吧,也包括Silverlight API中独有的FeatureLayer。 1、Layer:        继承自Silverlight中的DependencyObject,并实现了INotifyPropertyChanged接口,是Silverlight API中其他图层的基类。可以把它看成麦子,再好吃的凉皮,泡馍都是由它做出来的; 2、TiledMapServiceLayer:        继承自Layer,是所有使用了缓存的地图服务的基类。通过它可以在程序中加入经过缓存的,来自不同数据源的地图服务。比如ArcGIS Server的地图服务,Google Map的地图,Virtual Earth的地图等; 3、ArcGISTiledMapServiceLayer:        继承自TiledMapServiceLayer。像上面说的一样,这个图层扩展了TiledMapServiceLayer,于是支持由ArcGIS Server 9.3版本发布的经过缓存的地图服务;又比如ArcGIS Server 9.2版本发布的缓存地图服务不支持REST方式连接,如果要在93的客户端API中使用的话,就可以通过TiledMapServiceLayer扩展一个比如ArcGISTiledMapServiceLayer92,来支持92Server发布的缓存地图服务; 4、DynamicLayer:        继承自Layer,是动态地图服务的基类; 5、DynamicMapServiceLayer:        继承自DynamicLayer,对应于TiledMapServiceLayer,要使用未经过缓存的动态地图服务,就得通过扩展这个图层来实现; 6、ArcGISDynamicMapServiceLayer:        继承自DynamicMapServiceLayer,针对ArcGIS Server 9.3版本发布的动态地图服务。同理,如果要在客户端API中使用其他动态地图服务,比如OGC的WMS服务,则也需要像这个图层一样,扩展上面的DynamicMapServiceLayer来实现; 7、ArcGISImageServiceLayer:        继承自DynamicMapServiceLayer,针对ArcGIS Server 9.3版本发布的Image Service,因为影像服务也属于动态的地图服务。在客户端API中,可以通过ArcGISImageServiceLayer的一些属性,方便通过浏览器来展示服务器端的影像数据,比如通过BandIds属性,可以快速调整影像数据显示波段的组合(RGB通道),提供不同结果供用户查看。点击这里,查看一个实例; 8、GPResultImageLayer:        继承自DynamicMapServiceLayer,针对Geoprocessing服务所产生的结果。可以请求服务器端的GP服务将结果动态生成一张图片,将此图片作为GPResultImageLayer图层直接添加到Map控件中; 9、GraphicsLayer:        继承自Layer,是图形数据集中展现的地方,在第四讲中已经详细讨论过了; 10、FeatureLayer:        继承自GraphicsLayer,这也是Silverlight API中的亮点之一,通过它可以完成一个比较炫的功能:        整个过程在xaml中就可以实现,只需要在Map的Layers中插入以下代码即可:<esri:ArcGISTiledMapServiceLayer ID=”StreetMapLayer” Url=”http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer”/><esri:FeatureLayer ID=”featurelayer” Url=”http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/0″ Where=”POP1990 > 75000″ ClusterFeatures=”True” FlareBackground=”#99FF0000″ FlareForeground=”White” MaximumFlareCount=”9″ FeatureSymbol=”{StaticResource markersymbol}”> <esri:FeatureLayer.OutFields> <sys:String>CITY_NAME</sys:String> <sys:String>POP1990</sys:String> </esri:FeatureLayer.OutFields> <esri:FeatureLayer.MapTip> <Grid Background=”LightYellow”> <StackPanel Margin=”5″> <TextBlock Text=”{Binding Converter={StaticResource MyDictionaryConverter}, ConverterParameter=CITY_NAME, Mode=OneWay}” FontWeight=”Bold” /> <StackPanel Orientation=”Horizontal”> <TextBlock Text=”Population (1990): ” … Continue reading ArcGIS API for Silverlight开发入门(6):图层类型小结 »

ArcGIS API for Silverlight开发入门(5):任务外包——Tasks

        通过上一节的学习,我们已经知道了如何与GraphicLayer交互,但毕竟GIS不是一个画板,所以这节来看一下如何通过Silverlight API完成GIS中的分析功能。        GIS之所以是一个通用的工具,就是因为它具有各种各样分析和处理数据的能力。Silverlight API中提供了Task,使我们能够轻松完成常见的分析任务。        先来考虑一下吃饺子的场景。要想吃饺子,我们需要先去买菜,买肉,回家后在厨房里洗菜,揉面, 拌馅,包饺子,煮饺子,吃饺子,之后别忘了洗碗;另一种情况就是去饭馆,告诉服务员我要吃3两茴香,3两韭菜的饺子,然后等着饺子端到你面前,开吃,走人。        在ArcGIS Server程序开发中,要完成GIS的分析功能其实和吃饺子是一样的。用ADF编程就像在家里吃饺子,除了架设服务器,所有的工作基本上也都得我们自己在服务器端来完成,要处理的地方比较多;而用客户端API编程相当于去外面吃饺子,我们只要把任务交给相应的Task,之后接受结果就行了,不用做饺子。唯一不同的就是在外面吃完饺子别忘了付钱,而用Task完成分析任务则是免费的。这点也体现在使用客户端API中的Task时,是由ArcGIS Online提供给你的,不需要自己购买AGS软件。        现在来看看Silverlight API目前给我们提供了那些Task功能:Query:能够在已经发布的服务数据中,通过属性条件(可以属性字段中进行关系判断,字符查找等),图形条件(与输入的图形相交、包含、相离等),或者是两者的组合,查询出满足条件的数据并返回。相当于Engine中的SpatialFilter,当然也是QueryFilter。Find:在地图数据的属性字段中查找包含有关键字参数的数据并返回。Identity:对鼠标当前点击位置上的数据进行辨识并返回结果,可以对多个图层的数据进行辨识。Address Locator:输入经纬度,返回地址结果(Geocoding);输入一个地方的地址,返回经纬度结果(Reverse Geocoding)。由于国内地图数据保密工作做的相当好,这个Task暂时用不到。Geometry Service:可以对输入的地理数据进行如缓冲区,动态投影,面积/周长量算等几何操作。Geoprocessing:能够完成复杂的GIS任务,类似ToolBox中的工具。        抽象一下,可以看出,Query完全可以完成Identity和Find的工作,但后两者在特定场合下使用起来比Query要方便的多;Geoprocessing完全可以替代Geometry Service,但是在利用REST API编写的程序中,要尽量使用Geometry Service。        再抽象一下,Silverlight API中的这几个Task和JavaScript/Flex API中的Task是大同小异的,因为其实它们都是AGS 9.3 REST API中暴露出来的操作资源(Operation Resource)见下图:         后面的代码中实际上也是把输入参数封装起来提交到了REST API的特定Endpoint上。要理解好客户端API中的Task,建议熟读AGS的REST SDK。        Task的用法基本上相同,都遵循这几个步骤:初始化Task,设置Task所需参数,提交任务,等待服务器完成任务后,处理返回的结果;进饭馆,想好你要吃什么饺子,告诉服务员,等饺子做好端上来,开始吃。好了,下面我们就通过一个实例(点击这里,查看实例),来学习一下Query和Geometry两个Task的用法。         首先选择工具条中的画线工具,在屏幕上画一条曲线,会根据曲线自动生成一个距离100公里的缓冲区显示在地图上,之后开始查询缓冲区图形经过的州(相交),将结果显示在地图上。可以单击每个州查看详细信息。这里假设你已学习了前几节的内容,只讨论Task用法的部分。1、利用所画的线生成缓冲区。画线利用的是Draw工具中的Freehand,在这个动作完成后会触发Draw的OnDrawCompleted事件,自然可以在这里开始进行缓冲区的工作,用的是Geometry Service里的Buffer。        初始化Geometry Service。假设已经在Map1中添加了ID为glayerResult的GraphicsLayer,linesymbolred是提前设置好的CartographicLineSymbol:private void Draw1_OnDrawComplete(object sender, DrawEventArgs args) { Draw1.Deactivate();//Freehand动作失效 //将Freehand画的曲线显示在地图上 GraphicsLayer glayer = Map1.Layers[“glayerResult”] as GraphicsLayer; Graphic g = new Graphic(); g.Symbol = linesymbolred; g.Geometry = args.Geometry; glayer.Graphics.Add(g); //初始化Geometry Service GeometryService geometrytask = new GeometryService(“http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer”); }        Geometry Service的初始化使用构造函数来完成的,里面接受一个URL,这个是Geometry Service的REST API Endpoint。顺便说一下,不同于其他服务比如MapService,一个GIS Server只能发布一个GeometryService,并且它的名称必须是Geometry。        当一个Task完成时会触发Completed事件,失败时也有Failed事件,对这两个事件进行监听:geometrytask.BufferCompleted += … Continue reading ArcGIS API for Silverlight开发入门(5):任务外包——Tasks »

ArcGIS API for Silverlight开发入门(2):一个基础地图实例

        这节在一个地图实例的基础上,来对Silverlight API中的一些基本概念做一个总体了解,顺便熟悉一下Silverlight的开发知识。        点击这里,直接看效果。         根据上一节的知识,可以知道这个Silverlight程序里包含了一个Map控件,并且里面至少有一个WorldImagery的图层。那么Page.xaml里的关键代码开起来应该是这样的:<Grid x:Name=”LayoutRoot”> <esri:Map x:Name=”Map1″> <esri:Map.Layers> <esri:ArcGISTiledMapServiceLayer ID=”WorldImageLayer” x:Name=”WorldImageLayer” Initialized=”WorldImageLayer_Initialized” Url=”http://services.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer” /> </esri:Map.Layers> </esri:Map></Grid>所有的布局工作都在一个Grid中进行,给它起个名字叫LayoutRoot。Grid里面放了一个esri:Map元素(Map控件),它继承自Silverlight的Control,所以拥有Width和Height属性,默认是Auto,自动填充整个Grid。Map.Layers是一个集合,可以往里面添加layer,这里的layer指的是ArcGIS Server或其他软件发布的地图服务,目前Silverlight API中支持的能够直接使用的有ArcGISDynamicMapServiceLayer,ArcGISTiledMapServiceLayer,ArcGISImageServiceLayer,分别对应ArcGIS Server发布的动态地图服务,缓存地图服务(两种Map Service)和Image Service,这三种图层是拿来即用的,如果你想加入别的地图服务,比如WMS服务,则需要自己继承相应类型的的Layer;此外还有GraphicsLayer,ElementLayer,Silverlight API特有的FeatureLayer等。这些都会在之后的小节中讲到。强调一下,与ADF开发里MapResourceManager一样,在Map中加入的内容实际上是地图服务,但当做一个layer处理。        下面就对这个例子中的每一部分来做说明(与上图中的序号相对应)。 1、当地图移动时获取地图范围。        当地图范围改变后,显示出当前地图范围的边界值。        这部分的页面布局是这样的:<Grid x:Name=”Gridright” Margin=”0,15,20,0″ HorizontalAlignment=”Right” VerticalAlignment=”Stretch”> <!–extent–> <Canvas Width=”215″ Height=”110″ VerticalAlignment=”Top”> <Rectangle Style=”{StaticResource rectBottom}” /> <Rectangle Style=”{StaticResource rectMiddle}” /> <Rectangle Style=”{StaticResource rectTop}” /> <TextBlock x:Name=”TBextent” Margin=”20,15,15,0″ Text=”范围:” TextWrapping=”Wrap” FontWeight=”Bold” /> </Canvas></Grid>        有关xaml中详细的布局知识请大家参照其他例子学习,这里稍作讲解。外面的Gridright这个Grid就是页面右边1、2、3、6的父容器,之所以不用StackPanel是因为6需要贴着页面底部,StackPanel中的元素都会flow贴到一起。三个矩形组合便构成了整体轮廓,由于它们都在一个Canvas中,所以会产生压盖效果。最先加入的rectBottom这个矩形便是最底下的阴影效果,中间的矩形是蓝色框,最上面的矩形是白色的文字显示区域。“{ }”里的内容在xaml中称作markup extention,StaticResource是使用在别处已经定义好的资源(resource)来对本元素的一些属性进行自动赋值,这里用来修饰Rectangle的外观。xaml中除了StaticResource这种markup extention之外还有Binding和TemplateBinding两种markup extention,分别用于数据绑定(data binding)和自定义control的外观。上面的StaticResource是在App.xaml中定义的,这样就可以在本工程的任何页面中使用,当然也可以定义为LayoutRoot这个Grid的Resource。贴出来大家一看就明白了:<Application.Resources> <Style x:Key=”rectBottom” TargetType=”Rectangle”> <Setter Property=”RadiusX” Value=”10″ /> <Setter Property=”RadiusY” … Continue reading ArcGIS API for Silverlight开发入门(2):一个基础地图实例 »