
2008年6月12日
试运行地址
http://219.153.20.6:8080/cqcbd/build.htm
调试阶段,使用普通PC作为服务器(P4 2.6 1G内存),速度可能较慢。
电信机房128M共享线路。
posted @
2008-06-12 13:19 天狼 阅读(106) |
评论 (0) |
编辑 收藏

2007年12月21日
google免费提供了数量巨大的卫星地图资源。
利用openlayers可以将google maps卫星地图和我们自己的地图合并在一起,当然自己地图的坐标系必须正确,
google maps使用标准的WGS84经纬度坐标。
添加google maps卫星图层分两步完成。
1、在htm页面中引用google maps javascript库:
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAgwXwXyUIfjoFVrD_utlccRRLOu__vN-h4YvLvUUNjkkj2EdVKBSWwGWJ6bCTmu6Mt9dUF86wrzrqNg"
type="text/javascript"></script>
注意:获得key需要先注册一个google帐号,然后申请一个免费google maps key,key和你的服务器ip绑定。
2、在js脚本里添加以下几句:
try {
var satellite = new OpenLayers.Layer.Google( "卫星图" , {type: G_SATELLITE_MAP, 'maxZoomLevel':zoom} ); //zoom分为20级,可取0-19,显示城市市区一般可取18
map.addLayer(satellite);
} catch(e) {
alert("无法连接到google maps,卫星地图将不能显示。"); //当网络不正常时,处理异常。
}
注意:如果只使用openlayers开发,不需要使用google maps api。
经google官方人士证实,google maps接口现在和将来都会一直免费提供,只要符合许可协议。
posted @
2007-12-21 16:53 天狼 阅读(1368) |
评论 (1) |
编辑 收藏

2007年11月26日
很好的交互性:前一个测试例子中,鼠标移动到单位标记上,可以弹出信息窗口,在窗口中显示单位名称。
通过openlayers,可以获得WFS图层的feature对象,包括feature的属性feature.attributes对象和feature的空间feature.geometry对象。feature.geometry对象提供多种属性和方法。需要注意的是feature.attributes对象,它包含了所有的属性信息。要得到属性信息,请使用这样的格式feature.attributes['cq:LNAME'],cq是geoserver中的数据仓库名,LNAME是unit图层中的一个属性名,注意这里是严格区分大小的,是否支持中文字段没有测试。
重要提示:openlayer2.5版已经修正的属性数据获取方法,直接使用feature.attributes[属性字段名],不再使用feature.attributes['cq:LNAME']。
posted @
2007-11-26 11:08 天狼 阅读(1173) |
评论 (0) |
编辑 收藏
openlayers提供了几十个示例,虽然每个示例都很简单,但却很具有代表性,值得初学者学习。
现在我想做一个测试,包含多个图层、缩放条、工具条、鼠标位置、弹出窗口,其中图层分别来自geoservr
提供的WMS和WFS服务接口。
主要代码如下:
样式定义,定义地图大小,工具条位置和替换按钮图片。
<style type="text/css">
#map {
width: 640px;
height: 475px;
border: 1px solid black;
}
.olControlPanel div {
display:block;
position: absolute;
top: 0px;
left: 190px;
width: 60px;
height: 23px;
margin: 5px;
}
.olControlPanel .olControlMouseDefaultsItemActive {
background-image: url("/openlayers/img/Pan.gif");
}
.olControlPanel .olControlMouseDefaultsItemInactive {
background-image: url("/openlayers/img/PanSelected.gif");
}
.olControlPanel .olControlZoomBoxItemInactive {
width: 60px;
height: 23px;
position: absolute;
top: 0px;
left: 250px;
background-image: url("/openlayers/img/ZoomInSelected.gif");
}
.olControlPanel .olControlZoomBoxItemActive {
width: 60px;
height: 23px;
position: absolute;
top: 0px;
left: 250px;
background-image: url("/openlayers/img/ZoomIn.gif");
}
.olControlPanel .olControlSelectFeatureItemInactive {
width: 60px;
height: 23px;
position: absolute;
top: 0px;
left: 310px;
background-image: url("/openlayers/img/InfoSelected.gif");
}
.olControlPanel .olControlSelectFeatureItemActive {
width: 60px;
height: 23px;
position: absolute;
top: 0px;
left: 310px;
background-image: url("/openlayers/img/Info.gif");
}
</style>
JS代码,核心部分。
<script src="/openlayers/OpenLayers.js"></script>
<script type="text/javascript">
<!--
//定义全局变量
var map, layer, selectControl, selectedFeature;
//关闭弹出窗口的函数
function onPopupClose(evt) {
selectControl.unselect(selectedFeature);
}
//构造弹出窗口的函数
function onFeatureSelect(feature) {
selectedFeature = feature;
popup = new OpenLayers.Popup.Anchored("chicken",
feature.geometry.getBounds().getCenterLonLat(),
new OpenLayers.Size(250,75),
"<div style='font-size:.8em'>" + feature.attributes['cq:LNAME'] +"</div>",
null, true, onPopupClose);
feature.popup = popup;
map.addPopup(popup);
}
//销毁弹出窗口的函数
function onFeatureUnselect(feature) {
map.removePopup(feature.popup);
feature.popup.destroy();
feature.popup = null;
}
//地图和页面加载函数
function init(){
//设置地图缩放范围和缩放等级,0级比例尺最小
map = new OpenLayers.Map( $('map'), { maxScale: 500, minScale: 500000, numZoomLevels: 5 });
//加载行政区图层,WMS栅格图像
layer = new OpenLayers.Layer.WMS( "District",
"http://192.98.151.17:8081/geoserver/wms", {layers: 'cq:GMAP_DISTRICT'} );
map.addLayer(layer);
//加载水系图层,WMS栅格图像
layer = new OpenLayers.Layer.WMS( "Water",
"http://192.98.151.17:8081/geoserver/wms", {layers: 'cq:GMAP_LAKE', 'transparent': true, format: 'image/png' } );
map.addLayer(layer);
//加载单位图层,WFS矢量数据,由openlayers在客户端绘制,注意:数量太多会导致速度缓慢
layer = new OpenLayers.Layer.WFS( "Unit",
"http://192.98.151.17:8081/geoserver/wfs", {typename: 'cq:GPOI_GOV'},
{
typename: 'unit',
featureNS: 'http://www.openplans.org/cq',
extractAttributes: true,
maxfeatures: 10,
textAttrToDisplay: 'lname'
} );
map.addLayer(layer);
//在地图上添加按钮和工具条
zb = new OpenLayers.Control.ZoomBox();
var panel = new OpenLayers.Control.Panel({defaultControl: zb});
selectControl = new OpenLayers.Control.SelectFeature(layer, {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect, hover: true});
panel.addControls([
new OpenLayers.Control.MouseDefaults(), zb, selectControl
]);
map.addControl(panel);
map.addControl(new OpenLayers.Control.PanZoomBar({zoomWorldIcon:false}));
map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));
map.addControl(new OpenLayers.Control.MousePosition());
//设置初始地图的中心坐标和缩放等级
map.setCenter(new OpenLayers.LonLat(106.5, 29.5), 3);
}
// -->
</script>
HTML代码
<body onload="init()">
<h1>OpenLayers Test</h1>
<div id="panel"></div>
<div id="map"></div>
<textarea style="display:none" id="serialize" cols="96" rows="10"/>
</body>
posted @
2007-11-26 10:58 天狼 阅读(1958) |
评论 (4) |
编辑 收藏

2007年8月8日
Geoserver 1.5.2 已于8月3日正式发布,项目组正邀请全球开发者测试。
本次更新修正了70多个bug,可以想象工作量是非常大的!
接下来进行升级测试,将现有系统(基于geoserver1.4.0, tomcat5.0.28, oracle9.2.0.4),升级到1.5.2。升级过程很简单,替换文件即可。
重新启动tomcat,进入geoserver管理界面,没有问题,原来的十几个图层加载成功。
打开浏览器地图客户端,迟迟没有地图显示出来,查看tomcat的运行log纪录,出错了:
:380031 [严重] org.geotools.data.jdbc.JDBC1DataStore - Error Performing SQL query: SELECT "LNAME", "POPNAME", "CLASS", "DISTRICT", "ADDRESS", "TEL_NO", "MI_STYLE", "MI_PRINX", "GEOLOC", "CID", "TID", "PID", "HTTP_ADR", "RP_PID", "MEMO", "ID" FROM "GPOI_BANK" WHERE SDO_RELATE("GEOLOC",MDSYS.SDO_GEOMETRY(2003,8307,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(106.3398675279321,29.35768529955373,106.7158359115559,29.67623870044627)),'mask=anyinteract querytype=WINDOW') = 'TRUE'
java.sql.SQLException: ORA-29902: 执行 ODCIIndexStart() 例行程序中出错
ORA-13373: 测量数据不支持类型为 Extent 的元素
ORA-06512: 在"MDSYS.SDO_INDEX_METHOD_9I", line 368
ORA-06512: 在line 1
把查询放到sqlplus中执行,错误依旧。仔细检查查询语句,发现MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3)和以前的版本不同,1.4是MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),错误原因就在1和3上。
1表示直线联结
2表示弧线联结
3表示混合联结,而oracle9i版本不支持3这个参数,所以出现"ORA-13373: 测量数据不支持类型为 Extent 的元素"错误。
换用Oracle10g(10.2.0.1)测试,地图可以正常显示,没有错误。
知道问题原因就好办了,改用以前的oracle插件一切ok。
紧接着测试WCS接口,这是我最关心的功能。
根据文档和示例,先后添加了DEM(来自美国USGS)和Tiff卫星照片,客户端显示正常。
DEM分级颜色通过dem.sld设定,无法实现三维浏览。
Tiff文件预先配准,采用矢量图层坐标系统。
posted @
2007-08-08 15:40 天狼 阅读(797) |
评论 (1) |
编辑 收藏

2007年6月15日
最近忙着装修房子,很久没有更新博客了。
6月9日,Geoserver 1.5.1正式发布,这是一个值得期待的版本。
从Geoserver 1.4到1.5.1的升级过程比较简单,没有遇到特别的问题。
地图渲染速度没有太大变化,没有从1.3到1.4那种速度上的跳跃感。
平台变化:
1、内核升级到Geotools2.3.2;
2、支持多种格式的WCS发布,很有用的功能;
3、引入OpenLayer,为客户端开发提供一种新的选择。
开发者可以使用OpenLayer直接发布地图,减少了开发工作量。相对而言,mapbuilder是一个强大又复杂的系统。
测试中发现的问题:
1、读取oracle空间表,渲染地图出现错误。
分析原因:官方提供的oracle扩展包gt2-oracle-spatial-2.3.2.jar和驱动程序ojdbc14.jar在9i(9204)数据库上有问题,ojdbc14.jar是10g的驱动程序。使用老版本的gt2-oracle-spatial和9i的JDBC驱动,问题解决。估计官方提供的oracle扩展包只适用于10g。
2、对oracle空间表进行WFS查询,返回的XML结果集有问题,导致WFS查询失败。
例如某查询应该返回:
<gml:featureMember>
<cq:CBD_BUILDING
fid="CBD_BUILDING.161">
<cq:ID>161</cq:ID>
<cq:LNAME>都市广场</cq:LNAME>实际返回的XML为:
<gml:featureMember>
<gml:CBD_BUILDING
fid="CBD_BUILDING.161">
<gml:ID>161</gml:ID> <gml:LNAME>都市广场</gml:LNAME>PostGIS和ArcSDE没有类似的bug。
posted @
2007-06-15 14:44 天狼 阅读(1082) |
评论 (1) |
编辑 收藏

2007年4月19日
geoserver 1.5开始,停止使用mapbuilder编写的测试页面,转而使用openlayers。
openlayers提供了mapbuilder没有的导航工具条,提供了地图分幅(分块)和预读取功能,这些都是实际应用中非常有用的。
地图分幅(分块)和预读取功能可以大大加快地图浏览速度,不用每次从服务器读取新的地图块。
posted @
2007-04-19 20:44 天狼 阅读(784) |
评论 (1) |
编辑 收藏

2007年2月6日
Hibernate版本3.2.0beta9a
开发环境Eclipse3.2.1+MyEclipse5+HibernateTools3.2
前几天还好好的程序,今天突然出现Could not find datasource错误。
郁闷了一下午,终于找到了罪魁祸首。
可以正常运行的hibernate.cfg.xml文件:
<session-factory>
<property name="show_sql">false</property>
<property name="connection.datasource">java:comp/env/jdbc/odbcq</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<mapping resource="com/tecom/cbd/model/CbdBuilding.hbm.xml" />
</session-factory>
出现错误的hibernate.cfg.xml文件(MyEclipse5自动生成):
<session-factory>
<property name="show_sql">false</property>
<property name="connection.datasource">java:comp/env/jdbc/odbcq</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="jndi.class"></property>
<property name="connection.password"></property>
<property name="connection.username"></property>
<property name="jndi.url"></property>
<mapping resource="com/tecom/cbd/model/CbdBuilding.hbm.xml" />
</session-factory>
posted @
2007-02-06 16:42 天狼 阅读(1639) |
评论 (0) |
编辑 收藏

2007年1月31日
geoserver 1.4.0测试工作完成,发现的问题已经解决,正好有一新项目进入开发阶段,决定使用sun jdk1.4.2+apache2.2.4+tomcat5.0.28+geoserver 1.4.0+mapbuilder 1.0.1组合.
我们使用apache2.2 和tomcat5.0 整合搭建了一套运行平台,网上搜索了很多apache2.2 和tomcat5.0整合的文章,由于版本等原因,搞了2天才弄出来。
本文可以为需要做apache2.2 和tomcat5.0 整合的朋友做参考。
经过测试该平台的性能比济南项目(IIS6+Resin3.0.19)提升50-100%。
使用软件
Sun Java2SDK 1.4.2 (j2sdk-1_4_2_11-windows-i586-p.exe)
Sun JAI 1.1.2 SDK (jai-1_1_2_01-lib-windows-i586-jdk.exe) geoserver需要
Sun ImageIO 1.0 SDK (jai_imageio-1_0_01-lib-windows-i586-jdk.exe) geoserver需要
Apache 2.2 (apache_2.2.4-win32-x86-no_ssl.msi) 注意:必须使用2.2.3及以上版本
Tomcat 5.0 (jakarta-tomcat-5.0.28.exe)
mod-jk 1.2 (mod_jk-apache-2.2.3.so) 注意:必须匹配apache版本
1、安装Java2SDK-1_4_2,过程省略。
2、安装Apache 2.2,过程省略。使用端口80,将mapbuilder整个目录(地图客户端支持包)复制到 Apache安装目录/htdocs下。
3、安装Tomcat 5.0,过程省略。使用端口8081,将geoserver整个目录(地图引擎)和cqcbd整个目录(应用系统)复制到 Tomcat安装目录/webapps下。将cqcbd.xml文件复制到 Tomcat安装目录/conf/Catalina/localhost下,cqcbd.xml文件包含数据库连接池的ResourceLink信息。
4、将mod_jk-apache-2.2.3.so复制到 Apache安装目录/modules下。
5、修改 Apache安装目录/conf/httpd.conf
添加mapbuilder虚拟目录:(mapbuilder不使用tomcat解析。使用tomcat时,xsl中输出的汉字会显示为?号,原因不明。)
Alias /mapbuilder "D:/Apache2.2/htdocs/mapbuilder"
<Directory "D:/Apache2.2/htdocs/mapbuilder">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
添加apache_tomcat连接器mod-jk配置文件路径:
# Tomcat mod-jk
Include conf/mod_jk.conf
6、在Apache安装目录/conf/下新建文件mod_jk.conf,内容如下:
# Load mod_jk module. Specify the filename
# of the mod_jk lib you’ve downloaded and
# installed in the previous section
#加载mod_jk模块
LoadModule jk_module modules/mod_jk-apache-2.2.3.so
# Where to find workers.properties
JkWorkersFile conf/workers2.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# 请求分发配置,可以配置多项
JkMount /cqcbd/* loadbalancer
#把/cqcbd/目录下的所有请求转发给集群负载均衡器(最终到达tomcat)
#注意,不要把mapbuilder目录下的请求转发给Tomcat
#关掉主机Lookup,提高系统性能。
HostnameLookups Off
7、在Apache安装目录/conf/下新建文件workers2.properties,内容如下:
worker.list=loadbalancer
# Define the first node...
worker.server1.port=8009
worker.server1.host=192.98.151.7 #tomcat服务器ip地址
worker.server1.type=ajp13
worker.server1.lbfactor=1
worker.server1.local_worker=1
worker.server1.cachesize=1000
worker.server1.cache_timeout=600
worker.server1.socket_keepalive=1
worker.server1.socket_timeout=0
worker.server1.reclycle_timeout=300
worker.server1.retries=3
# Define the second node...
# Now we define the load-balancing behaviour
worker.loadbalancer.type=lb
worker.retries=3
worker.loadbalancer.balance_workers=server1
worker.loadbalancer.sticky_session=true
worker.loadbalancer.sticky_session_force=true
8、Tomcat不需要特别配制,确认 Tomcat安装目录/conf下的server.xml文件包含:
<Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
</Connector>
整合完成!测试系统:
访问http://192.98.151.7,出现Tomcat目录列表。
访问http://192.98.151.7/geoserver,出现Geoserver目录列表。
访问http://192.98.151.7/mapbuilder,出现mapbuilder首页。
访问http://192.98.151.7/cqcbd,出现CBD管理系统首页。
说明:测试时只使用了一台服务器。
posted @
2007-01-31 17:19 天狼 阅读(2700) |
评论 (2) |
编辑 收藏

2007年1月20日
上周测试了Geoserver1.4.0正式版,比起Geoserver1.3.2有了较大变化,最大变化是引入spring框架以及内核升级到Geotools2.2。测试中发现地图渲染速度明显提升,特别是读取oracle spatial的速度至少提升了100%(难以置信)。同时也发现WFS查询存在严重问题,回想当初Geoserver1.3.0版本也存在不少bug,再等等吧!期待Geoserver1.4.1早日发布。
posted @
2007-01-20 21:50 天狼 阅读(2206) |
评论 (3) |
编辑 收藏