第一节geoserv路径分析

博客介绍了ArcGis打断线路的操作步骤,包括创建地理数据库、导入数据等。还涉及空间扩展语句、字段处理,如创建新字段、索引、拓扑结构等。此外,给出完整可执行sql,讲述操作Geoserver的配置,以及前端调用的完整js代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

目录

1.ArcGis打断线路

1.1.菜单栏>自定义>工具条>编辑器

1.2.编辑器>更多编辑工具>高级编辑

1.3.点击图层右键>选择>全选,讲所有线都选中

1.4.选择>打断相交线

1.5.在右侧目录下右键创建一个 个人地理数据库 

1.6.在个人地理数据库下右键创建一个 要素数据集

1.7.在要素数据集上右键>选择导入,把打断后的shp数据导入过来即可

1.8.新建网络数据集

1.9.打开路径列表

 2.空间扩展语句

3.导入数据

4.字段处理

4.1.创建新的空间字段geom

4.2.创建索引

4.3.删除原有的空间字段

4.4.创建拓扑结构 

4.5.更新属性字段

4.6.路网创建拓扑

4.7.VACUUM表

4.8.添加道路权重值

4.9.为source和target字段创建索引

4.10.给长度赋值

4.11.为anet4表添加reverse_cost字段并用length的值赋值

4.12. 计算任意两点间最短路径

5.完整可直接执行sql

6.操作Geoserver

创建sql试图过程中用到的完整配置如下:

7.前端调用

完整js代码:



1.ArcGis打断线路

参考视频:

ArcGis打断

1.1.菜单栏>自定义>工具条>编辑器

1.2.编辑器>更多编辑工具>高级编辑

1.3.点击图层右键>选择>全选,讲所有线都选中

1.4.选择>打断相交线

1.5.在右侧目录下右键创建一个 个人地理数据库 

1.6.在个人地理数据库下右键创建一个 要素数据集

1.7.在要素数据集上右键>选择导入,把打断后的shp数据导入过来即可

1.8.新建网络数据集

1.9.打开路径列表

 2.空间扩展语句

创建完用户和数据库后执行空间扩展语句

使用超级管理员用户执行,登录超级管理用户,选择需要扩展语句的数据库,执行

-- 提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符
CREATE EXTENSION postgis;
-- 用于网络分析的扩展模块
CREATE EXTENSION pgrouting;
-- gis 拓扑
CREATE EXTENSION postgis_topology;
-- 提供了几个函数来确定字符串之间的相似性和距离
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION address_standardizer;

3.导入数据

(1)使用PostGIS shapfile and DBF Loader工具将shp数据导入到数据库中

(2)连接数据库

(3)点击Add File按钮添加,选择要导入的shapfile文件(注意:这里存放shapfile文件的路径必须为纯英文,路径中不能含有汉字,SRD必须设置,这里我设置为4326)

(4)在Options点选下面对号

注意最后一个复选框必须打勾,以此来生成LineString类型,否则无法进行路径规划。

(5)点击 Import 导入数据

(6)查看导入数据

4.字段处理

如果是第一次创建需要处理字段,执行如下语句

4.1.创建新的空间字段geom

select AddGeometryColumn ('anet4','geom',4326,'LINESTRING',2);

4.2.创建索引

create index gidx_anet4_geom on anet4 using gist(geom);
 
select gid from anet3 where ST_IsValid(geometry) IS FALSE;
 
update anet4 set geom=ST_LineMerge(geometry);

4.3.删除原有的空间字段

ALTER TABLE anet4 DROP COLUMN geometry;

4.4.创建拓扑结构 

ALTER TABLE anet4
    ADD COLUMN source integer,              /*当前线段起点连接至上一线段的id*/
    ADD COLUMN target integer,              /*当前线段终点连接至下一线段的id*/
    ADD COLUMN cost double precision,       /*正向成本*/
    ADD COLUMN cost_time double precision,  /*正向成本所需的时间*/
    ADD COLUMN rcost double precision,      /*反向成本*/
    ADD COLUMN rcost_time double precision, /*反向成本所需的时间*/
    ADD COLUMN x1 double precision,         /*当前线段起点坐标(x)*/
    ADD COLUMN y1 double precision,         /*当前线段起点坐标(Y)*/
    ADD COLUMN x2 double precision,         /*当前线段终点坐标(x)*/
    ADD COLUMN y2 double precision,         /*当前线段终点坐标(y)*/
    ADD COLUMN to_cost double precision,
    ADD COLUMN rule text,
ADD COLUMN isolated integer;

4.5.更新属性字段

注释:

cost_len==rcost表示双向通行,如果要单行,只要在其中的一个字段上设置为-1即可。
cost_len和rcost长度单位为米并且只精确到米。
为加快pgr_createTopology的速度,VACUUM一下表

sql:

with base as(
    select 'SPHEROID["WGS84",6378137,298.25728]'::spheroid as sph
) update anet4 set x1 = st_x(st_startpoint(geom)),
                      y1 = st_y(st_startpoint(geom)),
                      x2 = st_x(st_endpoint(geom)),
                      y2 = st_y(st_endpoint(geom)),
  cost  = ST_LengthSpheroid(geom, f.sph)::integer,
  rcost = ST_LengthSpheroid(geom, f.sph)::integer
from base as f;
VACUUM FULL ANALYZE VERBOSE anet4;

4.6.路网创建拓扑

注释:

0.000001在上一章Arcmap中做拓朴检查时输入的值,单位为 0.000001度【在低纬地区(中国)大约是米级精度了】。
创建拓朴成功后,同时会生成一个表,命名格式为“表名_vertices_pgr(sroads_vertices_pgr)”,主要存储线段交汇点数据(几何类型为POINT)。

sql:

select pgr_createTopology('anet4', 0.000001, the_geom:='geom', id:='gid', source:='source', target:='target');

4.7.VACUUM表

注释:

由于前面我们做了大量的更新和删除操作,为提高性能对表进行VACUUM 操作,提高路网分析效率。

sql:

VACUUM FULL ANALYZE VERBOSE anet4;
VACUUM FULL ANALYZE VERBOSE anet4_vertices_pgr;

4.8.添加道路权重值

ALTER TABLE anet4  ADD COLUMN length double precision;

4.9.为source和target字段创建索引

CREATE INDEX source_idx ON anet4("source");

CREATE INDEX target_idx ON anet4("target");

4.10.给长度赋值

为length赋值

update anet4 set length =st_length(geom);

4.11.为anet4表添加reverse_cost字段并用length的值赋值

ALTER TABLE anet4 ADD COLUMN reverse_cost double precision;

UPDATE anet4 SET reverse_cost =length;

4.12. 计算任意两点间最短路径

思路:

首先计算距离起点A和终点B最新的路网线段l1和l2,再使用pgr_dijkstra函数计算l1和l2的两线段端点之间的最短路径,也就是l1的起点和终点至l2的起点和终点四种情况的最短路径,求得这四种情况中线段长度最小的情况,然后再在l1求得离起点A最近的点C,以及在l2上离终点B最近的点D,并根据点C、D截取l1和l2,最后将起点A、点C、最短路径、点D、终点B进行拼接,就是起点A到终点B的最短路径。

输入以下代码创建pgr_fromAtoB函数:

CREATE OR REPLACE FUNCTION "public"."pgr_fromatob"("tbl" varchar, "startx" float8, "starty" float8, "endx" float8, "endy" float8)
  RETURNS "public"."geometry" AS $BODY$  
 
declare 
 
    v_startLine geometry;--离起点最近的线 
 
    v_endLine geometry;--离终点最近的线 
 
     

    v_startTarget integer;--距离起点最近线的终点
 
    v_startSource integer;
 
    v_endSource integer;--距离终点最近线的起点
 
    v_endTarget integer;
 
 
 
    v_statpoint geometry;--在v_startLine上距离起点最近的点 
 
    v_endpoint geometry;--在v_endLine上距离终点最近的点 
 
     
 
    v_res geometry;--最短路径分析结果
 
    v_res_a geometry;
 
    v_res_b geometry;
 
    v_res_c geometry;
 
    v_res_d geometry; 
 
 
 
    v_perStart float;--v_statpoint在v_res上的百分比 
 
    v_perEnd float;--v_endpoint在v_res上的百分比 
 
 
 
    v_shPath_se geometry;--开始到结束
 
    v_shPath_es geometry;--结束到开始
 
    v_shPath geometry;--最终结果
 
    tempnode float;      
 
begin
 
    --查询离起点最近的线 
 
    execute 'select geom, source, target  from ' ||tbl||
 
                            ' where ST_DWithin(geom,ST_Geometryfromtext(''point('||         startx ||' ' || starty||')'',4326),150)
                            order by ST_Distance(geom,ST_GeometryFromText(''point('|| startx ||' '|| starty ||')'',4326))  limit 1'
 
                            into v_startLine, v_startSource ,v_startTarget; 
 
     
 
    --查询离终点最近的线 
 
    execute 'select geom, source, target from ' ||tbl||
 
                            ' where ST_DWithin(geom,ST_Geometryfromtext(''point('|| endx || ' ' || endy ||')'',4326),150)
                            order by ST_Distance(geom,ST_GeometryFromText(''point('|| endx ||' ' || endy ||')'',4326))  limit 1'
 
                            into v_endLine, v_endSource,v_endTarget; 
 
 
 
    --如果没找到最近的线,就返回null 
 
    if (v_startLine is null) or (v_endLine is null) then 
 
        return null; 
 
    end if ; 
 
   
 
   -- ST_Distance 
 
     
 
    --从开始的起点到结束的起点最短路径 
 
    execute 'SELECT st_linemerge(st_union(b.geom)) ' ||
 
    'FROM pgr_dijkstra( 
    ''SELECT gid as id, source, target, cost FROM ' || tbl ||''',' 
 
    ||v_startSource || ', ' ||v_endSource||' ,false 
    ) a, ' 
 
    || tbl || ' b 
    WHERE a.edge=b.gid ' into v_res ;
 
   
 
    --从开始的终点到结束的起点最短路径
 
    execute 'SELECT st_linemerge(st_union(b.geom)) ' ||
 
    'FROM pgr_dijkstra( 
    ''SELECT gid as id, source, target, cost FROM ' || tbl ||''',' 
 
    ||v_startTarget || ', ' ||v_endSource||' ,false
    ) a, ' 
 
    || tbl || ' b 
    WHERE a.edge=b.gid ' into v_res_b ;
 
 
 
    --从开始的起点到结束的终点最短路径
 
    execute 'SELECT st_linemerge(st_union(b.geom)) ' ||
 
    'FROM pgr_dijkstra( 
    ''SELECT gid as id, source, target, cost FROM ' || tbl ||''',' 
 
    ||v_startSource || ', ' ||v_endTarget||' ,false 
    ) a, ' 
 
    || tbl || ' b 
    WHERE a.edge=b.gid ' into v_res_c ;
 
 
 
    --从开始的终点到结束的终点最短路径
 
    execute 'SELECT st_linemerge(st_union(b.geom)) ' ||
 
    'FROM pgr_dijkstra( 
    ''SELECT gid as id, source, target, cost FROM ' || tbl ||''',' 
 
    ||v_startTarget || ', ' ||v_endTarget||' ,false
    ) a, ' 
 
    || tbl || ' b 
    WHERE a.edge=b.gid ' into v_res_d ;
 
 
 
    if(ST_Length(v_res) > ST_Length(v_res_b)) then
 
       v_res = v_res_b;
 
    end if;
 
   
 
    if(ST_Length(v_res) > ST_Length(v_res_c)) then
 
       v_res = v_res_c;
 
    end if;
 
   
 
    if(ST_Length(v_res) > ST_Length(v_res_d)) then
 
       v_res = v_res_d;
 
    end if;
 
             
 
 
 
    --如果找不到最短路径,就返回null 
 
    --if(v_res is null) then 
 
    --    return null; 
 
    --end if; 
 
     
 
    --将v_res,v_startLine,v_endLine进行拼接 
 
    select  st_linemerge(ST_Union(array[v_res,v_startLine,v_endLine])) into v_res;
 
 
		select  ST_LineLocatePoint(v_res, ST_Geometryfromtext('point('|| startx ||' ' || starty ||')',4326)) into v_perStart;
		
		select  ST_LineLocatePoint(v_res, ST_GeometryFromText('point('|| endx ||' ' || endy ||')',4326)) into v_perEnd;
 
        
 
    if(v_perStart > v_perEnd) then 
 
        tempnode =  v_perStart;
 
        v_perStart = v_perEnd;
 
        v_perEnd = tempnode;
 
    end if;
 
        
 
    --截取v_res 
 
    SELECT ST_LineSubstring(v_res,v_perStart, v_perEnd) into v_shPath;
 
 
 
    return v_shPath; 
 
 
 
end; 
 
$BODY$
  LANGUAGE plpgsql VOLATILE STRICT
  COST 100

5.完整可直接执行sql

-- shp数据导入数据库后执行

-- 1.创建索引
create index gidx_anet4_geom on anet4 using gist(geom);

-- 2.创建拓扑结构 

ALTER TABLE anet4
    ADD COLUMN source integer,              /*当前线段起点连接至上一线段的id*/
    ADD COLUMN target integer,              /*当前线段终点连接至下一线段的id*/
    ADD COLUMN cost double precision,       /*正向成本*/
    ADD COLUMN cost_time double precision,  /*正向成本所需的时间*/
    ADD COLUMN rcost double precision,      /*反向成本*/
    ADD COLUMN rcost_time double precision, /*反向成本所需的时间*/
    ADD COLUMN x1 double precision,         /*当前线段起点坐标(x)*/
    ADD COLUMN y1 double precision,         /*当前线段起点坐标(Y)*/
    ADD COLUMN x2 double precision,         /*当前线段终点坐标(x)*/
    ADD COLUMN y2 double precision,         /*当前线段终点坐标(y)*/
    ADD COLUMN to_cost double precision,
    ADD COLUMN rule text,
ADD COLUMN isolated integer;

-- 更新属性字段
with base as(
    select 'SPHEROID["WGS84",6378137,298.25728]'::spheroid as sph
) update anet4 set x1 = st_x(st_startpoint(geom)),
                      y1 = st_y(st_startpoint(geom)),
                      x2 = st_x(st_endpoint(geom)),
                      y2 = st_y(st_endpoint(geom)),
  cost  = ST_LengthSpheroid(geom, f.sph)::integer,
  rcost = ST_LengthSpheroid(geom, f.sph)::integer
from base as f;

VACUUM FULL ANALYZE VERBOSE anet4;

-- 路网创建拓扑
select pgr_createTopology('anet4', 0.000001, the_geom:='geom', id:='gid', source:='source', target:='target');

-- VACUUM表
VACUUM FULL ANALYZE VERBOSE anet4;
VACUUM FULL ANALYZE VERBOSE anet4_vertices_pgr;


-- 添加道路权重值
ALTER TABLE anet4  ADD COLUMN length double precision;



-- 3.创建索引

-- 为source和target字段创建索引

CREATE INDEX source_idx ON anet4("source");

CREATE INDEX target_idx ON anet4("target");


-- 4.给长度赋值

-- 为length赋值

update anet4 set length =st_length(geom);

-- 为anet4表添加reverse_cost字段并用length的值赋值

ALTER TABLE anet4 ADD COLUMN reverse_cost double precision;

UPDATE anet4 SET reverse_cost =length;


CREATE OR REPLACE FUNCTION "public"."pgr_fromatob"("tbl" varchar, "startx" float8, "starty" float8, "endx" float8, "endy" float8)
  RETURNS "public"."geometry" AS $BODY$  
 
declare 
 
    v_startLine geometry;--离起点最近的线 
 
    v_endLine geometry;--离终点最近的线 
 
     

    v_startTarget integer;--距离起点最近线的终点
 
    v_startSource integer;
 
    v_endSource integer;--距离终点最近线的起点
 
    v_endTarget integer;
 
 
 
    v_statpoint geometry;--在v_startLine上距离起点最近的点 
 
    v_endpoint geometry;--在v_endLine上距离终点最近的点 
 
     
 
    v_res geometry;--最短路径分析结果
 
    v_res_a geometry;
 
    v_res_b geometry;
 
    v_res_c geometry;
 
    v_res_d geometry; 
 
 
 
    v_perStart float;--v_statpoint在v_res上的百分比 
 
    v_perEnd float;--v_endpoint在v_res上的百分比 
 
 
 
    v_shPath_se geometry;--开始到结束
 
    v_shPath_es geometry;--结束到开始
 
    v_shPath geometry;--最终结果
 
    tempnode float;      
 
begin
 
    --查询离起点最近的线 
 
    execute 'select geom, source, target  from ' ||tbl||
 
                            ' where ST_DWithin(geom,ST_Geometryfromtext(''point('||         startx ||' ' || starty||')'',4326),150)
                            order by ST_Distance(geom,ST_GeometryFromText(''point('|| startx ||' '|| starty ||')'',4326))  limit 1'
 
                            into v_startLine, v_startSource ,v_startTarget; 
 
     
 
    --查询离终点最近的线 
 
    execute 'select geom, source, target from ' ||tbl||
 
                            ' where ST_DWithin(geom,ST_Geometryfromtext(''point('|| endx || ' ' || endy ||')'',4326),150)
                            order by ST_Distance(geom,ST_GeometryFromText(''point('|| endx ||' ' || endy ||')'',4326))  limit 1'
 
                            into v_endLine, v_endSource,v_endTarget; 
 
 
 
    --如果没找到最近的线,就返回null 
 
    if (v_startLine is null) or (v_endLine is null) then 
 
        return null; 
 
    end if ; 
 
   
 
   -- ST_Distance 
 
     
 
    --从开始的起点到结束的起点最短路径 
 
    execute 'SELECT st_linemerge(st_union(b.geom)) ' ||
 
    'FROM pgr_dijkstra( 
    ''SELECT gid as id, source, target, cost FROM ' || tbl ||''',' 
 
    ||v_startSource || ', ' ||v_endSource||' ,false 
    ) a, ' 
 
    || tbl || ' b 
    WHERE a.edge=b.gid ' into v_res ;
 
   
 
    --从开始的终点到结束的起点最短路径
 
    execute 'SELECT st_linemerge(st_union(b.geom)) ' ||
 
    'FROM pgr_dijkstra( 
    ''SELECT gid as id, source, target, cost FROM ' || tbl ||''',' 
 
    ||v_startTarget || ', ' ||v_endSource||' ,false
    ) a, ' 
 
    || tbl || ' b 
    WHERE a.edge=b.gid ' into v_res_b ;
 
 
 
    --从开始的起点到结束的终点最短路径
 
    execute 'SELECT st_linemerge(st_union(b.geom)) ' ||
 
    'FROM pgr_dijkstra( 
    ''SELECT gid as id, source, target, cost FROM ' || tbl ||''',' 
 
    ||v_startSource || ', ' ||v_endTarget||' ,false 
    ) a, ' 
 
    || tbl || ' b 
    WHERE a.edge=b.gid ' into v_res_c ;
 
 
 
    --从开始的终点到结束的终点最短路径
 
    execute 'SELECT st_linemerge(st_union(b.geom)) ' ||
 
    'FROM pgr_dijkstra( 
    ''SELECT gid as id, source, target, cost FROM ' || tbl ||''',' 
 
    ||v_startTarget || ', ' ||v_endTarget||' ,false
    ) a, ' 
 
    || tbl || ' b 
    WHERE a.edge=b.gid ' into v_res_d ;
 
 
 
    if(ST_Length(v_res) > ST_Length(v_res_b)) then
 
       v_res = v_res_b;
 
    end if;
 
   
 
    if(ST_Length(v_res) > ST_Length(v_res_c)) then
 
       v_res = v_res_c;
 
    end if;
 
   
 
    if(ST_Length(v_res) > ST_Length(v_res_d)) then
 
       v_res = v_res_d;
 
    end if;
 
             
 
 
 
    --如果找不到最短路径,就返回null 
 
    --if(v_res is null) then 
 
    --    return null; 
 
    --end if; 
 
     
 
    --将v_res,v_startLine,v_endLine进行拼接 
 
    select  st_linemerge(ST_Union(array[v_res,v_startLine,v_endLine])) into v_res;
 
 
		select  ST_LineLocatePoint(v_res, ST_Geometryfromtext('point('|| startx ||' ' || starty ||')',4326)) into v_perStart;
		
		select  ST_LineLocatePoint(v_res, ST_GeometryFromText('point('|| endx ||' ' || endy ||')',4326)) into v_perEnd;
 
        
 
    if(v_perStart > v_perEnd) then 
 
        tempnode =  v_perStart;
 
        v_perStart = v_perEnd;
 
        v_perEnd = tempnode;
 
    end if;
 
        
 
    --截取v_res 
 
    SELECT ST_LineSubstring(v_res,v_perStart, v_perEnd) into v_shPath;
 
 
 
    return v_shPath; 
 
 
 
end; 
 
$BODY$
  LANGUAGE plpgsql VOLATILE STRICT
  COST 100



6.操作Geoserver

(1)添加新的数据存储,类型为postgis数据库

(2)选择工作空间,填写数据源名称、输入数据库连接ip、数据库、用户、密码

(3)保存后,选择“配置新的SQL视图”

(4)输入试图名称

输入sql:

SELECT * FROM pgr_fromatob('huaxi_road', %x1%, %y1%, %x2%, %y2%)

(5)然后点击下方的“从SQL猜想的参数”,输入默认值为0,验证的正则表达式为*^-?[\d.]+$*

(6) 点击下方的“刷新”按钮,在新弹出的栏目中,选择类型为“LineString”,SRI为“4326”:

 (7)然后计算数据的边框:

创建sql试图过程中用到的完整配置如下:

sql:

SELECT * FROM pgr_fromatob('huaxi_road', %x1%, %y1%, %x2%, %y2%)

验证的正则表达式:^-?[\d.]+$

类型:LingString

SRID4326

7.前端调用

html按钮,点击调用起点、终点、路径分析方法

 起点方法:

终点方法:

路径分析方法:

完整js代码:

/**
	  * @class  网络分析>> 路径规划
   */
var  ak_network_rotate={
    /**
	 * @desc  起点 {cartesian}
	 * @typed   {cartesian}
    */
	startP: {},
	 /**
	 * @desc  终点 {cartesian}
	 * @typed   {cartesian}
    */
    endP: {},
	 /**
	 * @desc  起点数组
	 * @typed   {cartesian}
    */
	startArr:[],
	/**
	 * @desc  终点数组 
	 * @typed   {cartesian}
    */
	endArr:[],
	 /**
	 * @desc  路线数组
    */
	lineArr:[],
	carArr:[],
	lineColor:[],
	/**
		获取起点坐标
		 @throws
			异常:
			其他未结束事件可能造成的影响
		
	*/ 
   
   
		startCartesian:null,
		// 起点工具方法
    setStartPoint:function(){
			var $this = this;
			// this.clearStart(); //  不能 清楚开始
			$this.StartP=new Object();
			var  obj=new Object();
			obj.image="css/images/marker/start4.png";
			obj.width=35;
			obj.height=35;
			var  markerInit=new geo_draw_marker(obj);
			markerInit.init(function(postion){
				$this.startCartesian=postion;
				var  xy=_cUtil.cartesianToLatlng(postion);// 世界坐标
				console.log(xy);
				$this.startP.cartographic =xy;
			});
			this.startArr.push(markerInit);
    },
	/**
		获取终点坐标
		 @throws
			异常:
			其他未结束事件可能造成的影响
		
	*/ 
	// 终点工具栏方法
    setEndPoint:function(){
      var $this = this;
	    this.clearEnd();
			$this.endP=new Object();
      var  obj=new Object();
			obj.width=35;
			obj.height=35;
			obj.image="css/images/marker/end4.png";
			var  markerInit=new geo_draw_marker(obj);
			markerInit.init(function(postion){
				var  xy=_cUtil.cartesianToLatlng(postion);// 世界坐标
				$this.endP.cartographic =xy;// 转换到经纬度
			});
			this.endArr.push(markerInit);
    },

	
	getRoateYj:function(x,y){
     	if(x){
            var  geonetwork=new geo_network();
            geonetwork.setAnalylis(x,y,ak_network_rotate.roateCallback);
		 }
    },
    /**
		获取路线
		 @throws
			异常:
			其他未结束事件可能造成的影响
		
	*/ 
    getRoate:function(){
        if(this.startP){
            var  geonetwork=new geo_network();
            geonetwork.setAnalylis(this.startP,this.endP,ak_network_rotate.roateCallback);

        }

    },
	
 
    roateCallback:function(data){
        if(data  &&  data.status==1) {
            var ps = data.route.paths;
            /*var pagination1 = new paginationNetwork(ps);//paginationNetwork.js
            pagination1.updateQResultTableData(1);*/
			var ht=document.body.clientHeight-185;
			/**/var rotateLine="<div style='overflow-y:auto;overflow-x:hidden;height:"+ht+"px;padding:20px'>";
		this.lineColor=[];
		var co1=new Cesium.Color(255,0,255, 1);
		var co2=new Cesium.Color(255,20,147, 1);
		var co3=new Cesium.Color(128,0,128, 1);
		var co4=new Cesium.Color(124,252,0, 1);
		var co5=new Cesium.Color(139,69,19, 1);
			
		
		this.lineColor.push(Cesium.Color.RED);
		this.lineColor.push(Cesium.Color.BLUE);
		this.lineColor.push(Cesium.Color.YELLOW);
		this.lineColor.push(Cesium.Color.DARKSLATEGRAY);
 
			this.lineColor.push(co1);
			this.lineColor.push(co2);
			this.lineColor.push(co3);
			this.lineColor.push(co4);
			this.lineColor.push(co5);

		 var colorline ;
			
		for(var i=0;i<ps.length;i++){
				var line=ps[i];
				
				
				if(i<7){
				   colorline= this.lineColor[i];
				}
			

				
			 	line.color=colorline;
				rotateLine+=ak_network_rotate.rotateBuildTable(line)+"<br/><br/>";
				ak_network_rotate.addRouteLine(line,2);
				
				

			}
		
			rotateLine+="</div>"
		var dom =_result;
        $(dom).html("");
        $(dom).append(rotateLine);
        _slipWin.upws(300);
        _slipWin.show();

        }

    },
	/*
		 拼接Table
		 @example 
			 示例:
			 var  obj=new ak_network_rotate(); 
			 obj.rotateBuildTable(object);
		 @throws
			异常:
			其他未结束事件可能造成的影响
		@param  {obj} obj  方案对象
	*/
	 rotateBuildTable:function(obj) {
        var table = [];
        var self=this;

		var jsonstr = JSON.stringify(obj); //将json对象转换为json字符串

		var strategy=obj.strategy;
		var distance=obj.distance;
		var duration=obj.duration;
		var step=obj.steps;//instruction

		var s1="";
        table.push("<table width='100%'  height:90% ><tbody>" );
		table.push("<tr ><td colspan=2><input type='button' class='panel_weight_button1' style='height:27px;margin-left: 10px;' value='显示路线' onclick='ak_network_rotate.addRouteLine("+jsonstr+","+1+")' />");//
		table.push("&nbsp;&nbsp;&nbsp;<input type='button' class='panel_weight_button1' style='height:27px;margin-left: 10px;' value='开始导航' onclick='ak_network_rotate.addRouteLine("+jsonstr+","+2+")' /></td></tr>");
		
        table.push("<tr ><td>策略</td><td>" + strategy + "</td></tr>");
        table.push("<tr ><td>距离</td><td>" + distance + "</td></tr>");
        table.push("<tr ><td>时间</td><td>" + duration + "</td></tr>");
		
		 for(var i=0;i<step.length;i++){
		    var steps=step[i];
			s1+=steps.instruction+",";//steps.action+","+
			//conten+=s1+"</br>";
		 }
		 table.push("<tr><td colspan=2>" +s1+ "</td></tr>");
		 
        table.push("</tbody></table>");
        return table.join("");

    },

	/*
		 生成路线
		 @example 
			 示例:
			 var  obj=new ak_network_rotate(); 
			 obj.addRouteLine(res,1);
		 @throws
			异常:
			其他未结束事件可能造成的影响
		@param  {res} res  方案对象
		@param  {type} type  1-展示路线,2-开始导航
	*/
 addRouteLine:function(res,type) {
    var arr = [];
    var steps = res.steps;
    for (var i = 0; i < steps.length; i++) {
        var item = steps[i];
        var positionStr = item.polyline;
        var strArr = positionStr.split(";");
        for (var z = 0; z < strArr.length; z++) {
            var item2 = strArr[z];
            var strArr2 = item2.split(",");
            var p = gcj2wgs(strArr2);
            arr.push(p);
        }
    }
	
    if(arr.length>1){
        ak_network_rotate.FXPositionsYj=new Object(); 
        ak_network_rotate.FXPositionsYj.line=arr;

    }

    var cartesians = this.lnglatArrToCartesianArr(arr);

	var   color= new Cesium.PolylineGlowMaterialProperty({
				glowPower: 0.1, //一个数字属性,指定发光强度,占总线宽的百分比。
				color: res.color
     });
	var polyline="";
	var  id=Number((new Date()).getTime() + "" + Number(Math.random() * 1000).toFixed(0));
    var line = viewer.entities.add({
        id:id,
		polyline: {
			
            positions: cartesians,
            clampToGround: true,
            material: color,//Cesium.Color.RED.withAlpha(1),
            width: 10
        }
    });
	this.lineArr.push(line);
	if(type==2){
		
		this.moveOnRoute(line);
	}
   
},
	/**
		汽车移动
		@param  {lineEntity} lineEntity  路线
	*/ 
   qicheModel:null,
   carArr:[],
   moveOnRoute:function(lineEntity,url,size,height) {
	var mrsize=40;
	var mrurl="scripts/business/datasource/car.glb";
    if (!lineEntity) return;
    var positions = lineEntity.polyline.positions.getValue();
	if(height){
		positions = cCesium.updateCartesianArrHeight(positions,{ z:height});
	}
	
    if (!positions) return;
    var allDis = 0;
    for (var index = 0; index < positions.length - 1; index++) {
        var dis = Cesium.Cartesian3.distance(positions[index], positions[index + 1]);
        allDis += dis;
    }
    var playTime = 10;
    var v = allDis / playTime;
    var startTime = viewer.clock.currentTime;
    var endTime = Cesium.JulianDate.addSeconds(startTime, playTime, new Cesium.JulianDate());
    var property = new Cesium.SampledPositionProperty();
    var t = 0;
    for (var i = 1; i < positions.length; i++) {
        if (i == 1) {
            property.addSample(startTime, positions[0]);
        }
        var dis = Cesium.Cartesian3.distance(positions[i], positions[i - 1]);
        var time = dis / v + t;
        var julianDate = Cesium.JulianDate.addSeconds(startTime, time, new Cesium.JulianDate());
        property.addSample(julianDate, positions[i]);
        t += dis / v;
    }
	if(height){
		 qicheModel = viewer.entities.add({
			position: property,
			orientation: new Cesium.VelocityOrientationProperty(property),
			// model: {
			// 	uri: url || mrurl, 
			// 	minimumPixelSize:size || mrsize 
			// },
			
			// billboard: {
			//     image:   'css/images/marker/man.png',//mark4.png
			//     width:  30,
			//     height: 30,
			//     verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
			//      // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
			// 		disableDepthTestDistance:Number.POSITVE_INFINITY
			// },
			
			
			point: {
			     color: new Cesium.Color.fromCssColorString("#FFFF00").withAlpha(0.9),
			     pixelSize :20
			     
			},
			
		});
	}else{
		 qicheModel = viewer.entities.add({
        position: property,
        orientation: new Cesium.VelocityOrientationProperty(property),
        model: {
            uri: url || mrurl,
            //	 scale: 10,
            minimumPixelSize:size || mrsize,
            heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
        }
    });
	}
   
	this.carArr.push(qicheModel);
    viewer.clock.currentTime = startTime;
    viewer.clock.multiplier = 2;
    viewer.clock.shouldAnimate = true;
    viewer.clock.stopTime = endTime;
	

},
	/**
		清除路径分析
		
	*/ 

	clearAll:function(){
		this.clearStart();
		this.clearEnd();
	
		this.clearCar();
		
		ak_network_rotate.StartP={};
		ak_network_rotate.startArr=[];
		ak_network_rotate.endP={};
		ak_network_rotate.endArr=[];
		ak_network_rotate.roamFly=[];
		
		// 清理 导航的路径
		// if(ak_network_rotate.polylinesProim){
		// 	viewer.scene.primitives.remove(ak_network_rotate.polylinesProim);
		// }
			    
		this.clearLineObj();
 
	},
	clearLineObj:function(){
		this.clearLinesPrimite();
		this.clearLine();
	},
	
	
	clearLinesPrimite:function(){
		for (var i = 0; i < ak_network_rotate.polylineArrs.length; i++) {
		    var line = ak_network_rotate.polylineArrs[i];
		    viewer.scene.primitives.remove(line);
		 }
		 
		 for (var i = 0; i < this.lineInitS.length; i++) {
		        var start = this.lineInitS[i];
		 		   start.clear();//  
		   }
		  this.lineInitS = [];
		   
	},
	clearStart: function () {
       for (var i = 0; i < this.startArr.length; i++) {
              var start = this.startArr[i];
			   start.clear();// 
			   start.disable();
		 }
        this.startArr = [];
		 
    },
	clearEnd: function () {
		 for (var j = 0; j < this.endArr.length; j++) {
              var end = this.endArr[j];
			   end.clear();// 
			   end.disable();
		 }
        this.endArr = [];
	},
	clearLine:function(){
		 for  (var k = 0; k < this.lineArr.length; k++) {
			var line = this.lineArr[k];
			viewer.entities.remove(line);
		}
		this.lineArr = [];
	},
	clearCar:function(){
		 for  (var m = 0; m < this.carArr.length; m++) {
			var car = this.carArr[m];
			viewer.entities.remove(car);
		}
		this.carArr = [];
	},
	/**
		经纬度转世界坐标 [101,40]
		
	*/ 
    lnglatToCartesian:function (lnglat) { 
        if (!lnglat) return null;
        return Cesium.Cartesian3.fromDegrees(lnglat[0], lnglat[1], lnglat[2] || 0);
    },

    lnglatArrToCartesianArr:function(lnglatArr) {
        if (!lnglatArr) return [];
        var arr = [];
        for (var i = 0; i < lnglatArr.length; i++) {
            arr.push(this.lnglatToCartesian(lnglatArr[i]));
        }
        return arr;
    },
	
	
	removeGeoServer_xz:function(){
		  if(ak_houses.xzproviderPoint){
			     viewer.imageryLayers.remove(ak_houses.xzproviderPointHand);
				 ak_houses.xzproviderPointHand=null; 
				 ak_houses.xzproviderPoint=null; 
		  }
	},
	//乡镇
	xzproviderPoint:null,
    xzproviderPointHand:null,
	apath:1,//透明度 全局
    addGeoservr:function(){
		if(ak_network_rotate.xzproviderPoint){
			   ak_network_rotate.removeGeoServer_xz();
			   return ;
		  }
		  //ak_network_rotate.changeRangeApath();
		// ak_houses.initfly();
		  ak_network_rotate.xzproviderPoint = new Cesium.WebMapServiceImageryProvider({
		   
		    url: config.geoserverurl+'geoserver/cite/wms',
		    layers: 'cite:anet4	',//huaxi_road   anet
			//LOUDONGDIAN	XIAOQUDIAN xiaoqumian kunming_houses jiayouzhan84
		    parameters: {
		        service: 'WMS',
		        format: 'image/png',
		        transparent: true,
		    }
		});
		//ImageryLayer
		ak_network_rotate.xzproviderPointHand=viewer.imageryLayers.addImageryProvider(ak_network_rotate.xzproviderPoint);
		ak_network_rotate.xzproviderPointHand.alpha=ak_network_rotate.apath;
	},
	roamFly:null,
	polylinesProim:	null,
	polylineArrs:[],
	lineInitS:[],
	slGeoserver:function(type){
		// 如果没有选择起点或终点, 则提示弹框.
		if(!ak_network_rotate.polylinesProim){
			ak_network_rotate.polylinesProim=scene.primitives.add(new Cesium.PolylineCollection());
		}
		// console.log($("#qdhzd"));
		if(!this.startP.cartographic || !this.endP.cartographic){
			ak_network_rotate.Alert('请选择选择起点或终点.');
			return ;
		}
		//  this.startP,this.endP
		// ak_network_rotate.Alert('是否开启导航.');
 
		var x1 = this.startP.cartographic[0];//
		var y1 = this.startP.cartographic[1];//
		
		var x2 = this.endP.cartographic[0];//
		var y2 = this.endP.cartographic[1];//
		 //存储名称
		var store = 'tzbdc_ljfx';
		//图层标题
		// var layer = 'jiangan_route';
		var layer = 'geo_anet4';//anet1 huaxi_road4
		//图层名称
        var typename = store + ':' + layer;

	    var url =config.geoserverurl + 'geoserver/' + store + '/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=' + typename + '&maxFeatures=50&outputFormat=application/json';
	    var params = [];
		

		
		 //查询参数
		// url +='&viewparams=x1:\''+x1+'\';y1:\''+y1+'\';x2:\''+x2+'\';y2:\''+y2+'\'';
		url += '&viewparams=x1:' + x1 + ';y1:' + y1 + ';x2:' + x2 + ';y2:' + y2;
         console.log(url);
		var pos = new Array();
	    $.ajax({
	             type: 'get',
	             url: url,
	             async: false,
				// type: "get",
				// url: url,
				// dataType: "jsonp", //指定服务器返回的数据类型
	             success: function (data) {
					 // ak_network_rotate.startCartesian
					 ak_network_rotate.clearLineObj();
	                 console.log(data);
				    if (data.features ) {
	                     console.log(data.features[0].geometry.coordinates);
	                     var lines = data.features[0].geometry.coordinates;
						 if(lines.length<2){
							 alert('没有查询到分析结果');
							 return ;
						 }
	                     for (var i = 0; i < lines.length; i++) {
	                         // console.log(lines[i][0]+" "+lines[i][1]);
	                         pos.push(lines[i][0], lines[i][1]);
	                     }
						  var crr=Cesium.Cartesian3.fromDegreesArray(pos);
						  var  c1pt=crr[0];
						  var  cendpt=crr[crr.length-1];
						  
						  var d1 = _cUtil.spacePointDistance(ak_network_rotate.startCartesian,c1pt);
						  var d2 = _cUtil.spacePointDistance(ak_network_rotate.startCartesian,cendpt);
						  if(d1>d2){
									lines=lines.reverse();// 反转
									pos=[];
									pos.length=0;
							       for (var i = 0; i < lines.length; i++) {
							           // console.log(lines[i][0]+" "+lines[i][1]);
							           pos.push(lines[i][0], lines[i][1]);
							       }
							  	    crr=Cesium.Cartesian3.fromDegreesArray(pos);
						  }
						  var newP = cCesium.updateCartesianArrHeight(crr,{
								z:4
							});
							
						// console.log(JSON.stringify(crr));
						var newP2 = cCesium.updateCartesianArrHeight(crr,{
								z:5
							});
						  if(newP.length>10  &&  isapp==1){
							   type=1;
						  }		
						// 如果是1  就是 视野导航
						 
				   if(type==1){
						   var width=50;
						   if(isapp==1){
							  width=22;
						   }
						    ak_nav.hideRote();
						    var  obj=new Object();
							obj.width=width;
							obj.material= ak_marker.getNearMaterial();//new Cesium.PolylineArrowMaterialProperty(Cesium.Color.YELLOW);
							var lineInit=new geo_draw_line(obj);
							lineInit.createLine(newP2);
							var positions=lineInit.getPositions();
							roamFly = new RoamFly(viewer, {
									modelUrl: "",//zhanji car  weixin/datasource/Cesium_Man.glb
									distance:0.025,
									pitch:0,
									modelSize:20
							});
							 window.setTimeout(function() {
								roamFly.crateByPositions(newP,5,9.2,2.5,true,false,ak_network_rotate.callBackTag);//Onground
								roamFly.lockView(true);
								roamFly.viewToEntity();
							 },2500);
							 								
						
							 
							 ak_initFly.isRuning=true;
							 ak_initFly.changeRun(); 
							 
						 }
						 // 如果是2 就是 线路导航 加 可视域
						 else  if(type==2){
							 var entity = viewer.entities.add({
							     name: '寻路',
							     polyline: {
							         positions:newP,
							         width: 3,
							         material: Cesium.Color.RED,
							         clampToGround: true,
							         followSurface: false
							     }
							 }); 
								
							 var positions = entity.polyline.positions.getValue();
							 var runline1 = ak_marker.showRunLineFly(positions,0.1,0,0.00007,90,1,2);
						 }
						 // 采用 拓展材质方式 进行展现
						 else  if(type==3){
							 
							 // var newP = cCesium.updateCartesianArrHeight(crr,{
							 // 		z:7
							 // 	}); 
						 
														
							 // var material = ak_marker.getNearMaterial();
							 // var entity = viewer.entities.add({
							 //     name: '寻路',
							 //     polyline: {
								// 	 show:true,
							 //         positions:newP,
							 //         width: 15,
							 //         material: material,
							 //         clampToGround: false,
							 //         followSurface: false
							 //     }
							 // });
							 var width=50;
							 if(isapp==1){
								 width=22;
							 }
							 var  obj=new Object();
							 obj.width=width;
							 obj.material= ak_marker.getNearMaterial();//new Cesium.PolylineArrowMaterialProperty(Cesium.Color.YELLOW);
							 var lineInit=new geo_draw_line(obj);
							 lineInit.createLine(newP2);
							 ak_network_rotate.lineInitS.push(lineInit);
						
							 
							 
							// var  line=new geo_draw_line();
							// var runlineEntity=line.createLine(newP);
						
							var modelUrl= "weixin/datasource/Cesium_Man.glb";
							
							
							// ak_network_rotate.moveOnRoute(entity,modelUrl,90,0.1);
							
							// var  material = Cesium.Material.fromType("BlueWaterMaterialPropertyLgCz");
							// material.uniforms.color = Cesium.Color.YELLOW; // SKYBLUE
							// material.uniforms.speed =10;
							// material.uniforms.repeat = 25;
							// material.uniforms.image = 'weixin/images/animateWall/lineAarrow.png';//lineAarrow arrow_1 colors1 lineAarrow.png
						 
							 // var  material = Cesium.Material.fromType("BlueWaterMaterialPropertyLgCz");
							 // material.uniforms.color = Cesium.Color.RED; // SKYBLUE
							 // material.uniforms.speed = 7;
							 // material.uniforms.repeat = 10;
							 // material.uniforms.image = 'weixin/images/animateWall/wh1.png';//lineAarrow arrow_1 colors1 lineAarrow.png wh1
						  
						  
						  
							// var obj=new Object();
							// var  id=Number((new Date()).getTime() + "" + Number(Math.random() * 1000).toFixed(0));
							// 	obj.name="ss"
							// obj.address=""; 
							// obj.addtypemarker=config.addtypemarker.common;
							// obj.cartions=newP;
							//    obj.material=material;
							// obj.width=5; 
							// var line1=ak_pm_tool.addLine(obj);
							// ak_network_rotate.polylineArrs.push(line1);
							
							// ak_pm_tool.addLineReGeom(ak_network_rotate.polylinesProim,obj);
							// ak_network_rotate.polylinesProim.add(ak_network_rotate.line1);
							 	 
						 }     
	                 }
	             }
	         });
	 
	  
	
	},
	// 在飞行中
	// 导航线完成的回调函数.
	callBackTag:function(d){
		 window.setTimeout(function() {
		 	 ysdrObj.initFlyExtent();
		 },1000);
		 // 飞行过程中  禁用
		 ak_initFly.isRuning=false;
		 ak_initFly.changeRun();
	     ak_initFly.getGaoliang(); 
		
		 $('#bottom_dhx').css('opacity', '1'); // 导航线按钮
	      ak_nav.showRote(); // 显示窗口号
	},
	
	// 固定导航的做法
	slGeoserver2:function(){
		// 判断, 如果在飞行中, 则该按钮不能被点击.
		if (ak_initFly.isRuning) {
			return;
		}
		ak_nav.hideRote();  // 隐藏窗口号
		
	     ak_network_rotate.clearLineObj();
		
		// ak_nav.clearAll();
		if(roamFly){
			roamFly.destroy();
		} 
		ak_initFly.isRuning=true;
		ak_initFly.changeRun();
		
		// ak_initFly.showCk();// 显示所有窗口标注
		var crr=[{"x":-2197578.80171521,"y":4378632.110861951,"z":4070283.185871305},{"x":-2197577.871779181,"y":4378634.070451927,"z":4070281.590660371},{"x":-2197577.4250770938,"y":4378635.010392767,"z":4070280.8258447256},{"x":-2197577.3287496036,"y":4378635.214959166,"z":4070280.6589139025},{"x":-2197576.7212435873,"y":4378636.463559882,"z":4070279.650515366},{"x":-2197575.097241392,"y":4378639.800473502,"z":4070276.9557738365},{"x":-2197573.9405605663,"y":4378642.177532095,"z":4070275.036067837},{"x":-2197570.5547723807,"y":4378649.137290042,"z":4070269.4149197955},{"x":-2197569.1029706816,"y":4378652.121553422,"z":4070267.0046380106},{"x":-2197565.7817203705,"y":4378658.946877134,"z":4070261.492498726},{"x":-2197564.557473791,"y":4378661.463836942,"z":4070259.4595128056},{"x":-2197561.3375610504,"y":4378668.081264001,"z":4070254.1151497453},{"x":-2197560.181301412,"y":4378670.457292053,"z":4070252.1962880115},{"x":-2197559.9440765497,"y":4378670.94537839,"z":4070251.801954609},{"x":-2197556.6853151666,"y":4378677.643653793,"z":4070246.3920042706},{"x":-2197555.5212934213,"y":4378680.03472848,"z":4070244.461216323},{"x":-2197553.4144621263,"y":4378684.365517691,"z":4070240.9633117164},{"x":-2197551.445714318,"y":4378688.411004161,"z":4070237.696214136}];
		var newP = cCesium.updateCartesianArrHeight(crr,{
										z:7
		});
		var newP2 = cCesium.updateCartesianArrHeight(crr,{
										z:2
		});
		
		var  obj=new Object();
		obj.width=20;
		obj.material= ak_marker.getNearMaterial();//new Cesium.PolylineArrowMaterialProperty(Cesium.Color.YELLOW);
		var lineInit=new geo_draw_line(obj);
		lineInit.createLine(newP2);
		var positions=lineInit.getPositions();
		roamFly = new RoamFly(viewer, {
				modelUrl: "",//weixin/datasource/Cesium_Man.glb
				distance:0.055,
				pitch:0,
				modelSize:30
		});
		roamFly.crateByPositions(newP,5,9.2,2.5,true,false,ak_network_rotate.callBackTag);//Onground
		roamFly.lockView(true);
		// roamFly.viewToEntity();
	},
	//是否第一视角
	onIsShowingChange:function(e){
		if (ak_network_rotate.roamFly) {
			ak_network_rotate.roamFly.lockView(e);
			ak_network_rotate.roamFly.viewToEntity();
		}
	},
	/**
	 * 获取范围
	 */
	getCameraView:function() {
	   var camera = viewer.camera;
	   var position = camera.position;
	   var heading = camera.heading;
	   var pitch = camera.pitch;
	   var roll = camera.roll;
	   var lnglat = Cesium.Cartographic.fromCartesian(position);
	   
	   var x = Cesium.Math.toDegrees(lnglat.longitude);
	   var y = Cesium.Math.toDegrees(lnglat.latitude);
	   var z = lnglat.height;
	   var heading = heading;
	   var pitch = pitch;
	   var rool = roll;
	   
	   var content = "x:"+x+",y:"+y+",z:"+z+",heading:"+heading+",pitch:"+pitch+",rool:"+rool;
	   console.log("当前范围:"+content);
	   // alert(content);
	   var objx={
	    x: Cesium.Math.toDegrees(lnglat.longitude),
	    y: Cesium.Math.toDegrees(lnglat.latitude),
	    z: lnglat.height,
	    heading: heading,
	    pitch: pitch,
	    rool:roll
	   };
	   console.log(objx);
	   return objx;
	},
	/**
	 * 设置范围
	 * @param {Object} obj
	 */
	setCameraView:function(obj) {
	    if (!obj) return;
	    var position = Cesium.Cartesian3.fromDegrees(obj.x, obj.y, obj.z);

	    viewer.camera.flyTo({
	     destination: position,
	     duration: obj.duration || 0,
	     complete: obj.complete,
	     
	     orientation: {
	      heading:obj.heading,
	      pitch:obj.pitch,
	      roll:obj.roll
	     },
	    
	    });
	},
	// 消息提示框
	Alert:function(str) {
	    var msgw,msgh,bordercolor;  
	    msgw=400;//提示窗口的宽度  
	    msgh=80;//提示窗口的高度  
	    titleheight=25 //提示窗口标题高度  
	    bordercolor="#336699";//提示窗口的边框颜色  
	    titlecolor="#99CCFF";//提示窗口的标题颜色  
	    var sWidth,sHeight;  
	    //获取当前窗口尺寸  
	    sWidth = document.body.offsetWidth;  
	    sHeight = document.body.offsetHeight;  
	//    //背景div  
	    var bgObj=document.createElement("div");  
	    bgObj.setAttribute('id','alertbgDiv');  
	    bgObj.style.position="absolute";  
	    bgObj.style.top="0";  
	    bgObj.style.background="#E8E8E8";  
	    bgObj.style.filter="progid:DXImageTransform.Microsoft.Alpha(style=3,opacity=25,finishOpacity=75";  
	    bgObj.style.opacity="0.6";  
	    bgObj.style.left="0";  
	    bgObj.style.width = sWidth + "px";  
	    bgObj.style.height = sHeight + "px";  
	    bgObj.style.zIndex = "10000";  
	    document.body.appendChild(bgObj);  
	    //创建提示窗口的div  
	    var msgObj = document.createElement("div")  
	    msgObj.setAttribute("id","alertmsgDiv");  
	    msgObj.setAttribute("align","center");  
	    msgObj.style.background="white";  
	    msgObj.style.border="1px solid " + bordercolor;  
	    msgObj.style.position = "absolute";  
	    msgObj.style.left = "50%";  
	    msgObj.style.font="12px/1.6em Verdana, Geneva, Arial, Helvetica, sans-serif";  
	    msgObj.style.borderRadius="8px";
	    msgObj.style.overflow="hidden";
	    //窗口距离左侧和顶端的距离
	    msgObj.style.marginLeft = "-225px";  
	    //窗口被卷去的高+(屏幕可用工作区高/2)-150  
	    msgObj.style.top = document.body.scrollTop+(window.screen.availHeight/2)-150 +"px";  
	    msgObj.style.width = msgw + "px";  
	    msgObj.style.height = msgh + "px";  
	    msgObj.style.textAlign = "center";  
	    msgObj.style.lineHeight ="25px";  
	    msgObj.style.zIndex = "10001";  
	    document.body.appendChild(msgObj);  
	    //提示信息标题  
	    var title=document.createElement("h4");  
	    title.setAttribute("id","alertmsgTitle");  
	    title.setAttribute("align","left");  
	    title.style.margin="0";  
	    title.style.padding="3px";  
	    title.style.background = bordercolor;  
	    title.style.filter="progid:DXImageTransform.Microsoft.Alpha(startX=20, startY=20, finishX=100, finishY=100,style=1,opacity=75,finishOpacity=100);";  
	    title.style.opacity="0.75";  
	    title.style.border="1px solid " + bordercolor;  
	    title.style.height="18px";  
	    title.style.font="12px Verdana, Geneva, Arial, Helvetica, sans-serif";  
	    title.style.color="white";  
	    title.innerHTML="提示信息";  
	    document.getElementById("alertmsgDiv").appendChild(title);  
	    //提示信息  
	    var txt = document.createElement("p");  
	    txt.setAttribute("id","msgTxt");  
	    txt.style.margin="16px 0";  
	    txt.innerHTML = str;  
	    document.getElementById("alertmsgDiv").appendChild(txt);  
	    //设置关闭时间  
	    window.setTimeout("ak_network_rotate.closewin()",2000);
	},
	 closewin:function() {  
	    document.body.removeChild(document.getElementById("alertbgDiv"));  
	    document.getElementById("alertmsgDiv").removeChild(document.getElementById("alertmsgTitle"));  
	    document.body.removeChild(document.getElementById("alertmsgDiv"));  
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

akglobe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值