Openlayers项目开发完成后,需要将系统从开发环境转移到生产环境。
开发环境下,Openlayers框架由上百个独立的javascript程序文件组成,通过lib目录中的Openlayers.js
动态加载,便于各个功能模块的开发调试。
Openlayers是一个非常庞大的Web地图客户端应用框架,提供了很多功能模块,通常在开发过程中不会用到全部模块。
将系统中用到的独立javascript程序库组织成一个Openlayers.js文件,可以减少代码冗余,加快加载速度,
同时也便于对代码进行压缩和重编码,在一定程度上保护软件产品。
Openlayers提供了代码组合和压缩工具,在build目录下,使用Python脚本实现。运行该工具,需要安装Python解释器。
build文件夹中提供了三种预设的配置文件,它们是:
full.cfg 组合全部代码
library.cfg 组合主要代码
lite.cfg 组合最小代码
项目配置文件建议使用library.cfg或lite.cfg为模板编写。
配置文件中定义了四种作用不同的标签:
[first] 最前执行的代码文件
[last] 最后执行的代码文件
[include] 在预设配置中加入的代码文件列表
[exclude] 从预设配置中去除的代码文件列表
修改[include]和[exclude]项,生成项目配置文件。
在命令提示符下,输入python build.py mycfg my.js(如果是windows系统,请将python.exe加入系统Path路径)
生成的my.js就是生产版本的Openlayers库文件,将my.js部署到生产环境,测试各项功能是否运行正常。
build过程对代码文件做了压缩处理,压缩率在40%左右,程序结构没有做任何改动。
如果你想保护自己的代码,建议使用其他工具进行二次处理,这里推荐Google的Jscompiler,Google的很多项目都使用该工具进行代码压缩和优化。
Google Jscompiler的使用方法:
从http://code.google.com/intl/zh-CN/closure/compiler/下载最新版本。
Google Jscompiler采用Java编写,需要安装Java 6.0运行时或开发包,如果没有安装请到Oracle网站下载。
解压下载的zip包,生成compiler-latest目录,其中compiler.jar是主程序,帮助包含在README中。
执行Google Jscompiler请新打开一个命令提示符窗口,输入:
java -jar compiler.jar --help 显示所有可选参数说明。
压缩编码单个javascript程序文件,请使用下面的命令:
java -jar compiler.jar --js=in.js --js_output_file=out.js
压缩合并多个javascript程序文件,请使用下面的命令:
java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js
经过Google Jscompiler处理后的Openlayers库文件可以再减少20-30%的大小,生成的文件经过测试没有任何问题。
Google Jscompiler会自动对代码进行分析,自动筛选出逻辑上不可能到达的代码,给出提示。
Google Jscompiler会对代码逻辑流程重新组合和优化,提高浏览器上的执行效率。
经过Google Jscompiler重新编码后,Web客户端的运行速度有明显提升。
posted @
2010-08-04 14:44 天狼 阅读(3487) |
评论 (1) |
编辑 收藏
第三步:加入GeoTools类库
使用Eclipse打开example工程下的pom.xml文件,替换成以下内容并保存:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.geotools.demo</groupId>
<artifactId>example</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>example</name>
<url>http://maven.apache.org</url>
<properties>
<geotools.version>2.6.3</geotools.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-main</artifactId>
<version>${geotools.version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven2-repository.dev.java.net</id>
<name>Java.net repository</name>
<url>http://download.java.net/maven/2</url>
</repository>
<repository>
<id>osgeo</id>
<name>Open Source Geospatial Foundation Repository</name>
<url>http://download.osgeo.org/webdav/geotools/</url>
</repository>
</repositories>
</project>
不要关闭Eclipse,回到“命令提示符”窗口,在工程目录下键入mvn eclipse:eclipse,
例如: F:\project\example>mvn eclipse:eclipse
等待执行完成。
其间Maven会自动下载GeoTools的gt-main类库,请保持网络连接。
切换到Eclipse,使用refresh命令刷新example工程,你可以看到GeoTools已经加入工程中。
打开geotools.demo.example.App类,做如下修改:
public static void main( String[] args )
{
System.out.println( "Hello GeoTools:" + GeoTools.getVersion() );
}
编译执行,如果看到 Hello GeoTools:2.6-3,恭喜你!大功告成!
第四步:加入绘图界面和Shape插件
打开pom.xml文件,在 <dependencies></dependencies>之间加入以下内容:
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-swing</artifactId>
<version>${geotools.version}</version>
</dependency>
不要关闭Eclipse,回到“命令提示符”窗口,执行:F:\project\example>mvn eclipse:eclipse
其间Maven会自动下载GeoTools类库,请保持网络连接。
执行完成后,切换到Eclipse,使用refresh命令刷新example工程。
运行QuickStart类,如果demo路径中没有找到Quickstart.java,可以自己创建。
源文件在http://svn.osgeo.org/geotools/tags/2.6.3/demo/example/src/main/java/org/geotools/demo/Quickstart.java 直接复制代码,编译运行即可。
中文乱码问题
用QuickStart打开shape文件,如果文件中包含中文属性信息,中文将无法正确显示,这是GeoTools和GeoServer的常见问题。
在这里,不需要更改ShapefileDataStore类的源代码,我们可以直接修改QuickStart类,将
FileDataStore store = FileDataStoreFinder.getDataStore(file);
FeatureSource featureSource = store.getFeatureSource();
更改为
ShapefileDataStore shpDataStore=new ShapefileDataStore(file.toURL());
shpDataStore.setStringCharset(Charset.forName("GBK"));
FeatureSource featureSource = shpDataStore.getFeatureSource();
即可显示汉字。
posted @
2010-05-18 16:12 天狼 阅读(3397) |
评论 (3) |
编辑 收藏
Geotools官方网站上有一个很好Quickstart教程 http://geotools.org/quickstart.html
通过学习该教程,可以快速生成开发环境,我们选择Eclipse作为集成开发工具。
第一步:安装和配置Java和Maven
这部分属于常识性内容,Quickstart没有详细说明。
下载Java SDK 1.5或1.6,运行安装程序自动安装。手工设置JAVA_HOME环境变量,指向Java SDK安装目录。
下载Maven,当前版本是2.2.1(必须使用2.1以上版本),解压到硬盘指定目录。将Maven所在目录手工添加到PATH环境变量中。
检查JDK和Maven是否安装,打开“命令提示符”窗口,键入mvn -version,
例如:F:\project\example>mvn -version
如果返回以下信息,说明JDK和Maven正确安装。
Apache Maven 2.2.1 (r801777; 2009-08-07 03:16:01+0800)
Java version: 1.6.0_03
Java home: C:\Program Files\Java\jdk1.6.0_03\jre
Default locale: zh_CN, platform encoding: GBK OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"
如果返回错误信息,请检查环境变量是否设置正确。
第二步:设置工程文件目录
回到“命令提示符”窗口,转到工程起始目录下,键入mvn archetype:generate,
例如 F:\project>mvn archetype:generate
等待执行完毕。在此过程中Maven会创建工程文件和目录,并自动通过互联网下载需要的库文件,请保持网络连接。
运行到快要结束时,需要填入几个参数:
1、输入文档类型:选择默认的快速启动文档类型 15。注:Maven 2.2.1版本的默认值不是15,可以使用新默认值。
2、填入以下值:
groupId: org.geotools.demo
artifactId: example
version: 1.0-SNAPSHOT
package: org.geotools.demo.example
回到“命令提示符”窗口,按下面操作:
F:\project>cd example
F:\project\example>mvn eclipse:eclipse
等待执行完成。
启动Eclipse,打开Windows>Preferences菜单,找到Java>Build Path>Classpath Variables配置页面,添加一个新类路径,键入名称M2_REPO,加入类文件路径。
对于Windows XP在C:\Documents and Settings\<当前用户名>\.m2\repository,对于Windows Vista在: C:\Users\<当前用户名>\.m2\repository,
对于Linux和Mac在: ~/.m2/repository
导入刚才创建的example工程,选择File>Import菜单,选“Choose Existing Projects into Workspace”, 单击Next按钮,选择工程路径F:\project\example,完成。
posted @
2010-05-18 16:00 天狼 阅读(5116) |
评论 (4) |
编辑 收藏
Google Maps基站定位
(转载至http://www.cnblogs.com/psunny/archive/2009/10/22/1587779.html)
如果你在你的手机装过Google Mobile Maps,你就可以发现只要你的手机能连接GPRS,即使没有GPS功能,也能定位到你手机所在的位置, 只是精度不够准确。在探讨这个原理之前,我们需要了解一些移动知识,了解什么是MNC/LAC/Cell ID。
- Mobile Network Code(MNC)
移动网号码,中国联通CDMA系统的MNC为03,中国移动的为00。
- Mobile Country Code(MCC)
移动用户所属国家代号:460
- Location Area Code(LAC)
地区区域码,用来划分区域,一般一个小地方就一个LAC,大地方就
- Cell Tower ID(Cell ID)
CellID代表一个移动基站,如果你有基站数据,查CellID你就可以知道这个基站在哪里,移动公司或者警察通过这个知道你是在哪个基站范围打的移动电话。
这些信息有什么用呢? 通过这些信息可以知道你的手机是从哪个国家,区域和哪个基站接入移动网络的。所以有些防盗手机丢失后,会发一些类
似"MCC:460;MNC:01;LAC:7198:CELLID:24989"内容的短信到你指定号码就是这个用途,通过这些信息可以从移动查到你的
被盗手机在哪里出现过。不过知道了也没用,中国人口这么密集,就是在你身边你也不知道谁是小偷:)
这些信息从哪里来呢,一般的手机系统都提供相应的API来获取这些信息(Tower Info),比如Window SmartPhone 或Mobile就是通过RIL.dll里的API来取得,每个手机操作系统不一样,相关的信息可以查相关资料。
得到了这些信息,如果没有基站信息表,得到了这些信息也不知道在哪,因为只有移动运营商有相关的信息,除非你是运营商或者警察才能得到这些信息。是
不是我们就查不到相应的数据呢,当然不是,强大的Google就有,这里就要提到Google Mobile Maps
API,里面囊括了比较全的基站信息,中国的也有,就是偏远地区的有没有就不知道了。Google Mobile
Maps本身就是使用的这些信息,感兴趣可以试一试,没有GPS模块也能定位到你手机位置,但精度不大,取决于基站的位置离你多远。
同样我们自己也可以开发相应的手机应用来定位,只要调用Google现成的API(Secret API)"http://www.google.com/glm/mmap“.
需要注意的是,必须是受信任的Midlet才可以取到这些数据。也就是说Midlet必须经过签名上述代码才可以工作,否则获取到的是NULL。。
下面是从别的地方看来的,没做过测试,供参考。
a) Nokia = System.getProperty("com.nokia.mid.imei");
System.getProperty("com.nokia.IMEI");
System.getProperty("phone.imei");
b) Samsung
System.getProperty("com.samsung.imei");
c) Sony-Ericsson
System.getProperty("com.sonyericsson.imei");
IMSI: IMSI全称是International Mobile Subscriber Identification
Number,移动用户身份码。当手机开机后,在接入网络的过程中有一个注册登记的过程,系统通过控制信道将经加密算法后的参数组传送给客户,手机中的
SIM卡收到参数后,与SIM卡存储的客户鉴权参数经同样算法后对比,结果相同就允许接入,否则为非法客户,网络拒绝为此客户服务。IMSI唯一的标志了
一个SIM卡。
IMEI: IMEI即International Mobile Equipment
Identity(国际移动设备身份)的简称,也被称为串号,它唯一标志了一台移动设备,比如手机。
IMEI码一般由15位数字组成,绝大多数的GSM手机只要按下“*#06#”,IMEI码就会显示出来。其格式如下: TAC即Type
Approval Code,为设备型号核准号码。FAC即Final Assembly Code,为最后装配号码。 SNR即Serial
Number,为出厂序号。 SP即Spare Number,为备用号码。
有时候,我们在应用中需要获取IMSI或者IMEI号用于将应用程序和手机或SIM卡绑在一起。获取的方式在各不同厂商的各款手机上不尽相同,在motorola RAZR E6 上采用System.getProperty()获取。相应程序代码是:
String imei= System.getProperty("IMEI"); //for E6
if ( null == imei )
imei = System.getProperty("phone.IMEI");
String imsi = System.getProperty("IMSI"); //for E6
if ( null == imsi )
imei = System.getProperty("phone.IMSI");
g.drawString("IMEI: "+imei, 10, 50, Graphics.LEFT | Graphics.TOP);
g.drawString("IMSI: "+imsi, 10, 70, Graphics.LEFT | Graphics.TOP);
参考地址:
http://blog.csdn.net/phiger/archive/2009/07/22/4371922.aspx
http://hi.baidu.com/lfcomputer/blog/item/0520e0d37a410a3c970a16c1.html
http://wiki.forum.nokia.com/index.php/CS000947_-_Getting_Cell_ID_in_Java_ME
posted @
2009-12-03 16:30 天狼 阅读(2983) |
评论 (4) |
编辑 收藏
不需要安装任何插件,使用openlayers 2.8可在Web页面上实现高级编辑功能。
作为一个功能强大的WebGIS客户端,openlayers提供了添加、删除点、线、面的功能。
对于节点捕获、分割、旋转等高级编辑功能,openlayers也提供了相应的例子。
节点捕获的例子 http://dev.openlayers.org/releases/OpenLayers-2.8/examples/snapping.html
分割的例子 http://dev.openlayers.org/releases/OpenLayers-2.8/examples/split-feature.html
节点捕获和分割的例子 http://dev.openlayers.org/releases/OpenLayers-2.8/examples/snap-split.html
旋转、缩放的例子 http://dev.openlayers.org/releases/OpenLayers-2.8/examples/modify-feature.html
控制缩放的例子 http://dev.openlayers.org/releases/OpenLayers-2.8/examples/resize-features.html
动画旋转的例子 http://dev.openlayers.org/releases/OpenLayers-2.8/examples/rotate-features.html
posted @
2009-11-20 15:14 天狼 阅读(2200) |
评论 (0) |
编辑 收藏
给图层添加高度数据,需要根据实体几何类型分别处理。对于面,例如行政区界或建筑物,需要创建一个高度模板文件。
对于线(点),例如架空电缆,高程将直接从图形数据中读取。
GeoServer 1.7.1及以上版本支持输出三维面的KML(KMZ),1.7.6及以上版本支持输出三维线(点)的KML(KMZ)。
›发布三维面图层:
用Geoserver发布三维面的过程非常简单,测试中我们使用Geoserver自带的示例图层topp:states。
1、用记事本新建一个文本文件(高度模板文件),命名为height.ftl。
2、在文件中加入一行脚本,格式为${ATTRIBUTE.value},ATTRIBUTE是属性字段的名称。
例如states图层有属性字段PERSONS,记录每个州的人口,输入${PERSONS.value?number/100},把高度和人口数建立关系。
3、将height.ftl复制到Geoserver的/data/featureTypes/states/目录下。
4、进入Geoserver地图预览页面,找到topp:states,选择KML,打开Google Earth浏览效果。
效果图1
官方原文见:http://geoserver.org/display/GEOSDOC/04-Height+Templates
作为练习,可以根据官方文档
http://demo.opengeo.org:8080/display/GEOSDOC/05-Super+Overlays+and+Extrudes+with+Building+Data,
发布纽约曼哈顿的建筑物,浏览三维城市效果。
效果图2
›发布三维线图层:
三维线不使用height.ftl文件,因为一条线有两个以上的节点,每个节点可能有不同的高度值,高程直接存放在图形数据(Geometry)的Z坐标中。
Oracle Spatial、PostgreSQL(PostGIS)等数据库都支持存储三维坐标。
Geoserver可以直接发布三维线,测试中使用Oracle Spatial(10g)和PostgreSQL(8.3)作为数据源。
1、在Oracle Spatial(10g)或PostgreSQL(8.3)中存入包含Z坐标的三维线数据,作为测试,可用直接SQL语句插入数据。
2、在Geoserver中发布该图层。
3、进入Geoserver地图预览页面,找到刚才发布的图层,选择KML,打开Google Earth浏览效果。
需要注意的是,默认KML(KMZ)在Google Earth中的实际效果是三维面。
经过查阅KML文档,要实现三维线,需要在KML链接后加上可选参数format_options=extrude:0,例如将
http://192.98.151.200:8080/geoserver/wms/kml?layers=topp:TESTL
改为
http://192.98.151.200:8080/geoserver/wms/kml?layers=topp:TESTL&format_options=extrude:0
效果图3
Google KML Version 2.2已经获得OGC批准,成为国际标准的数据存储格式。ESRI、INTERGRAPH、MAPINFO在其最新版本软件中提供KML格式输出支持。
Google定义的KML不仅可以包含三维高程数据,还能加入四维时间数据。
本文只涉及三维数据的发布和展示,相关技术文档请参考Google KML和Geoserver KML页面。
Google KML页面:http://code.google.com/apis/kml/documentation/
Geoserver KML页面:http://geoserver.org/display/GEOSDOC/KML+KMZ+Output http://geoserver.org/display/GEOSDOC/Google+Earth+Features
本文涉及的软件环境为:Geoserver 1.7.7、Geoserver 2.0、Google Earth 5.1、Oracle 10.2.0.3、PostgreSQL 8.3.7
posted @
2009-10-27 10:40 天狼 阅读(6741) |
评论 (2) |
编辑 收藏
2009年10月23日 Geoserver 2.0 正式发布
posted @
2009-10-26 15:55 天狼 阅读(372) |
评论 (0) |
编辑 收藏
一.安装postgis
(1)首先到postgresql的官方网站(www.postgresql.org)上下载最新版的开源数据库postgresql,我当前下载的最新安装包是postgresql-8.3.6-1-windows.exe
(2)运行该exe,按照向导安装之,在安装过程中最好关闭防火墙,以及监控;另外最好将安装目录设置为NTFS分区的盘上.
(3)安装完成后提示你是否在退出时配置application stack builder,这里购选上它,然后点finish
(4)进入application stack builder向导后,选择postgresql 8.3 on port 5432,点next
(5)在application list中沟选中你要安装的application,这里必须沟选postgis-pg83-setup-1.3.5-1.exe
(6)下一步,选择下载服务器,下载完成后开始安装相应的application
(7)在安装时要注意,有两处都要设置密码,不要设置密码为空.
(8)这样根据向导就可以成功安装postgis了
安装postgis过程中可能会出现"Error opening file for writing:
c:\program files\PostgreSQL\8.3\bin\libiconv-2.dll"的提示,这里我们可以忽略之
二.向postgis导入shapefile数据
(1)安装后运行pgadmin III,右击postgresql 8.3(localhost)服务器,连接之,这里的密码是你安装时设置的密码,务必牢记
(2)连接后,我们发现postgis安装后自动给我们生成了一个数据template_postgis,我们将要导入的数据就需要放到这个数据库中.
(3)运行命名提示符cmd.exe,将其转向C:\Program Files\PostgreSQL\8.3\bin(或者将cmd.exe复制到该目录下)如下:
C:\Program Files\PostgreSQL\8.3\bin>
(4)首先将shp生成对应的sql脚本,键入以下字符
C:\Program Files\PostgreSQL\8.3\bin>shp2pgsql -W "GBK" D:\CampusGISProject\new_p
ku_vector\viwpt.shp viwpt > D:\CampusGISProject\new_pku_vector\viwpt.sql
这里的-W
"GBK"代表字符编码的转换,D:\CampusGISProject\new_pku_vector\viwpt.shp则是要生成sql脚本的
shp文件.viwpt是创建数据表的表名,>不能少,D:\CampusGISProject\new_pku_vector
\viwpt.sql则是要生成SQL文件的绝对目录
生成成功后命令提示符会显示如下:
Shapefile type: Point
Postgis type: POINT[2]
(5)然后我们执行sql语句,执行该SQL语句文件,导入数据到数据库template_postgis中
C:\Program Files\PostgreSQL\8.3\bin>psql -d template_postgis -f D:\CampusGISProj
ect\new_pku_vector\viwpt.sql postgres
其中 template_postgis是数据库名,postgres是该数据库的用户
执行成功后,刷新该数据库,就可以看到新生成的数据表viwpt
这样viwpt.shp数据就成功导入到了postgis中了
posted @
2009-10-20 15:00 天狼 阅读(832) |
评论 (0) |
编辑 收藏
从MapGuide官方网站(https://mapguide.osgeo.org)下载MapGuide Open Source Windows安装包
MgServerSetup-2.0.2.3011.exe
MgWebServerExtensionsSetup-2.0.2.3011.exe
安装包中已经包含了apache和tomcat,但是没有包含Java SDK。需要单独安装Java SDK 5.0以上版本,并设置JAVA_HOME和JRE_HOME环境变量。
安装MapGuide Server和MapGuide Web Server Extensions,安装时选择Java环境,另外两种环境是PHP和DOTNET。
下载java环境示例文件javaviewersample.zip,解压到 MapGuideOpenSource安装目录\WebServerExtensions\www 目录下,
在解压后的文件夹 javaviewersample 找到文件 readme.txt,按其中的说明进行配置,注意修改路径。
进入 MapGuideOpenSource安装目录\WebServerExtensions\Tomcat\bin 目录,执行 startup.bat,启动Tomcat。
如果Tomcat无法启动,检查Java环境变量是否正确。
下载示例数据包 Sheboygan.mgp,复制到 MapGuideOpenSource安装目录\Server\Packages 目录下。
打开站点管理程序,地址为 http://ip:8008/mapguide/mapadmin/login.php,登录用户名Administrator,密码admin,注意大小写。
如果输入了正确的用户名和密码,仍然无法登录,检查MapGuide Server服务是否运行。
选择管理页面左侧的导航条,选择ManagePackages,然后在右侧列表选中Sheboygan.Mgp,点击Load Package标签,等待Package加载完成。
注意:如果IP地址为127.0.0.1或localhost,可能无法执行Load Package命令。
在浏览器中输入 http://ip:8008/mapguide/javaviewersample/ajaxtiledviewersample.jsp, 查看运行效果。
posted @
2009-08-31 15:19 天狼 阅读(1637) |
评论 (0) |
编辑 收藏
将 Oracle Spatial 与 Google Earth 集成
此篇文章将向您展示如何使用Oracle Locator/Oracle Spatial、GeoServer 和Google Earth 创建具有定位功能的强大的无缝商务智能系统。最后,我希望您在阅读完本练习之后 ...
官方链接:http://www.oracle.com/technology/global/cn/pub/articles/lokitz-spatial-geoserver.html
posted @
2009-08-20 21:19 天狼 阅读(467) |
评论 (0) |
编辑 收藏