Archive

Archive for July, 2010

[Repost] ArcGIS API for Silverlight 图层类型小结

在用SilverlightAPI开发的过程中,不论是从客户端提交到服务器端的数据,还是从服务器端返回客户端的数据,都要表现在浏览器中,具体的来说是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,于是支持由ArcGISServer 9.3版本发布的经过缓存的地图服务;又比如ArcGIS Server9.2版本发布的缓存地图服务不支持REST方式连接,如果要在93的客户端API中使用的话,就可以通过TiledMapServiceLayer扩展一个比如ArcGISTiledMapServiceLayer92,来支持92Server发布的缓存地图服务;

4、DynamicLayer:
        继承自Layer,是动态地图服务的基类;

5、DynamicMapServiceLayer:
        继承自DynamicLayer,对应于TiledMapServiceLayer,要使用未经过缓存的动态地图服务,就得通过扩展这个图层来实现;

6、ArcGISDynamicMapServiceLayer:
        继承自DynamicMapServiceLayer,针对ArcGIS Server9.3版本发布的动态地图服务。同理,如果要在客户端API中使用其他动态地图服务,比如OGC的WMS服务,则也需要像这个图层一样,扩展上面的DynamicMapServiceLayer来实现;

7、ArcGISImageServiceLayer:
        继承自DynamicMapServiceLayer,针对ArcGIS Server 9.3版本发布的ImageService,因为影像服务也属于动态的地图服务。在客户端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): " />
<TextBlock Text="{Binding Converter={StaticResource MyDictionaryConverter},
ConverterParameter=POP1990, Mode=OneWay}" />
</StackPanel>
</StackPanel>
<Border BorderBrush="Black" BorderThickness="1" />
</Grid>
</esri:FeatureLayer.MapTip>
</esri:FeatureLayer>
复制代码

可以看出这个FeatureLayer其实是将一个Query查询封装到了一个GraphicsLayer中。通过url指定查询的图层,where指定查询条件(也可以输入geometry指定查询的图形),最关键的是ClusterFeatures="True",当一个范围内feature过多时,就将他们“聚合”在一起,以一个更大的符号表示出来,进一步放大时才将它们单独显示出来,如果聚合的目标不超过MaximumFlareCount设置的数目,那么就会出现那个flare动画。在MapTip(继承自GraphicsLayer)里面进行了简单的设置,一个背景为黄色的Grid里显示两行文字,用一个DictionaryConverter类将返回的Graphic.Attributes集合中的两个字段转换成String类型显示出来。顺便提一下,FeatureLayer也可以用于线或面层的查询,但如果继续使用ClusterFeatures的话就没什么意义了。虽然FeatureLayer封装的比较死,只能有此一种效果,但它提供给我们一种思路,可以结合SilverlightRIA的特性,充分发挥自己的想象力做出更炫的效果来;但是,对于需要展现海量(成百上千个)点数据的图层来说,ClusterFeatures是一个非常有用的特性,毕竟将这么多点同时呈现出来性能还是有问题的。如果不使用ClusterFeatures,看起来应该是这样的:

        不用FeatureLayer行吗?
        说到FeatureLayer,还有两个Renderer不得不提一下:UniqueValueRenderer和ClassBreakerRenderer。它们都是依托FeatureLayer的,用于单值专题图的渲染。具体的用法都比较简单,可以查看API中的Concepts。但Samples中的ThematicRendering例子并没有采用这两种Renderer,而是人为地为每个Graphic设置了不同的Symbol。目前看来虽然这两个Renderer有点鸡肋,但毕竟是现在3种客户端API中提供的唯一现成的Renderer,可以猜想也许下个版本的SilverlightAPI中会有更加成熟的专题图Renderer直接供我们使用;

11、ElementLayer:
        继承自Layer,它可以用来专门呈现Silverlight中原生的FrameworkElement,比如视频,音频等。虽然在FillSymbol的Fill属性中也能利用Brush类来展现一段视频,但毕竟有些“小气”,在ElementLayer中可以大大方方的放置Silverlight元素。你可能会问,在Map控件之外,Grid等布局元素中不是也能放置Silverlight的东西吗,为什么要放在ElementLayer里呢?其实有个问题经常困扰GIS开发人员,就是想让一些非地理数据元素随着地图范围的变化(放大,缩小,平移)而变化,而无须自己在Extent变化后重新计算客户端坐标,手工改变这些元素的位置。瞧,ElementLayer正解决了这个问题。

        目前Beta版的API中暂时有这么多图层类型,以后也许会继续增加。但万变不离其宗,无非就是从那几个基类中派生出来的。所以,下一节我们就通过一个实例来看看如何扩展基类的MapServiceLayer,来达到使用非ArcGIS Server数据源的目的。

Categories: Uncategorized

[Repost] Configuring ASP.NET 2.0 Application Services to use SQL Server

One question I’ve seen asked a few times by people over the last few weeks is “how do I setup the new ASP.NET Membership, Role Management, and Personalization services to use a regular SQL Server instead of SQL Express?” This blog entry walks you though a few simple steps on how to-do this.

Quick Review: What are the new ASP.NET 2.0 Application Services?

ASP.NET 2.0 includes a number of built-in “building block” application services. We call them “building blocks” because they are useful core frameworks for enabling super-common scenarios with web applications today – and as a result can provide significant productivity wins and time-savings for developers.

They include: a membership API for managing usernames/passwords and secure credential management, a roles API that supports mapping users into logical groups, a profile API for storing arbitrary properties about both authenticated and anonymous users visiting a web site (for example: their zipcode, gender, theme preference, etc), a personalization API for storing control customization preferences (this is most often used with the WebPart features in ASP.NET 2.0), a health monitoring API that can track and collect information about the running state and any errors that occur within a web application, and a site navigation API for defining hierarchy within an application and constructing navigation UI (menus, treeviews, bread-crumbs) that can be context specific based on where the current incoming user is in the site.

The ASP.NET Application Service APIs are designed to be pluggable and implementation agnostic, which means that the APIs do not hardcode the details of where data is stored with them. Instead, the APIs call into “providers”, which are classes that implement a specific “provider contract” – which is defined as an abstract class with a defined set of methods/properties that the API expects to be implemented.

ASP.NET 2.0 ships with a number of built-in providers including: a SQL Express provider for going against local SQL Express Databases, SQL 2000/2005 providers that work against full-blown SQL Servers, an Active Directory Provider that can go against AD or ADAM implementations, and in the case of site navigation an XML provider that can bind against XML files on the file-system.

The beauty of the model is that if you don’t like the existing providers that ship in the box, or want to integrate these APIs against existing data-stores you are already using, then you can just implement a provider and plug it in. For example: you might already have an existing database storing usernames/passwords, or an existing LDAP system you need to integrate with. Just implement the MembershipProvider contract as a class and register it in your application’s web.config file (details below), and all calls to the Membership API in ASP.NET will delegate to your code.

Default SQL Express Providers

Out of the box, most of the ASP.NET 2.0 application services are configured to use the built-in SQL Express provider. This provider will automatically create and provision a new database for you the first time you use one of these application services, and provides a pretty easy way to get started without a lot of setup hassles (just have SQL Express on the box and you are good to go). Note that SQL Express databases can also be upgraded to run in the context of full-blown SQL Server instances – so apps built using SQL Express for development can easily be upgraded into a high-volume, clustered, fail-over secure 8P SQL box when your app becomes wildly successful.

How do I change the providers to use SQL Server Instead of SQL Express?

If you want to use a full-blown SQL Server 2000 or SQL Server 2005 database instance instead of SQL Express, you can follow the below steps:

Step 1: Create or obtain a blank SQL database instance

In this step you’ll want to create or obtain a connection string to a standard SQL database instance that is empty.

Step 2: Provision your SQL database with the ASP.NET schemas

Open a command-line window on your system and run the aspnet_regsql.exe utility that is installed with ASP.NET 2.0 in under your C:\WINDOWS\Microsoft.NET\Framework\v2.0.xyz directory.

Note that this utility can be run in either a GUI based mode or with command-line switches (just add a -? flag to see all switch options).

Using this wizard you can walkthrough creating the schema, tables and sprocs for the built-in SQL providers that come with ASP.NET 2.0. The below screens show the step-by-step walkthrough of this:





Once you have finished walking through the wizard, all the database schema + sprocs to support the application services will have been installed and configured (note: if your DBA wants to see exactly what is going on behind the covers, we also ship the raw .sql files underneath the above framework directory, and your DBA can walkthrough them and/or run them manually to install the DB).

Step 3: Point your web.config file at the new SQL Database

ASP.NET 2.0 now supports a new section in your web.config file called “<connectionStrings>” which (not too surprisingly) are used to store connection strings. One nice thing from an administration perspective is that the new ASP.NET Admin MMC Snap-in now provides a GUI based way to configure and manage these:

ASP.NET 2.0 also now supports encrypting any section stored in web.config files — so you can also now securely store private data like connectionstrings without having to write any encryption code of your own. 

ASP.NET 2.0 ships with a built-in connection string called “LocalSqlServer” which by default is configured to use a SQL Express database, and which by default the Membership, Roles, Personalization, Profile and Health Monitoring services are configured to use.

The easiest way to have your application automatically take advantage of your newly created SQL database is to just replace the connectionstring value of this “LocalSqlServer” setting in your app’s local web.config.

For example, if I created my database on the local machine in an “appservicesdb” database instance and was connecting using Windows Integrated security, I would change my local web.config file to specify this:

<configuration>

<connectionStrings>

<remove name=”LocalSqlServer”/>

<add name="LocalSqlServer" connectionString="Data Source=localhost;Initial Catalog=appservicesdb;Integrated Security=True" providerName="System.Data.SqlClient"/>

</connectionStrings>

</configuration>

Hit save, and all of the built-in application services are now using your newly created and defined SQL Server database.

Note: The one downside with the above approach is that I’m re-using the “LocalSqlServer” connection string name – which will feel weird if/when I deploy my database on another machine. If I wanted to name it with my own connection string name, I could do this simply by adding a completely new connection-string, and then pointing the existing providers to use the new connection-string name in place of the default LocalSqlServer one.

Hope this helps,

Scott

P.S. In some future blog post I’ll walkthrough actually using some of the above new APIs.

Categories: Network Tags:

君让臣死

What a big LAN I am in!

Categories: Uncategorized

奇怪的网络

我的机器能够ping通局域网内机器和网关, 也能ping 通8.8.8.8和208.67.22.222等DNS服务器, ping不通其他公网IP. 奇怪啊!

虚机是是安装在Virtual Box, 有XP也有windows 2003, 使用Bridge连接, 全能够正常上网., 奇怪啊!

有高人知道什么原因吗?

Categories: Network

关于我的户口问题

记得小时候就听说非农业户口, 那时一个多么令人羡慕的东西, 而如见就稀里糊涂的转成非农业户口,  就如蛋白质变性一样, 不可恢复了.

先看一下山东省大约在1989年发布的文件,文件名是<<关于加强对农业户口转为非农业户口管理和控制的通知>>,正文如下:

党的十一届三中全会以来,我省农业户口转非农业户口的工作是有成绩的,对落实党的政策,调动广大知识分子和国家职工的积极性,促进改革开放、经济建设和科技、教育事业的发展,起了积极的作用。但是,由于近几年“农转非”口子开得过宽,某些地区和部门违反国家规定,自行扩大范围,加之审批把关不严,致使我省非农业人口增长过快。据不完全统计,一九八五年至一九八八年四年间,全省共转了一百七十五万八千人,平均每年转四十三万九千人,比一九八一年至一九八四年每年平均多转二十万人。加上非农业人口的自然增长和省外调入,我省非农业人口每年增加六十余万人,大大超过了经济和社会各方面的承受能力,给粮油供应、劳动就业、住房、教育和地方财政等都带来了很大的压力。为了进一步加强对“农转非”的管理和控制,使非农业人口的增长和经济增长、社会发展相适应,特作如下通知:

  一、各级政府、各有关部门要充分认识从严控制非农业人口增长的重要意义。农业人口向非农业人口转移的规模和速度,必须同经济发展速度、社会承受能力相适应,否则就会造成严重后果。各地区、各有关部门要把整顿“农转非”作为治理经济环境、整顿经济秩序的重要内容来抓。要树立全局观念,严格执行国家的“农转非”政策,严格执行省政府下达的“农转非”计划指标,加强领导,加强检查监督,切实把这项工作做好。

  二、制定、下达指令性计划指标,加强宏观控制。根据我省经济发展情况和社会承受能力,省政府确定,近几年每年“农转非”总人数不得突破三十万人。“农转非”年度计划控制指标纳入国民经济和社会发展计划,经省政府审定后由省计委下达市地和省直有关部门,由市地和省直有关部门直接控制,不再层层下达。各市地、各部门要严格执行计划,不准突破;超过计划指标的,公安部门不予入户,粮食部门不供应口粮。在计划指标内批准的“农转非”人口所需粮油差价款如何解决,由市地根据具体情况自行确定。

  三、认真清理“农转非”文件,严格执行国家“农转非”政策。一九八0年以来,省委、省政府及省直有关部门下达的涉及“农转非”的文件共三十一件。经过清理审查,省政府研究确定并报省委批准,《中共山东省委、山东省人民政府关于进一步落实知识分子政策的通知》等十六个文件(文件目录附后)中的 “农转非”政策规定继续执行,但要从严掌握;其他文件中的“农转非”政策规定暂停执行。各市(地)县自行制定的“农转非”规定,一律停止执行。对申请“农转非”的人员,对符合省委、省政府继续执行的“农转非”政策规定的,要根据当年计划指标的可能,在优先办理符合国家政策规定的“农转非”的前提下,分别轻重缓急,分期分批地进行办理,当年无计划指标时,可延缓到下一年度办理。今后,各市(地)县、省直各部门都不准自行制定“农转非”政策,省委、省政府发的文件中授权市(地)、县和省直部门可以放宽“农转非”条件的条款,一律停止执行。今后,国务院各部门下达的有关“农转非”的文件规定,由省政府根据我省实际情况研究下达贯彻意见,部门不得自行转发。

  四、适当集中“农转非”审批权限。从一九八九年起,各项“农转非”审批权,全部收回省和市(地)两级。

  无地农民“农转非”,由省政府审批;

  国家规定的每年“千分之二”部分,由市(地)公安部门审批;

  招工中的“农转非”,经省劳动部门审查同意后,由公安部门审批;

  科技人员、教师、有学历的国家机关干部等知识分子家属“农转非”,省属单位和中央驻鲁单位的,由省科技教育等主管部门报省人事局,在省确定的指标内,由省人事局商公安厅后审批,由市(地)公安部门根据省人事局的批件办理落户手续;各市(地)、县属单位的,由市(地)科技、教育等主管部门报市(地)人事部门审查后,商市(地)公安部门审批。

  复员军人及军人家属,劳改干部家属,煤矿井下职工、殡葬工人、粪便清运工人家属,以及其他方面的“农转非”,由其主管部门审查同意后,报市(地)公安部门审批。

  过去发的文件中规定的“农转非”审批程序与本通知规定不一致的,一律以本通知的规定为准。申请和审查、审批“农转非”,要严格执行国家的政策规定,实行“两公开,一监督”(条件公开,结果公开,接受群众监督)的制度,严禁弄虚作假,徇私舞弊。

  五、各级监察部门要对“农转非”工作加强检查监督,对违反国家政策和本通知规定,擅自放宽条件或弄虚作假批转的非农业人口,要坚决令其清退,对有关人员要追究责任。各市(地)要对一九八七、一九八八两年的“农转非”进行一次认真的检查清理,于六月底前向省政府写出情况报告。

  附件:继续执行的“农转非”文件目录

  1.中共山东省委山东省人民政府关于进一步落实知识分子政策的通知 鲁发[1980]17号

  2.中共山东省委山东省人民政府关于进一步贯彻知识分子政策的若干规定 鲁发[1984]21号

  3.中共山东省委山东省人民政府关于进一步贯彻知识分子政策的补充规定 鲁发[1985]3号

  4.中共山东省委批转省委统战部等七部门《关于全省落实统战政策的情况和今后意见的报告》 鲁发[1985]8号

  5.中共山东省委山东省人民政府批转《开发建设南四湖现场办公会议纪要》的通知 鲁发[1985]20号

  6.中共山东省委山东省人民政府关于选拔、管理专业技术拔尖人才的试行意见 鲁发[1987]22号

  7.批转省煤炭工业总公司等部门《关于煤矿井下职工家属落城镇户口试点情况和在全省展开煤矿井下职工家属落户工作意见的报告》的通知 鲁政发[1985]89号

  8.批转省建委等四部门《关于解决城市粪便清运工人家属农转非问题的报告》的通知 (86)鲁政函67号

  9.批转省民政厅等五部门关于解决部分殡葬职工家属农转非报告的通知 鲁政发[1987]58号

  10.关于贯彻执行中办发(1981)44号文件解决劳改工作干部家属户口问题的通知 鲁公治(82)158号

  11.印发公安部等单位《关于解决人民检察院劳改劳教检察派出机构干部的农村家属迁往派出机构所在地区落户由国家供应口粮问题的决定》的通知 [84]鲁检发(政)37号

  12.关于执行省委、省政府鲁发(1985)3号文中有关“农转非”问题的通知 (1985)鲁人字第16号

  13.关于转发民政部等七个部门民(1985)安2号文件的通知 (85)鲁民字第122号

  14.关于跨省、市、自治区错处理人员受株连家属子女就地办理“农转非”问题的意见 鲁统[1986]67号

  15.关于落实中办发(86)6号文件中有关户口问题的具体处理意见 鲁公发[1987]19号

  16.关于对越防御作战荣立三等功的农村籍退伍军人办理“农转非”手续的通知 87鲁民字第19号

现在我被非农村户口了, 就在我想回家分亩地, 当厌倦了的时候还可以当面农民的时候, 我却发现那几乎不可能了. 不知四年前是不是这样. 难道大学生就不能当农民了? 下面是某人的愿望, 悲剧了.

找到一份<<非转农申请书范本>>观摩一下, 不知现在还可以不.

尊敬的领导您好:

  我叫XXX,系XX县XX村委会XX村村民,XX年因XXX招生录取于XX大学由XX县XX村委会XX村XX号迁至XX省XX市XX大学;现因毕业特申请将户口迁至原籍农业户口(XX省XX县XX村委会XX村XX号),分村集体土(田)地、山等,总之享受同村民同等待遇,履行村民同等甚至更多的义务,为建设社会主义新农村做一份力所能及的贡献,望领导给予批准为盼,谢谢。

 此致              

  敬礼!

 申请人:XXX                

  2009年3月16日             

  以下人员同意迁回,分田地、山:

  张三、李四(约十几个人,不能太少,也无需太多) (村委会盖章)

Categories: Food and drink Tags: , ,

NULL

Categories: Entertainment Tags:

TODO

星期天大雨

最近很失败, 自从在5-25那天晚上我就迷失了. 是否**? 是否****? ***二十几年, 你就不能**一点?

Categories: Sentiment Tags: