2008年12月29日星期一

ArcGIS API for Flex 扩展 - 获取Polygon的中心点坐标

ArcGIS API for Flex主要构建于ArcGIS Server REST API之上,客户端的功能比较有限,很多高级功能都通过Geometry Service 和 Geoprocessing Service实现。但是,有时候一些简单的功能,比如获取Polygon的中心点,在这个点上弹出一个自定义的窗口之类的,如果都通过服务来交互,可能用户体验就会变差。所以,你可以自己编写一些代码,在客户端实现这些功能。

这是我写的从一个Polygon获取中心点坐标的代码:
/**
* Author:Wu Yongfeng
* MSN/Email:warrenwyf@gmail.com
*/
package wuyf
{
import com.esri.ags.geometry.Extent;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.geometry.Polygon;

public class GeometryUtil
{
/**
* 获取多边形的重心
* @param polygon 多边形
* @return 重心点
*
*/
static public function getGravityCenter(polygon polygon):MapPoint
{
var ext:Extent = polygon.extent;
var p0:MapPoint = new MapPoint(ext.xmin, ext.ymin);

var momentX:Number = 0;
var momentY:Number = 0;
var weight:Number = 0;
for (var i:int=0; i<polygon.rings.length; i++ )
{
var pts:Array = polygon.rings as Array;
for ( var j:int=0; j<pts.length; j++ )
{
var p1:MapPoint = polygon.getPoint(i, j);
var p2:MapPoint;
if( j==pts.length-1 )
{
p2 = polygon.getPoint(i, 0);
}
else
{
p2 = polygon.getPoint(i, j+1);
}

var dWeight:Number = (p1.x-p0.x)*(p2.y-p1.y)
- (p1.x-p0.x)*(p0.y-p1.y)/2
- (p2.x-p0.x)*(p2.y-p0.y)/2
- (p1.x-p2.x)*(p2.y-p1.y)/2;
weight += dWeight;

var pTmp:MapPoint = new MapPoint((p1.x+p2.x)/2, (p1.y+p2.y)/2);
var gravityX:Number = p0.x + (pTmp.x-p0.x)*2/3;
var gravityY:Number = p0.y + (pTmp.y-p0.y)*2/3;
momentX += gravityX*dWeight;
momentY += gravityY*dWeight;
}
}

return new MapPoint(momentX/weight, momentY/weight);
}

}
}


看看效果:

GIS Portal Toolkit 管理员的一些工作流程

【环境】GPT9.3,服务器Win2003 SP2,客户端WinXP SP3

1.从互联网搜索并保存元数据

通过GPT的CSW Client工具可以在ArcMap或者ArcGIS Explorer中对CSW(Catalog Service for the Web)进行查询,从而获得元数据信息。

以ArcGIS Explorer为例(照说明文档安装CSW Client并在ArcGIS Explorer添加工具):

比如我想搜索北京的服务,输入beijing,通过默认的http://www.geodata.gov/aimscsw/csw2.0入口搜索到若干结果如下:

选择“china”那项,点击View Metadata按钮,查看这个服务的详细信息。从元数据详细信息可以看到,这个服务来自http://sms.webmap.cn(测绘科学数据共享网)。
点击Download Metadata按钮将元数据下载到本地。

2.将元数据发布到GPT

通过GPT的Publish Client将元数据发布到GPT服务器:

打开ArcCatalog(照说明文档安装Publish Client并在ArcCatalog中添加工具),找到刚才下载的元数据文件。点击工具栏的Publish Metadata按钮。

在弹出的对话框中,按照GPT的配置填入相关信息,完成后点击Publish按钮,如果成功,将会弹出成功信息的对话框。

3.审核元数据并标记为公开

管理员可以查看元数据并进行审核,如果没有问题,可以将此元数据编辑为公开状态,使之可以被GPT用户搜索到。

在浏览器中输入http://SERVER_IP:8080/GPT9/,使用GPT的管理员帐号登录,进入Administration选项卡。在这可以看到刚才发布的china元数据,状态是Posted

勾选中这个元数据,在下拉框中选择“Set as Approved”,点击Excute Action按钮。

这个时候,用户已经可以通过GPT对这些元数据进行搜索了。还记得那个数据不负责任的描述“ddd”么?在首页搜索一下已经可以搜索到了。

GIS Portal Toolkit (GPT) 在线案例

http://portal.gsa.state.al.us/
http://www.geostor.arkansas.gov/
http://www.conservationmaps.org/
http://www.geonorge.no/Portal/ptk
http://gos2.geodata.gov/wps/portal/gos
http://gisserver.nic.in/nsdiportal/
http://www.inspire-geoportal.eu/
http://www.gis.ms.gov/Portal/ptk
http://gis.bpa.gov/Portal/
http://www.gov.ns.ca/geonova/
http://gisdata.virginia.gov/Portal/

2008年12月25日星期四

GIS Portal Toolkit (GPT) 9.3 安装配置 - 7.其余Tomcat配置

复制$CATALINA_BASE/webapps/GPT9/WEB-INF/lib/ojdbc5.jar到$CATALINA_BASE/common/lib下

复制安装盘的Other/JNDI Configuration/GPT9.xml到$CATALINA_BASE/conf/Catalina/localhost目录下

编辑GPT9.xml文件,找安装文档进行参数配置。

安装文档上还有一些其他配置,可能是apache版本或者操作系统的缘故,并没有找到。

GIS Portal Toolkit (GPT) 9.3 安装配置 - 6.配置MapViewer

首先,打开安装盘Database Scripts/Map Viewer目录,执行数据库对应的sql脚本。注意,登录数据库的时候采用前面配置数据库环节新建的gpt93用户,以下是Oracle上的命令:
sqlplus
gpt93
gpt93pwd
@.../MVS_Personalization_Oracle.sql;

下面就开始正式安装MapViewer Application:
打开安装盘的Web Applications/Map Viewer目录,将mvs_viewer.war部署到tomcat上。
打开$CATALINA_BASE/webapps/mvs_viewer/WEB-INF,编辑config.properties文件,详细参数见安装文档。

GIS Portal Toolkit (GPT) 9.3 安装配置 - 5.部署并配置GPT9和servlet Application

首先部署GPT9.war(安装盘Web Applications/GPT9下)。建议使用Tomcat manager来部署,确保你的$CATALINA_BASE/conf/tomcat.users.xml中设置了manager用户,用这个用户来登录http://localhost:8080/manager/html后选择GPT9.war部署到服务器。

下面进行GPT9的配置,首先进入$CATALINA_BASE/GPT9/WEB‐INF/classes/gp/config目录。开始编辑gpt.xml文件。200多行的参数配置……自己看吧。

完成以后部署servlet.war(安装盘Web Applications/Servlet下)。进入$CATALINA_BASE/servlet/WEB‐INF目录,编辑web.xml文件。这里只有几个参数需要修改,见安装文档。

GIS Portal Toolkit (GPT) 9.3 安装配置 - 4.安装配置MetadataServer

目前的GPT9.3中只有Windows版本安装包,Linux上的暂无。

2008年12月24日星期三

GIS Portal Toolkit (GPT) 9.3 安装配置 - 3.配置数据库

GPT9.3支持Oracle、SQL Server和PostgreSQL,我这里使用的是Oracle 10g sp4。

首先,新建GPT的表空间和用户:
通过sqlplus进入SQL命令行
执行:
create tablespace GPT93 datafile '/opt/oracle/app/oracle/oradata/GPT93.dbf' size 500M AUTOEXTEND ON;
create user gpt93 identified by gpt93pwd default tablespace GPT93 temporary tablespace temp;
commit;
quit;

然后,运行一下几个sql脚本来创建schema:
通过sqlplus进入SQL命令行
我这里使用的是Oracle,脚本位于安装盘的“Database Scripts/Oracle”目录下
首先执行grants_oracle.sql:
@grants_oracle.sql sys syspwd gpt93 sde;
然后执行schema_oracle.sql:
@schema_oracle.sql gpt93 gpt93pwd;

再然后,用sde用户登录,并执行一下命令:
sdetable -o register -t gpt_admin -C none -i 5151 -s machineName -u gpt93 -p gpt93pwd

下面要配置数据库支持XML列
详细查看:http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=Configuring_a_database_to_support_XML_columns

最后可以使用AcrCatalog来测试上述的配置是否正确:
新建一个Spatial Database Connection,server:服务器ip,service:5151,username:gpt93,password:gpt93pwd

2008年12月23日星期二

扩展 ArcGIS Server 在移动平台/互联网应用的可达性

其姊妹篇《扩展 ArcGIS Server 在移动平台/互联网应用的可达性补遗 —— 使用WFS-T

【环境】ArcGIS Server 9.3

在ArcGIS Server 9.3中焕然一新的ArcGIS MobileSDK让ArcGIS Server的魅力延伸到了WindowsMobile平台上,填补了ArcGIS企业级移动平台应用的空白;稍后推出的ArcGIS API forFlex/JS又在让ArcGIS在WebGIS领域浓妆重彩,带来良好的用户体验。无疑,在ArcGIS ServerADF提供完善功能的同时,这些不同平台、快速开发、体验良好的SDK和API扩展了ArcGIS的应用领域,深合以正合以奇胜的兵法之道。

然而,这几支奇兵初次露面,未免有些青涩。ArcGIS Mobile SDK与WindowsMobile和.Net的死死绑定限制了它的应用范围,市场份额远大于WindowsMobile的 Symbian+iPhone+RIM被华丽地无视了;而在互联网应用上,ArcGIS API forFlex构建与REST之上,也使得空间数据的提交被忽视,这在后Web2.0时代几乎是不可被容忍的。本文讨论的主要目标就是另辟蹊径,在这些缺 憾之处加以弥补,延伸ArcGIS Server的触角,使之尽量可以扩展到各个平台、各个应用的死角。

本文主要涉及两方面内容,一方面是数据的获得,一方面是数据的提交。事实上关于数据的获得我前面的一些文章已经有所阐述,这里就简而言之;而在数据提交上,本文将从REST出发,详细叙述通过REST和Geoprocessing构建“万能”的数据提交方法。

首先看一下数据的获得,对于ArcGISServer强大的服务发布功能,获得数据相当容易。比如我比较喜欢kml服务,你需要在(移动)客户端或者其他 地方需要处理的无非就是一个kmz(zip)的解压缩问题,这几乎在所有的平台上都有解决方案。当然,ArcGIS还提供很多的服务种类,你大可以选择自 己喜欢的类型。

下面是一个Android的应用,地图采用了Google Map组件,底图是Google卫星影像图,再次基础上叠加ArcGIS Server发布的kml服务,关于如何从ArcGIS Server获得kmz并进行解析,详细可查看我的另外一篇文章:http://wu-yongfeng.blogspot.com/2008/10/androidkml.html

对于数据的提交,我们最好需要一种不受SDK限制,不受防火墙限制的方法。好在ArcGISServer的核心就是服务,充分地利用这些服务是我们发挥想 象的空间。这里,我的方法是REST+GeoprocessingService。下面,让我还是在Android平台上先走一遍这个技术流程:

首先,编写一个python脚本,实现根据参数保存Feature到FeatureClass的功能:
import string, os, sys, locale, arcgisscripting

gp = arcgisscripting.create()

def createPoint(point, x, y):
    try:
        point.x = x
        point.y = y
        return point
    except:
        raise Exception, "Create point error."

try:
    if len(sys.argv) < 2:
        raise Exception, "No enough parameters."

    outputFC = sys.argv[1]
    inputString = sys.argv[2]
   
    outDesc = gp.describe(outputFC)
    shapefield = outDesc.ShapeFieldName
    rows = gp.insertcursor(outputFC)
    pnt = gp.createobject("point")
   
    values = inputString.replace("\n", "").split(",")
    row = rows.newrow()
    pnt = createPoint(pnt, values[0], values[1])
    row.SetValue(shapefield, pnt)
    row.SetValue("CaseDetail", values[2])
    rows.insertrow(row)
   
    del rows
    del row
   
except Exception, ErrorDesc:
    if ErrorDesc[0] != "":
        gp.AddError(str(ErrorDesc))


新建一个Toolbox,添加这个脚本并命名为AddTrafficCase,给脚本附上两个参数:需要保存的FeatureClass和传入的字符串 (包含坐标信息和某字段的属性值)。这个时候你可以先测试一下功能是否正常。在需要发布成Geoprocessing服务的Toolbox中的新建一个 Model,加入这个AddTrafficCase脚本,并定义Model的输入参数(字符串)和保存到的FeatureClass,如图:
当模型构建完成后,你可以将其发布成一个Geoprocessing服务。简单起见,我这个模型是没有返回值、仅提交一个点数据的服务,当然,你可以做很多扩展,万变不离其宗了。

让我们打开这个GP服务REST地址,检查它的功能是否正常:

下面我在Android的Map组件上开发一个小Demo,可以点击选择当前的坐标,再输入一些字符串作为信息一起提交到ArcGIS Server上来。

比如在Android平台,通过输入一些文本信息,通过如下的REST URL可以提交用户输入的信息:

                String detail = editTextCaseDetail.getText().toString();
String strURL ="http://192.168.200.157/ArcGIS/rest/services/GPService/FeatureService/GPServer/AddTrafficCase/submitJob?String="+x+","+y+","+detail;
    try
    {
                  URL url = new URL(strURL);
                  HttpURLConnection uc = (HttpURLConnection)url.openConnection();
                  uc.connect();
                  uc.getInputStream();
    }
    catch(Exception e){}


点击确定提交以后,刷新Map以后,我们可以看到地图上多了一个事件点,点击这个事件点,出现提示信息——刚才在文本框中输入的“arcgis”:

下面让我们在ArcGIS API for Flex中再走一下这个流程,其实本质是一致的:

    var parms : Object = new Object();
    parms.String = x+","+y+",这是Flex保存的";

    var geoprocessTask : Geoprocessor = new Geoprocessor();
    geoprocessTask.url = "http://192.168.200.157/ArcGIS/rest/services/GPService/FeatureService/GPServer/AddTrafficCase";
    geoprocessTask.submitJob( parms );


提交完成后查看一下结果:

从这两个例子可以看到,通过ArcGIS Server的REST和GeoprocessingService的组合,可以在任何满足联网条件的平台和应用上获取和提交数据,而不局限于 ArcGIS提供的SDK和API。也就是说,不管是移动平台、富因特网应用或是其他互联网应用都可以采用这种“万能”的方法进行空间数据的交互。在移动 领域,除了Android,移动市场份额最大的Symbian也已经选择了开源,可以看到以后在移动平台上进行开发绝非难事,通过本文你或许也可以感觉 到,ArcGISServer完全可以在这些地方大展身手。我们不用为ArcGISServer目前提供的仅有几个SDK和API而耿耿于怀,相信 LINING的这句断语:一切皆有可能!

2008年12月22日星期一

GIS Portal Toolkit (GPT) 9.3 安装配置 - 2.选择验证机制

GPT提供两种验证机制:
  1. 简单验证
  2. LDAP验证

它们之间的区别见下表

简单验证意味着GPT只有一个用户:管理员。使用这种验证机制不需要再安装其它任何软件,但是GPT和其它应用之间使用单点登录将不可能实现。一般来说,这种验证机制仅在测试的时候使用,在部署真实应用的时候通常应使用LDAP。

下面叙述下如何配置LDAP,以Apache Directory Server(ApacheDS)为例。

首先,安装ApacheDS,建议另外再安装管理客户端JXplorer(SLES10默认仅支持JXplorer 3.0)。在Linux上ApacheDS安装完以后其配置文件在/var/lib/apacheds.../conf目录下,启动通过命令/opt/apacheds.../apacheds start default命令。JXplorer默认的端口为10389,DN为:“uid=admin,ou=system”,密码为“secret”,连接成功会出现如下界面:

在此基础上,我们需要新建一个GPT的管理员帐号。注意,这里的教程是基于ApacheDS的,其余情况需要详细查看ESRI的文档。注意,在点击“Add”以后出现的面板中,sn输入“gptadmin”,其余根据情况填写,一般需要填写“mail”“uid”“userPassword”,uid可以设为“gptadmin”。

新建一个group,命名为gpt_administrators,其中uniqueMember可填刚刚新建的gptadmin用户的DN:“cn=gptadmin,ou=users,ou=system”。重复这个过程,在新建2个组“gpt_publishers”和“gpt_registeredUsers”。

注意,以上过程是基于新建一个LDAP服务器,如果使用已经已有的LDAP服务器,那么配置过程将有所不同,更加详细的信息可以参考安装文档。

2008年12月15日星期一

GIS Portal Toolkit (GPT) 9.3 安装配置 - 1.环境需求

【本教程环境】SuSE Linux Enterprise Server 10(目前不能安装MetadataServer,建议Windows)

【操作系统】
GIS Portal Toolkit(以下简称GPT)9.3在Windows 2003 SP2 Server 和 Windows XP SP2 Professional上进行了测试,不过应该支持以下操作系统:
• Red Hat Enterprise Linux AS/ES 4.0 Update 2
• SUSE Linux Enterprise Server 10
• Sun Solaris 9, 10 (SPARC)
• Windows 2000 SP4 Server
• Windows 2003 SP2 Server
• Windows Vista SP1 Ultimate, Enterprise, Business
• Windows XP SP2 Professional Edition

【数据库】
• Oracle 9i 9.2.0.7
• Oracle 10g 10.2.0.2
• Microsoft SQL Server 2000 SP4
• Microsoft SQL Server 2005 SP2
• PostgreSQL

【JAVA】
需要JDK 1.5,文档说1.5.0_06 和1.5.0_14 都可以,估计在这两个平台上进行了测试。不能用JDK1.6!

【ESRI相关软件】
• ArcGIS Server 9.3 Standard Enterprise – Java Edition
• ArcGIS Desktop 9.3 (可选, 不过建议安装)
• ArcSDE 9.3
另外,还需要一下内容:
a. 一个ArcGIS Server Map Service, 你需要知道它的REST地址
b. 一个ArcGIS Server Locator Service. 如果你不想创建这样一个服务,你可以使用这个在线服务:http://sampleserver1.arcgisonline.com/ArcGIS /rest/services/Locator/ESRI_Geocode_USA/GeocodeServer
注意: 如果在需要安装GPT 9.3的机器上装有ArcIMS,你首先需要卸载ArcIMS,并确认\webapps下不再有“servlet”目录。

【Web服务器和Servlet引擎】
• Apache 2.0.58 或 IIS
• Tomcat 5.5.17 或5.5.26,不能使用Tomcat 6.0.

【目录服务器】
• Apache Directory Server
• Sun OpenDS

2008年12月11日星期四

使用 FlashDevelop 开发 ArcGIS Flex 应用

【环境】Windows XP SP3,FlashDevelop 3.0.0 Beta9,Flex SDK 3.2,ArcGIS Flex API 1.0

如果你对基于Eclipse的Flex Builder的编译和操作不甚满意,常常为它的无端崩溃而心怀不满,更或者,你不倾向于使用收费的Flex Builder(标准版300多美刀),那么,或许你可以尝试一下这个主题的主角——一款开源的Flex IDE:FlashDevelop。FlashDevelop使用MIT许可分发,拥有和Visual Studio风格类似的界面和操作,还拥有插件机制来扩展功能——总而言之,它可以成为FlexBuilder之外开发Flex应用的又一选择。

我们可以从 http://www.flashdevelop.org 获取FlashDevelop的安装文件和文档。当你安装Flex Builder的时候,或许你不用操心任何其它组件,包括Flex SDK和Flash Player Debug版本等等都内置在其中。但是安装FlashDevelop之前,你需要做些额外的准备:

1. 从 http://www.adobe.com/products/flex/flexdownloads/ 下载Flex SDK,解压到某个目录
2. 从 http://www.adobe.com/support/flashplayer/downloads.html 下载Flash Player Debug版本,我用的是:Download the Windows Flash Player 9 Projector content debugger (EXE, 3.64 MB)
3. 从 http://www.java.com/zh_CN/download/manual.jsp#win 下载并安装JRE 1.6

好了,现在你可以从 http://www.flashdevelop.org/community/viewforum.php?f=11 选择一个FlashDevelop版本下载并安装,马上我们就可以开始使用这个IDE了。

……
此处等待若干秒

好了,FlashDevelop安装完成,运行它,再进行最后一点配置:
1. 打开 Tools->Program Settings,选择 AS3Context 选项卡
2. 编辑 Flex SDK Location到你刚才下载并解压缩的Flex SDK目录

在进入Flex开发之前,再唠叨一点关于插件的内容。默认的FlashDevelop没有可视化的组件拖拽,如果需要,可以从http://www.flashdevelop.org/wikidocs/index.php?title=3rd_Party_Plugins获取Flex Design View插件并安装,安装过程可以参考http://www.flashdevelop.org/community/viewtopic.php?f=4&t=3727,安装这个插件以后你就可以在打开一个mxml文件以后选择Design视图进行可视化设计了。

另外,还有一个必不可少的插件FDB,用于AS3代码调试。这个插件可以在这个地址下载:http://orange.zero.jp/zbn39616.pine/download/download.html,把dll文件拷入FlashDevelop的plugin目录即可。安装完FDB后打开Tools->Program Settings->FdbPlugin,将DebugFlashPlayerPath设为上面下载的debug版本的Flash Player所在的位置。

好,现在让我们开始ArcGIS Flex API的开发。

首先新建一个Flex项目

然后,将ArcGIS API for Flex的swc库文件添加到项目

很遗憾,目前的FlashDevelop对外部库的智能感应做的还不好,所以在使用mxml进行编程的时候,需要你写比较多的手工代码。如图,我们添加了一个最简单的一个ArcGIS Flex例子,在一个Application中添加一个Map对象,Map中放置一个ArcGISTiledMapLayer,用以显示切片地图。值得注意的是,在Application标签中,对com.esri.ags.*和com.esri.ags.layers.*这两个命名空间的声明。

目前由于FlashDevelop对mxml支持的有限,建议将功能代码分离到AS代码中去,比如上面的例子可以把大部分代码放到Scripti标签中去,如此你可以充分利用FlashDevelop强大的AS功能。

最后说一下程序的调试,调试程序的前提是安装了FDB插件,并且正确设置了debug版本Flash Player的路径。在Debug菜单有切换断点、单步调试等菜单项,当然,每次都从菜单操作是很麻烦的,你可以打开Tools->Program Settings->FdbPlugin设置各个操作的快捷键。注意,不要和Flash Develop内置的快捷键冲突。

好,剩下的事情就和Visual Studio调试差不多了,看一下效果:

2008年12月9日星期二

总结 ArcGIS Mobile 9.3 图层可编辑的条件

1. 数据源必须是 SDE
2. 数据必须包含 GlobalIDs
3. 不可含有 M and Z 值
4. 没有使用FeatureClass的 area或length字段进行渲染
5. 编辑多边形的第一部分必须按顺时针方向走,逆时针方向会形成洞从而引发一个异常。

2008年12月5日星期五

ArcGIS Server Java 9.3 REST API的中文查询问题的解决方案

【2009.2.18补注】这个问题在SP1 for Linux中修复,SP1 for Windows下问题更加严重,如果打了SP1 for Windows,还想使用REST服务,就必须使用Linux或者没有打SP1补丁的Windows的ArcGIS Server的$arcgis/java/web_output/rest替换现有的目录(同时,还需要手动修改/WEB-INF/classes下的配置文件server.properties)。

目前在ArcGIS Server 9.3 Java中使用中文进行REST查询时是有问题的,这是ArcGIS Server for Java集成的tomcat的问题,我的同事曾经给出一个解决方案:

1、ArcGIS Server Java 9.3可以把services和rest单独导出成war包,部署到其他的web服务器上,从而可以避免内置tomcat的性能瓶颈。进入Manager-->services-->Configure Services Handler-->Export页面,把rest服务导出成rest.war,保存到本地;
2、把保存下来的rest.拷贝到任何一个其他版本的tomcat 的webapps目录下(ArcGIS Server内置的tomcat是5.5.9版本,我们测试用的是apache-tomcat-6.0.10)
3、启动tomcat6.0.10,在浏览器中输入http://localhost:8080/rest,进入service directory页面。
4、选中服务的图层进行查询,输入中文进行查询,看是否可以得到正确的结果。

有人反映这个方案不能解决问题,可能和tomcat的版本有关,我研究了一下,给出两种解决方案:

方案1:
从客户端入手。
中文不能查询的根本原因在于编码,当我们在使用REST API进行查询的时候,请求的URL一般是这样:“http://wuyfsles:8399/arcgis/rest/services/BeijingTraffic/MapServer/find?searchText=事故&contains=true&searchFields=&sr=&layers=0&returnGeometry=true”,其中的中文无法被服务器识别。因此,你可以在发送前对“事故”这个中文关键词进行URL编码,应该是“%CA%C2%B9%CA”,你在浏览器中输入“http://wuyfsles:8399/arcgis/rest/services/BeijingTraffic/MapServer /find?searchText=%CA%C2%B9%CA&contains=true&searchFields=&sr=& layers=0&returnGeometry=true”的时候,是不是可以看到结果了?

方案2:
从服务器端入手,还是着手解决编码问题。
既然tomcat有问题,我们就在tomcat身上开刀。以Linux为例,分别打开“/arcgis/java/manager/service/tomcat/managerappserver/conf/server.xml”和“/arcgis/java/manager/service/tomcat/managerserver/conf/server.xml”,找到“Connector”元素,如图添加属性URIEncoding="UTF-8"。保存退出,重启tomcat和ArcGIS Server。

在浏览器中试一下中文查询,问题已经解决,如图:

再在Flex中进行Find Task查询,也能查到正确结果,如图:

2008年12月1日星期一

Google Map中国地图搜索的请求方式

与MapABC、Mapbar等国内地图“API”提供商不同,Google Map在对坐标的控制上比较宽松,不像国内地图厂家对坐标进行加密。而且,Google Map的地图搜索请求不仅仅支持html输出,而且还支持json和kml等输出,这无疑给程序整合带来便利。

目前,Google Map中国地图的搜索可以通过如下的URL请求完成:
http://ditu.google.cn/maps?output=kml&hl=zh-CN&q=东方新天地+餐厅&near=王府井&start=10

简单的解释一下:output对应输出格式,目前至少支持html、json和kml;q对应请求的搜索对象,多个关键字用“+”连接;near对应周边搜索;start对应多页搜索结果的起始值,默认一页10个结果,那么如果查看第二页那就是start=10,第三页就是20……