{"id":19747620,"url":"https://github.com/codingmiao/georewrite","last_synced_at":"2026-05-16T07:32:46.367Z","repository":{"id":57745353,"uuid":"77439173","full_name":"codingmiao/georewrite","owner":"codingmiao","description":"重写geoserver发送到h2的sql，以实现自定义数据源","archived":false,"fork":false,"pushed_at":"2017-04-25T09:02:22.000Z","size":63,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-10T21:09:51.129Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codingmiao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-12-27T08:30:06.000Z","updated_at":"2024-10-21T16:10:06.000Z","dependencies_parsed_at":"2022-08-30T17:41:37.203Z","dependency_job_id":null,"html_url":"https://github.com/codingmiao/georewrite","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingmiao%2Fgeorewrite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingmiao%2Fgeorewrite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingmiao%2Fgeorewrite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingmiao%2Fgeorewrite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codingmiao","download_url":"https://codeload.github.com/codingmiao/georewrite/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241078485,"owners_count":19905867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T02:18:21.851Z","updated_at":"2026-05-16T07:32:46.320Z","avatar_url":"https://github.com/codingmiao.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# georewrite 快速实现geoserver的自定义数据源\nemail：[liuyu@wowtools.org][1]\n\n\n----------\n\n\n背景\n==\n\n加入我们需要从自定义的文件、远程服务等地方获取数据并在geoserver中发布为图层，或者是塞一套奇怪的查询业务到geoserver里，该怎么办呢？\n\ngeoserver提供了自定义数据源的方式，不过略复杂，基本流程是这样的：\n\n 1. 创建一个类实现接口org.geotools.data.DataStoreFactorySpi，及相应的一套DataStore；\n 2. 在目录META-INF/services/下增加文件org.geotools.data.DataStoreFactorySpi，内容为刚创建的类的完全类名；\n 3. 将编译好的classes复制到\u003cGeoServer install\npath\u003e\\webapps\\geoserver\\WEB-INF\\classes下，或者复制打包的jar文件到\u003cGeoServer install path\u003e\\webapps\\geoserver\\WEB-INF\\lib目录下。\n\n但是这套弄下来，好像有点复杂哎-_-\n\n那么，来点简单的吧，georewrite这个项目可以把原先写好的Java工程直接丢到geoserver中作数据源，你只需作一点小小的工作:\n\n 1. 到geoserver官网下载h2数据库的插件并安装到你的geoserver；\n 2. 把你原来Java工程的输出结果封装成SimpleResultSet对象，SimpleResultSet其实就是套了一层壳的ArrayList。\n\n\n----------\n\n\n快速开始\n====\n\n1、安装h2插件\n------\n\n \n到geoserver官网下载h2插件jar及h2的jdbc驱动jar，比如2.10版的:[http://geoserver.org/release/2.10.0/][2]，放到geoserver\\WEB-INF\\lib目录下，重启geoserver\n\n![p1][3]\n \n成功安装后，在geoserver中新建数据源中能看到H2的数据源:\n\n![p2][4]\n\n2、在项目中添加maven依赖\n------\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.wowtools\u003c/groupId\u003e\n            \u003cartifactId\u003egeorewrite\u003c/artifactId\u003e\n            \u003cversion\u003e1.11\u003c/version\u003e\n        \u003c/dependency\u003e\n\n3、编写自定义查询器:\n------\n\n编写一个类实现GeoSqlQueryer，主要代码如下：\n\n    @Override\n\tpublic ResultSet query(Connection conn, String columnPart, String fun, String pg) throws SQLException {\n\t\tSimpleResultSet rs;\n\t\t//利用父类中的方法构造一个SimpleResultSet对象\n\t\tString[] columns = columnPart2columnArr(columnPart);\n\t\trs = buildSimpleResultSetByColumns(columns);\n\t\t\n\t\t/**TODO\n\t\t 将原项目中的查询方法放在这，返回一个list，\n\t\t 并通过rs.addRow(obj[])方法将查询结果放到SimpleResultSet中\n\t\t**/\n\t\t\n\t\treturn rs;\n\t}\n\t\n这是一个完整的例子：[TestQueryer.java][8]\n\n 4. 配置和启动\n 参照[StartDemo.java][9]编写配置信息和启动类，然后运行启动类，自定义的数据源就配置完了，最后在geoserver中配置好数据源，即可使用：\n![此处输入图片的描述][10]\n(注意到图中CQL填写了 TCODE='HELLO',才触发了自定义的查询器，也可通过TCODE来传递更复杂的查询条件，来实现各种变态的业务逻辑)\n\n\n  [1]: liuyu@wowtools.org\n  [2]: http://geoserver.org/release/2.10.0/\n  [3]: http://7xlvcv.com1.z0.glb.clouddn.com/6f1fa4c0-dd52-4a52-bbf2-e91143549761\n  [4]: http://7xlvcv.com1.z0.glb.clouddn.com/405f47fa-81fb-44d0-ac3a-39a153dd8359\n  [5]: https://github.com/codingmiao/catframe\n  [6]: https://github.com/codingmiao/h2\n  [7]: https://github.com/codingmiao/georewrite/releases\n  [8]: https://github.com/codingmiao/georewrite/blob/master/georewrite/src/test/java/org/wowtools/georewrite/test/TestQueryer.java\n  [9]: https://github.com/codingmiao/georewrite/blob/master/georewrite/src/test/java/org/wowtools/georewrite/test/StartDemo.java\n  [10]: http://7xlvcv.com1.z0.glb.clouddn.com/1ef3364e-cff1-4772-b85b-974bcdfd4c6b\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodingmiao%2Fgeorewrite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodingmiao%2Fgeorewrite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodingmiao%2Fgeorewrite/lists"}