如何创建EPSG Geodetic Parameter Dataset for Postgresql 8

如何创建EPSG Geodetic Parameter Dataset for Postgresql 8

环境: Glassfish, GEOSERVER2.1, POSTGRESQL 8.4, POSTGIS1.4

首先有几个问题

1. GeoServer 2.0.0 和 GeoServer 2.0.1 在Glassfish上的SRS LIST不全

2. GeoServer 2.0.0 和 GeoServer 2.0.1 在TOMCAT上的SRS LIST是完整的

3. GeoServer 2.0.1的MIX模式CHALANGE模式搞反了。

可能原因分析:

    gt-epsg-hsql-2.6.0.jar以及gt-epsg-hsql-2.6.1.jar在Glassfish工作不正常

    据说gt-epsg-hsql-2.6.2.jar有修正这个问题


在这里 http://docs.codehaus.org/display/GEOTDOC/07+Referencing对几种EPSG插件的用途有说明


    * EPSG HSQL Plugin: will unpack an hsql database containing the official epsg database into a temp directory, a great solution for desktop applications.
    * EPSG WKT Plugin: uses an internal property file and is lightweight rather than official and correct. A great solution for applets
    * EPSG Postgres Plugin: uses the official epsg database which you have to load into PostgreSQL yourself. A great solution for Java EE applications.
    * EPSG Access Plugin: directly use an the official epsg database as distributed. A great solution for windows users.
    * EPSG Oracle Plugin: currently unsupported



现在的目标是在POSTGRESQL上建立EPSG Geodetic Parameter Dataset


 要做如下几步工作:

   1. 下载最新的数据集

               EPSG官方支持MS Access, mySQL, Oracle, PostgreSQL几种数据库, 当然hsql是某些人支持的。

               http://www.epsg.org/databases/epsg-v7_4sql-PostgreSQL.zip

    2. 解压后有五个文件

epsg-v7_4_readme.doc                 

epsg-v7_4_readme.pdf
EPSG_v7_4.mdb_Tables_PostgreSQL.sql

EPSG_v7_4.mdb_FKeys_PostgreSQL.sql

EPSG_v7_4.mdb_Data_PostgreSQL.sql    

  3. 问题来了,

       执行EPSG_v7_4.mdb_Tables_PostgreSQL.sql与EPSG_v7_4.mdb_FKeys_PostgreSQL.sql 都无问题

       执行EPSG_v7_4.mdb_Data_PostgreSQL.sql (399325行)会有很多问题。

       几个原因:

           数据库编码

           数据库约束关系
       猜测一个文本文件的编码不是一件有趣的事情,我试了几个常用编码后就放弃了,开始请GOOLE大婶帮忙,最终在一个好像是德文的网站上查到有人建立 EPSG的数据库,用的编码是LATIN9, 好了

       重新建立建立一个编码是LATIN9的数据库(注意采用模板template0,因为template0编码一致)

 


       (这里可考虑不执行EPSG_v7_4.mdb_FKeys_PostgreSQL.sql直接执行 EPSG_v7_4.mdb_Data_PostgreSQL.sql, 但是仍然会报一堆错误 )   

       分解EPSG_v7_4.mdb_Data_PostgreSQL.sql,注意查看表间约束关系,对手工操作 查看来说 还是有些麻烦的。

        只能说EPSG的这个脚本太不严谨了。

        有接近四十万行的数据,最终依靠耐心,把脚本分解为十几个,依次执行了,只有一个例外epsg_coordinatereferencesystem,因 为比较特殊是自我引用的约束,

        对这个表的数据 就多执行几次,忽略他的约束报错,大概执行了四五遍吧,数据全部进去了,继续执行,

        直到最后


UPDATE epsg_alias
SET object_table_name = replace(object_table_name, CHAR(182), CHAR(10));
UPDATE epsg_alias
SET alias = replace(alias, CHAR(182), CHAR(10));

        .................

        这里也是无法执行

        对postgresql来讲char()是一个函数,而char(182)也是会执行失败,比如运行select char(182)会报错(可能是POSTGRESQL版本升级后的函数调用有些差异)


ERROR:  syntax error at end of input
LINE 2: select char(123)
                        ^

        加上SCHEMA 再执行 select pg_catalog.char(182)


ERROR:  "char" out of range

        测试最小范围 select pg_catalog.char(127) 超过127会报out of range的错误,

        看来INT4 转为 CHAR的范围就是最大到127

        那到底182代表一个什么字符CHAR呢,查到是"¶",看起来很眼熟吧,字符串处理如果做过 换行符TAB替换的估计看了有些眼熟,

        我也忘了,就直接修改最后的SQL语句吧 注意你的编辑器编码仍然选择LATIN 9 (ISO-8859-15)


    最后的SQL改成

UPDATE epsg_alias
SET object_table_name = replace(object_table_name, '¶', pg_catalog.char(10));
UPDATE epsg_alias
SET alias = replace(alias, '¶', pg_catalog.char(10));

      ..... .....

 执行..完成。

 

总结: 到最终完成epsg-v7_4sql-PostgreSQL.zip发现了一个接一个的错误,原因可能是最高版本的POSTGRESQL不支持,

但 究其原因,这个版本是不太严谨的,无论编码还是数据库脚本顺序,不过依据他的数据量,如果靠手工整理好的顺序,还是花了一下午时间。

如果 先处理最后的脚本修改char(182)为'¶', 修改char(10)为pg_catalog.char(10)然后,先不建立约束关系,建立表后直接导入数据,然后再建立约束关系,还是可能节约一些时 间的(不过还得整理约束关系导入的顺序,也是个麻烦事)

不过 最终还是很高兴的,建立一个POSTGRESQL 8.4的EPSG Geodetic Parameter Dataset,想来可能是世界上第一个哦,YY一下,

然后要继续玩我的 GLASSFISH3下的GEOSERVER2了

 

这个... 最终要谢谢的是GOOGLE大婶!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值