以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 SVG/GML/VRML/X3D/XAML 』 (http://bbs.xml.org.cn/list.asp?boardid=21) ---- [分享]基于SVG+XMLHTTP+ORACLE SPATIAL的WEBGIS基础平台实例 (http://bbs.xml.org.cn/dispbbs.asp?boardid=21&rootid=&id=32265) |
-- 作者:zhou_gong -- 发布时间:5/13/2006 10:39:00 PM -- [分享]基于SVG+XMLHTTP+ORACLE SPATIAL的WEBGIS基础平台实例 这是我的毕业论文实例.现在贡献出来,让有兴趣的朋友一起学习:http://www.9place.com:6677/svgmap 联系:zhou_gong_nn@163.com qq:185006613 |
-- 作者:spears -- 发布时间:5/14/2006 4:59:00 PM -- 哇,赞啊 |
-- 作者:spears -- 发布时间:5/14/2006 5:00:00 PM -- 怎么看不到地图 |
-- 作者:zhou_gong -- 发布时间:5/14/2006 8:11:00 PM -- 需要安装SVGView.exe插件才能看到图形. |
-- 作者:wangyan5118 -- 发布时间:5/18/2006 11:01:00 AM -- 你写的网址我打不开啊,我也要写这个方面的论文,希望高手指点一下 |
-- 作者:zhou_gong -- 发布时间:5/23/2006 12:23:00 AM -- 怎么没有多少人感兴趣呢.ORACLE SPATIAL是和数据库结合一起的GIS啊 |
-- 作者:beijie -- 发布时间:5/23/2006 11:17:00 AM -- 兄弟能不能把代码发一份 谢谢老 wybjie@21cn.com |
-- 作者:zhangjp999 -- 发布时间:5/23/2006 1:04:00 PM -- 兄弟,能否发份代码?zhou_gong_nn@163.com,不胜感激! |
-- 作者:zhou_gong -- 发布时间:5/23/2006 4:31:00 PM -- 主要实现如下功能: 1) 改变颜色 功能:重新自动生成土地时空对象的填充颜色 参数:无 2) 刷新视窗 功能:重新从数据服务层检索视窗范围的土地时空对象,更新视窗的数据呈现 参数1:自动/手动,当设为自动时,当视窗改变时会自动执行此命令; 参数2:日期开始,表示大于此日期的土地时空对象被检索; 参数3:日期结束,表示小于此日期的土地时空对象被检索; 参数4:数据返回最大长度(k),表示返回检索XML消息结果不能超过此值 3) 放大视窗 功能:按住鼠标左键保持不松,拖动鼠标则放大拖动范围到视窗;如果点击鼠标,则在此位置作为中心按缩放比例因子放大视窗 参数:缩放比例,此值在1.1~10之间 4) 缩小视窗 功能:按住鼠标左键保持不松,拖动鼠标则移动视窗;如果点击鼠标,则在此位置作为中心按缩放比例因子缩小视窗 参数:缩放比例,此值在1.1~10之间 5) 创建对象 功能:创建一个简单的土地时空对象,只有一个闭合环 参数1:日期值(z),土地时空对象的生日值,缺省为空 参数2:直线/园弧,表示输入线的类型,可以相互切换 参数3:闭合,表示此土地时空对象创建完毕 参数4:取消,取消当前土地时空对象创建的所有操作 6) 构建对象 功能:由存在的土地时空对象通过叠加运算生成新的对象,此命令可以连续操作,直接按接受才把结果作为土地时空对象增加到土地时空数据表里 参数1:日期值(z),土地时空对象的生日值,缺省为空 参数2:并集/交集/差集/异域/缓冲,表示空间叠加运算类型,可以随时切换 参数3:接受,表示将运算的结果作为土地时空对象增加到增加到土地时空数据表 参数4:取消,清空空间运算结果 7) 修改对象 功能:修改土地时空对象的生日值。土地时空对象的空间消息修改可通过构建命令生成 参数1:日期值(Z),土地时空对象的新的生日值,缺省为空 参数2:接受,表示将选中的土地时空对象的生日值修改为新值 参数3:取消,取消选中的土地时空对象 8) 删除对象 功能:删除SVG DOM和(或)数据服务层的土地时空对象 参数1:保留数据/删除数据,表示是否同时删除数据服务层的土地时空对象,缺省为保留数据 参数2:取消,表示取消选中的要删除的土地时空对象 9) 信息呈现 功能1:左上角显示所有存在的土地时空生日值,点击相应的生日值,会切换相应的土地时空对象开关显示,日期值为绿色则表示显示,红色表示不显示; 功能2:当点击一具体的土地时空对象时,具有相同生日值的所有土地时空对象不显示; 功能3:显示鼠标经过的土地时空对象的属性:id,生日值,面积,周长 |
-- 作者:柯西 -- 发布时间:5/23/2006 4:46:00 PM -- LZ厉害, 我要是能做多好啊 |
-- 作者:柯西 -- 发布时间:5/23/2006 5:06:00 PM --
大家还没看到呢其实~~LZ表心急~~ |
-- 作者:zhou_gong -- 发布时间:5/23/2006 7:48:00 PM -- 本人正在准备论文答辩,等答辩完会陆续整理公布所有的代码! |
-- 作者:zhou_gong -- 发布时间:5/24/2006 4:47:00 PM -- 大地坐标系与SVG DOM屏幕坐标之间的变换 在SVG DOM里,显示给用户是的真实世界的坐标系,视图的放大、缩小、平移及对空间对象的创建、操作都是基于真实世界的坐标系。这要求设计出一套真实坐标与屏幕坐标之间变换。 在本 选项题中使用的大地坐标系是X轴向北,Y轴向东,称为(realX,realY),单位m,而SVG DOM有两套坐标系,一为屏幕坐标系,X轴向东(右),Y轴向南(下),下称为(clientX,clientY),单位px,原点(0,0)在SVG DOM视窗的左上角, 屏幕坐标系的位置是固定的。另一套坐标为用户坐标系,下称为(userX,userY),初始时, 用户坐标系与屏幕坐标系重叠一致(图12)。在SVG DOM 我们使用的是用户坐标系,通过对用户坐标系旋转、平移、缩放以到达能在SVG DOM的矩形视窗范围内显示用户关心的图象。 图 12 各种坐标系关系 可以看出,用户坐标系逆时针旋转90度后与大地坐标系一致,因此设定大地坐标系与用户坐标为1:1对应关系,现在要解决的是用户坐标系与屏幕坐标系之间的变换关系就行了。要在SVG DOM中显示大地坐标系中比例系数为s(px/m,1真实坐标单位m等于s个屏幕坐标单位px),左上角的大地坐标为(realX0,realY0),则用户坐标系必须做如下顺序变换(图 5-2):(1)平移(-realX0,-realY0);(2)放大S倍;(3)旋转(-90)度。参看图13所示。 图 13 大地坐标系与SVG DOM屏幕坐标系转换 在SVG的规范中,此变换由属性transform描述定义这种坐标变换: transform=”rotate(-90) scale(S) translate(-realX0,-realY0)” 三种坐标的关系为: realX = userX = realX0 - clientY/S; realY = userY = realY0 + clientX/S; 几何解释为:SVG DOM当前呈现视图,左上角的位置是大地坐标(realX0,realY0),S个像素(px)相当于一个大地坐标单位(m)。 每次放大、缩小、平移视窗,都必须重新计算设置realX0,realY0及比例S,可动态维持大地坐标系与屏幕坐标系之间的映射对应关系。 |
-- 作者:zhou_gong -- 发布时间:6/2/2006 2:21:00 PM -- 大家需要设计原理和代码吗? |
-- 作者:luxiaochuan -- 发布时间:6/14/2006 9:41:00 AM -- 没有呀!!! |
-- 作者:zhou_gong -- 发布时间:6/15/2006 12:04:00 AM -- 不好意思,这段时间我北京答辩论文,单位里的服务器停了.因此大家看不到我做的网站,我会尽快恢复. |
-- 作者:Redsnow -- 发布时间:7/5/2006 3:13:00 PM -- 需要,LZ发一份给我。Redsnow2003@tom.com |
-- 作者:ycth1984 -- 发布时间:7/7/2006 4:50:00 PM -- 我也很需要阿 能不能发份给我哈 youthchao1984@yahoo.com.cn |
-- 作者:keeponline -- 发布时间:7/7/2006 5:20:00 PM -- 我也需要一份,谢谢!keeponline75@163.com |
-- 作者:magiclove -- 发布时间:7/10/2006 11:08:00 AM -- no thing! |
-- 作者:bin -- 发布时间:9/5/2006 10:04:00 PM -- 给我也留一份,谢谢 ybzzhp@163.com |
-- 作者:gao1012 -- 发布时间:9/12/2006 11:21:00 AM -- 能不能把原理和代码也给我发一份啊?谢谢! gao1012@126.com |
-- 作者:wuping0206 -- 发布时间:9/25/2006 3:44:00 PM -- 给我也发一份原理和代码吧!多谢多谢! wuping_cb@yahoo.com.cn |
-- 作者:huangwanfu -- 发布时间:9/25/2006 9:16:00 PM -- 谢谢了 我也想要一份 fiv_521@163.com |
-- 作者:baiyun_xu -- 发布时间:9/29/2006 8:44:00 PM -- 能发一份代码给我吗学习学习 baiyun_xu@hotmail.com |
-- 作者:huangwanfu -- 发布时间:9/30/2006 9:42:00 AM -- fiv_521@163.com我也想要一份 |
-- 作者:gao1012 -- 发布时间:10/21/2006 9:31:00 PM -- 能发我一份吗?谢谢! gao1012@126.com |
-- 作者:rab63 -- 发布时间:10/26/2006 10:51:00 AM -- SVG Fans!My God! 密切关注中! |
-- 作者:zhou_gong -- 发布时间:10/26/2006 10:31:00 PM -- 谢谢大家的关注,一直没有时间重新开发WEB服务器,真是不好意思了.给你们一份SVG转换到GEOM的PL/SQL代码,主要是实现了面(包括复杂面的转换,修改一下也可以转换线了): FUNCTION svgpath_to_geom(v_path CLOB) RETURN SDO_GEOMETRY AS v_geom SDO_GEOMETRY; v_geom1 SDO_GEOMETRY; v_geom2 SDO_GEOMETRY; v_elem_info SDO_ELEM_INFO_ARRAY; v_ordinates SDO_ORDINATE_ARRAY; v_xy_count binary_integer; v_path_len binary_integer; i binary_integer; j binary_integer; v_count1 binary_integer := 0; v_count2 binary_integer := 0; v_str VARCHAR2(100); v_command char(1); v_data_count binary_integer; x1 NUMBER; --弧的起点; y1 NUMBER; x2 NUMBER; --弧上点; y2 NUMBER; x3 NUMBER; --弧的终点; y3 NUMBER; s NUMBER; --弧弦长度; h NUMBER; --弧高度; r NUMBER; --弧半径; large_arc NUMBER; --大弧标志=1; sweep_flag NUMBER; --顺时针方向=1; m binary_integer := precision; BEGIN IF v_path IS NULL THEN RETURN NULL; END IF; v_path_len := LENGTH(v_path); IF v_path_len < 10 THEN RETURN NULL; END IF; i := 1; IF get_svgdata(v_path,i) <> 'M' THEN RETURN NULL; END IF; i := 1; LOOP v_str := get_svgdata(v_path,i); EXIT WHEN v_str IS NULL; IF v_str ='M' THEN v_command := 'M'; IF v_elem_info IS NOT NULL THEN v_geom := SDO_GEOM.SDO_XOR(v_geom,reform_geom(v_elem_info,v_ordinates),tolerance); END IF; v_elem_info := SDO_ELEM_INFO_ARRAY(1,0,1,1,2,1); v_ordinates := SDO_ORDINATE_ARRAY(); v_xy_count := 0; ELSIF v_str = 'A' THEN IF v_xy_count = 2 THEN v_elem_info(v_elem_info(3)*3 + 3) := 2; ELSIF v_xy_count <2 THEN RETURN NULL; ELSE IF v_elem_info(v_elem_info(3)*3 + 3) = 1 THEN v_elem_info(3) := v_elem_info(3) + 1; v_elem_info.EXTEND(3); v_elem_info(v_elem_info(3)*3 + 1) := v_xy_count - 1; v_elem_info(v_elem_info(3)*3 + 2) := 2; v_elem_info(v_elem_info(3)*3 + 3) := 2; END IF; END IF; v_command := 'A'; ELSIF v_str = 'L' THEN IF v_xy_count <2 THEN RETURN NULL; ELSE IF v_elem_info(v_elem_info(3)*3 + 3) = 2 THEN v_elem_info(3) := v_elem_info(3) + 1; v_elem_info.EXTEND(3); v_elem_info(v_elem_info(3)*3 + 1) := v_xy_count - 1; v_elem_info(v_elem_info(3)*3 + 2) := 2; v_elem_info(v_elem_info(3)*3 + 3) := 1; END IF; END IF; v_command := 'L'; ELSIF v_str = 'Z' THEN IF v_xy_count <2 THEN RETURN NULL; END IF; IF v_ordinates(1) <> v_ordinates(v_xy_count - 1) OR v_ordinates(2) <> v_ordinates(v_xy_count ) THEN IF v_elem_info(v_elem_info(3)*3 + 3) = 2 THEN v_elem_info(3) := v_elem_info(3) + 1; v_elem_info.EXTEND(3); v_elem_info(v_elem_info(3)*3 + 1) := v_xy_count - 1; v_elem_info(v_elem_info(3)*3 + 2) := 2; v_elem_info(v_elem_info(3)*3 + 3) := 1; END IF; v_ordinates.EXTEND(2); v_xy_count := v_xy_count + 1; v_ordinates(v_xy_count) := v_ordinates(1); v_xy_count := v_xy_count + 1; v_ordinates(v_xy_count) := v_ordinates(2); END IF; v_command := 'Z'; ELSE IF v_command = 'M' OR v_command ='L' THEN v_ordinates.EXTEND(2); v_xy_count := v_xy_count + 1; v_ordinates(v_xy_count) := TO_NUMBER(v_str); v_xy_count := v_xy_count + 1; v_ordinates(v_xy_count) := TO_NUMBER(get_svgdata(v_path,i)); -- DBMS_OUTPUT.PUT_LINE('M:' || x || ',' || y || 'len:' || v_ordinates.COUNT); ELSIF v_command = 'A' THEN x1 := v_ordinates(v_xy_count - 1); y1 := v_ordinates(v_xy_count ); r := TO_NUMBER(v_str); v_str := get_svgdata(v_path,i); v_str := get_svgdata(v_path,i); large_arc := TO_NUMBER(get_svgdata(v_path,i)); sweep_flag := TO_NUMBER(get_svgdata(v_path,i)); x3 := TO_NUMBER(get_svgdata(v_path,i)); y3 := TO_NUMBER(get_svgdata(v_path,i)); s := SQRT((x3 - x1)*(x3 - x1) + (y3 - y1)*(y3 - y1)); IF s > r*2 THEN r := s/2; h := r; ELSE h := r - SQRT(r*r - s*s/4); IF large_arc = 1 THEN h := 2*r - h; END IF; END IF; IF sweep_flag = 1 THEN x2 := (x1 + X3)/2 + h*(y3 - y1)/s; y2 := (y1 + Y3)/2 - h*(x3 - x1)/s; ELSE x2 := (x1 + X3)/2 - h*(y3 - y1)/s; y2 := (y1 + Y3)/2 + h*(x3 - x1)/s; END IF; v_ordinates.EXTEND(4); v_xy_count := v_xy_count + 1; v_ordinates(v_xy_count) := x2; v_xy_count := v_xy_count + 1; v_ordinates(v_xy_count) := y2; v_xy_count := v_xy_count + 1; v_ordinates(v_xy_count) := x3; v_xy_count := v_xy_count + 1; v_ordinates(v_xy_count) := y3; -- DBMS_OUTPUT.PUT_LINE('A:' || r || ','|| x || ',' || y); ELSE RETURN NULL; END IF; END IF; END LOOP; --DBMS_OUTPUT.PUT_LINE(v_ordinates.COUNT); v_geom := SDO_GEOM.SDO_XOR(v_geom,reform_geom(v_elem_info,v_ordinates),tolerance); RETURN v_geom; END; FUNCTION reform_geom(v_elem_info IN OUT NOCOPY SDO_ELEM_INFO_ARRAY,v_ordinates IN OUT NOCOPY SDO_ORDINATE_ARRAY) RETURN SDO_GEOMETRY AS v_geom SDO_GEOMETRY; v_xy_count binary_integer; BEGIN IF (v_elem_info IS NULL) OR (v_ordinates IS NULL) THEN RETURN NULL; ELSE v_geom := SDO_GEOMETRY(NULL,NULL,NULL,NULL,v_ordinates); v_xy_count := v_ordinates.COUNT; IF v_ordinates(1) = v_ordinates(v_xy_count - 1) AND v_ordinates(2) = v_ordinates(v_xy_count ) THEN v_geom.SDO_GTYPE := 2003; ELSE v_geom.SDO_GTYPE := 2002; END IF; IF v_elem_info(3)>1 THEN IF v_geom.SDO_GTYPE = 2002 THEN v_elem_info(2) := 4; ELSE v_elem_info(2) := 1005; END IF; ELSE IF v_geom.SDO_GTYPE = 2002 THEN v_elem_info(2) := 2; v_elem_info(3) := v_elem_info(6); ELSE v_elem_info(2) := 1003; v_elem_info(3) := v_elem_info(6); END IF; v_elem_info.TRIM(3); END IF; v_geom.SDO_ELEM_INFO := v_elem_info; v_geom := SDO_GEOM.SDO_INTERSECTION(v_geom,max_shape,tolerance); RETURN v_geom; END IF; END ; FUNCTION get_svgdata(v_path CLOB,pos IN OUT binary_integer) RETURN VARCHAR2 AS v_data VARCHAR2(100); j binary_integer; BEGIN LOOP j := INSTR(v_path, ' ',pos,1); IF j = pos THEN pos := pos + 1; ELSE EXIT; END IF; END LOOP; IF j = 0 THEN j :=LENGTH(v_path) + 1; END IF; v_data := SUBSTR(v_path,pos,(j - pos)); pos := j + 1; RETURN v_data; END; |
-- 作者:collar_lu -- 发布时间:11/1/2006 10:10:00 AM -- 我也需要一份 luzhihao@sf-auto.com |
-- 作者:duduhap -- 发布时间:11/14/2006 11:18:00 AM -- 能发我一份吗? wendy.li.heb@gmail.com 谢谢! |
-- 作者:tianxian80 -- 发布时间:11/22/2006 8:18:00 AM -- 能把原理和代码给我发一份吗,谢谢!linanhljdq@126.com QQ:504975032 |
-- 作者:hahb -- 发布时间:12/17/2006 9:41:00 AM -- 能给我一份吗?网站打不开 hahb@21cn.com |
-- 作者:fangjunlxj -- 发布时间:12/22/2006 12:03:00 AM -- 不错, 兄弟,能否发份代码及整个设计的完整分析么?fangjun83049@126.com,不胜感激! |
-- 作者:msnow -- 发布时间:12/25/2006 10:56:00 AM -- 给我也发一份啊 hswmxr@tom.com 谢谢! |
-- 作者:lengyuye3 -- 发布时间:12/27/2006 4:01:00 PM -- 能把原理和代码给我发一份吗,谢谢!hziee_yxj@163.com |
-- 作者:zhou_gong -- 发布时间:1/23/2007 1:26:00 PM -- 大家好,网站终于重新开通了:HTTP://222.216.109.154:7799/ 欢迎大家与大家交流,QQ:185006613,zhou_gong_nn@163.com 注:使用前必须安装SVG插件(ADOBE公司的) |
-- 作者:fangxu1979 -- 发布时间:3/26/2007 9:39:00 AM -- lz能给我发一份源码么?谢谢了! 我的信箱是fangxu1979@163.com |
-- 作者:fangjunfj -- 发布时间:3/26/2007 10:46:00 PM -- 不错! 学习!想学习参考下! 楼主:能否发分代码呀到fangjun83049@126.com 不胜感激! |
-- 作者:icey1982 -- 发布时间:6/13/2007 4:00:00 PM -- 能给我一份原理和代码吗?我想学习一下,万分感谢!! 邮箱 icey1982@163.com |
-- 作者:华山之颠 -- 发布时间:6/13/2007 11:27:00 PM -- ghmlww@163.com,谢谢lz |
-- 作者:样条 -- 发布时间:6/14/2007 11:30:00 AM -- 仰视楼主,渴望垂爱,pengkaiquan@tom.com静候 |
-- 作者:rodychan -- 发布时间:6/15/2007 11:01:00 AM -- 楼主是好人哪,我也要,rodychan@163.com,谢谢! |
-- 作者:纷纷0212 -- 发布时间:6/28/2007 11:26:00 AM -- 能否发一份到我的邮箱,lwf0543@163.com,谢谢! |
-- 作者:zhengminxin -- 发布时间:6/29/2007 11:44:00 AM -- LZ的网站还是打不开. |
-- 作者:frogbag -- 发布时间:10/17/2007 9:16:00 AM -- 给我一份,frogbag@163.com 支持 |
-- 作者:followicey1982 -- 发布时间:10/23/2007 3:18:00 PM -- 支持,能给我一份吗,楼主辛苦 icey1982@163.com |
-- 作者:colin190 -- 发布时间:7/20/2009 11:43:00 PM -- 楼主能给我发一份原理和代码么 很需要谢谢呀 colin190@163.com |
-- 作者:zhaling -- 发布时间:3/15/2010 4:28:00 PM -- 楼主,小妹的论文也是有关SVG的。最近遇到坐标转换的问题!在网上看到楼主的帖子,真的是雪中送碳啊!不知道楼主现在还保留着源代码没?希望楼主也能发一份给我!邮箱:yuzhong0920@163.com. 谢谢啦!希望能与楼主多交流交流 |
-- 作者:hjx_221 -- 发布时间:3/16/2010 8:42:00 AM -- 上传过来,大家就可以分享了 谢谢!! |
-- 作者:zhaling -- 发布时间:3/16/2010 4:43:00 PM -- 你好!最近在学这方面的东西!希望楼主也能发我一份!谢谢! 我的邮箱是yuzhong0920@163.com |
-- 作者:hpj123good -- 发布时间:5/24/2010 9:11:00 AM -- 你好,我在做GML到SVG的转换,没有经验,能请教下你吗?我的邮箱:hpj123good@yahoo.com.cn 谢谢 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
226.563ms |