利用PostGis的空间数据库自带的分析计算功能,采用WebService技术在GIS服务器端发布GIS计算服务。GIS计算服务提供多种参考系和多种精度的几何计算和地理计算功能,客服端可采用任意开发语言连接GIS计算服务,调用对应的计算接口来完成空间计算功能。一、服务端设计1、计算点点之间的距离1.1计算点点距离的方法1.1.1在点与点之间计算时,采用ST_Distance(geometry,geometry),计算两个点在特定参考系下的距离,sql示例语句如下。1.1.2也可以将两个点传入,组成在特定参考系下的线,然后调用postgis中ST_Length(geometry)函数计算这条线的长度。sql示例语句如下1.2需要向外开放的参数有。1)计算距离的两个点坐标A(x1,y1),B(x2,y2);2)指定的参考系代号,如4326,900913等;2、计算多点线的长度2.1在计算多点组成的线时,需要调用postgis中的ST_Length(geometry)函数,需要注意的是,在组成这条线的点要有意义,比如LINESTRING(00,00)这个线就是无意义的。具体的sql示例如下:2.2需要向外开放的参数有:1)组成一条线的若干个点A(x1,y1),B(x2,y2)……2)指定的参考系代号,如4326,900913等;3、计算多面要素的面积3.1在计算多面要素的面积时,需要做个限定,即,在组成多面的几个面的关系属于包含于第一面内,否则无任何几何意义。示意图如下:从上图可知,形如multipolygon(((面1),(面2),(面3),(面4)))的一个多面图形中,“面1”代表一个整体的多边行范围,而其余几个面为其内部的一些多边形,其结果面积为上图阴影部分所示。因此计算多面要素面积的思路可以理解为,首先计算出“面1”的面积S1,然后在根据其内部几个多边形的几何关系求出内部多边形的面积之和S2(如果两面相交,则求出其相交后的面积(即面相并面积);如果两面相离,则求出其各自的面积)。则图中阴影部分的面积为S1-S2。S2的面积可以参考小一节的多个面相并后的面积计算方法。4、计算多个面相合并后的面积在给定多个面后,求其相并后的面积,这就需要先将这些面进行合并,形成一个整体的图形,这个图形是去掉重叠部分的图形,示意图如下所示:图中面1的区域与面2的区域相交形成面4,并且两个都与面3区域相离,则这三个面所组成的区域的面积为S1+S2-S4+S3。在postgis中,函数ST_Union(geometry,geomtry)可以获得两个几何图形的合并结果。而ST_Union(geometryset)是获取一系列几何图形的合并结果,但是经过测验,后者并没有实现预期的合并结果。因此,需要在程序端实现时,先使用ST_Union(geometry,geomtry)将需要合并的多个面状几何图形进行合并,然后在对合并后的几何图形进行面积的计算。具体的sql如下首先初始化第一个面:然后循环合并面:最后计算合并好的几何面的面积:5、计算多个面相交部分面积求多个面相交部分的面积的方式与求多个面相并后的面积方式类似,首先需要使用postgis中的ST_Intersection(geometry,geometry)函数,求出两两的相交部分,然后在利用ST_AREA求出这个相交部分的面积。6、计算简单多边行面积关于计算简单多边形的面积时,需要注意postgis中关于面的定义形式,如polygon((00,50,55,05,00)),其中的坐标点要首尾相接。示例sql如下图所示。需要向外提供的参数有1)围成一个多边形的的若干个点A(x1,y1),B(x2,y2)……2)指定的参考系代号,如4326,900913等;二、客户端调用服务在客户端调用时,目前分为两种方式。1、在java中调用GetWSByAxis2类中的响应方法(根据返回值调用相关函数),然后将需要调用的webservice服务中的函数,以及函数需要的参数传入。此处需要注意的是,对于webservice中的函数的参数要给予正确的格式。如多个面求交求并,则参数的格式为:在代表面的字符串中间,需要插入指定的特殊的字符“_”,以便程序中识别和判读单个面。多面图层的参数格式为:且第一个面必须包含其余面,即求一个镂空的面状图形的面积,只有这样才会有几何意义。求两点距离时,参数的格式为:同时采用个与面求交求并相同的分隔符“_”。其余的要素输入格式为:只需要用括号简单的将组成要素的点括起来即可。整体的客户端调用方式为:2、在flex中调用方法为,首先创建webservice的连接,输入webservice的服务地址,即可根据提示创建服务连接。然后程序中即可加载webservice服务数据的传入格式与java端的一样,效果图如下所示。