当前位置: 首页 > news >正文

网站代理游戏电子商务网站建设.pdf

网站代理游戏,电子商务网站建设.pdf,网站整体结构,深圳商城网站设计多少钱前言#xff1a; 业务上通过GIS软件将空间数据导入到数据库时#xff0c;因为不同的数据来源和软件设置#xff0c;可能导入到数据库的空间表坐标系是各种各样的。 如果要把数据库空间表发布到geoserver并且统一坐标系#xff0c;只是在geoserver单纯的设置坐标系只是改了…前言 业务上通过GIS软件将空间数据导入到数据库时因为不同的数据来源和软件设置可能导入到数据库的空间表坐标系是各种各样的。 如果要把数据库空间表发布到geoserver并且统一坐标系只是在geoserver单纯的设置坐标系只是改了定义并没有实际执行坐标转换所以需要在数据库层面统一好坐标系再发布到geoserver。 1,开发前准备 1.1,数据准备 要准备测试数据可以参考 地理空间表的导入。 我这里使用arcgis pro导入sqlserver如果导入postgresql需要企业数据库才行也就是需要离线证书比较麻烦。 我先导入一个4524的投影坐标测试转换为4490 1.2,环境准备 坐标转换需要先读取数据库的空间表原坐标系在根据原坐标系转换为目标坐标系。 使用的转换工具是geotool。 pom引入必要的依赖geotools版本是24.3 dependencygroupIdorg.geotools/groupIdartifactIdgt-main/artifactIdversion${geotools.version}/version /dependency dependencygroupIdorg.geotools/groupIdartifactIdgt-jdbc/artifactIdversion${geotools.version}/version/dependencydependencygroupIdorg.geotools.jdbc/groupIdartifactIdgt-jdbc-sqlserver/artifactIdversion${geotools.version}/version/dependencydependencygroupIdorg.geotools.jdbc/groupIdartifactIdgt-jdbc-postgis/artifactIdversion${geotools.version}/version/dependency2,读取空间表原坐标系 要使用geotool读取空间表的坐标系需要先使用geotool提供的方法创建DataStore,官网有一个示例代码 https://docs.geotools.org/latest/userguide/library/jdbc/sqlserver.html java.util.Map params new java.util.HashMap(); params.put( dbtype, sqlserver); //巨坑 params.put( host, localhost); params.put( port, 4866); params.put( user, geotools); params.put( passwd, geotools); DataStore dataStoreDataStoreFinder.getDataStore(params);这是一个坑官方说明是版本14之后支持Microsoft JDBC driverdbtype应该就不需要使用jtds前缀了实际上不加必报错 先写一个测试方法传入数据库连接信息表名数据库类型返回原表坐标系 import org.geotools.data.DataStore; import org.geotools.data.DataStoreFinder; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.jdbc.JDBCDataStoreFactory; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.referencing.crs.CoordinateReferenceSystem;public static int getEpsg(DatabaseConfig databaseConfig, String tableName) {DataStore dataStore null;try {MapString, Object params new HashMap(); // params.put(JDBCDataStoreFactory.SCHEMA.key, dbo);if (DatabaseType.SQLSERVER.equals(databaseConfig.getDatabaseType())) {params.put(JDBCDataStoreFactory.DBTYPE.key, jtds-sqlserver);} else {params.put(JDBCDataStoreFactory.DBTYPE.key, jtds-postgis);}params.put(JDBCDataStoreFactory.HOST.key, databaseConfig.getHost());params.put(JDBCDataStoreFactory.PORT.key, databaseConfig.getPort());params.put(JDBCDataStoreFactory.DATABASE.key, databaseConfig.getDatabaseName());params.put(JDBCDataStoreFactory.USER.key, databaseConfig.getUsername());params.put(JDBCDataStoreFactory.PASSWD.key, databaseConfig.getPassword());dataStore DataStoreFinder.getDataStore(params);if (dataStore null) {System.out.println(Failed to connect to the database.);return -1;}// Get the feature source for the aa tableSimpleFeatureSource featureSource dataStore.getFeatureSource(tableName);// Get the feature type and its CRSSimpleFeatureType featureType featureSource.getSchema();CoordinateReferenceSystem crs featureType.getCoordinateReferenceSystem();// Print the CRS detailsif (crs ! null) {System.out.println(Spatial Reference System: crs.getName());System.out.println(EPSG Code: crs.getName().getCode());System.out.println(crs : crs.toString());//抽取原表坐标系int result extractEPSG(crs.toString());System.out.println(Result: result);return result;}// Close the data storedataStore.dispose();return 0;} catch (IOException e) {log.error(查询空间表坐标系异常{}, e.toString());return -1;} finally {if (dataStore ! null) {dataStore.dispose();}}}然后看一下解析出来坐标信息 Spatial Reference System: EPSG:CGCS2000 / 3-degree Gauss-Kruger zone 36 EPSG Code: CGCS2000 / 3-degree Gauss-Kruger zone 36 crs : PROJCS[CGCS2000 / 3-degree Gauss-Kruger zone 36, GEOGCS[China Geodetic Coordinate System 2000, DATUM[China 2000, SPHEROID[CGCS2000, 6378137.0, 298.257222101, AUTHORITY[EPSG,1024]], AUTHORITY[EPSG,1043]], PRIMEM[Greenwich, 0.0, AUTHORITY[EPSG,8901]], UNIT[degree, 0.017453292519943295], AXIS[Geodetic latitude, NORTH], AXIS[Geodetic longitude, EAST], AUTHORITY[EPSG,4490]], PROJECTION[Transverse_Mercator, AUTHORITY[EPSG,9807]], PARAMETER[central_meridian, 108.0], PARAMETER[latitude_of_origin, 0.0], PARAMETER[scale_factor, 1.0], PARAMETER[false_easting, 36500000.0], PARAMETER[false_northing, 0.0], UNIT[m, 1.0], AXIS[Northing, NORTH], AXIS[Easting, EAST], AUTHORITY[EPSG,4524]]我想要的是之前我们在arcgis pro中看到的投影坐标位于crs信息的最后一个EPSG内针对crs信息写一个方法解析出epsg public static int extractEPSG(String input) {Pattern pattern Pattern.compile(AUTHORITY\\[\EPSG\,\(\\d)\\\]);Matcher matcher pattern.matcher(input);int lastEPSG 0;while (matcher.find()) {lastEPSG Integer.parseInt(matcher.group(1));}return lastEPSG;}3,执行坐标转换 我这里目标坐标系写死因为系统需要插入到sqlserver中的都要统一坐标系所以直接在原表更新了。 如果要保留原表信息可以复制表在副本表更新坐标。 sqlserver与postgresql中空间函数有些差异需要区分处理。 /*** 地理空间表坐标转换** param sourceEpsg 原表坐标系* param config 数据库连接信息* param tableName 表名 dbo.ROAD* param geometryColumn 空间字段*/public static void epsgTo4490(int sourceEpsg, DatabaseConfig config, String tableName, String geometryColumn) {String sourceEPSG EPSG: sourceEpsg;String targetEPSG EPSG:4490;ResultSet resultSet null;try (Connection connection DatabaseConnection.getConnection(config)) {//拼接sqlString sql;if (config.getDatabaseType().SQLSERVER.equals(config.getDatabaseType())) {sql SELECT geometryColumn .STAsText() as Shape,OBJECTID FROM tableName;} else {//ST_AsText(columns)sql SELECT ST_AsText( geometryColumn ) as Shape,OBJECTID FROM tableName;}// 使用连接执行 SQL 查询操作PreparedStatement statement connection.prepareStatement(sql);resultSet statement.executeQuery();// Create MathTransformCRSFactory crsFactory new CRSFactory();org.osgeo.proj4j.CoordinateReferenceSystem sourceCRS crsFactory.createFromName(sourceEPSG);org.osgeo.proj4j.CoordinateReferenceSystem targetCRS crsFactory.createFromName(targetEPSG);CoordinateTransformFactory transformFactory new CoordinateTransformFactory();CoordinateTransform transform transformFactory.createTransform(sourceCRS, targetCRS);// Process each row of the result setwhile (resultSet.next()) {String shape resultSet.getString(Shape);int objectId resultSet.getInt(OBJECTID);// Convert the string representation of the geometry to a JTS Geometry objectWKTReader reader new WKTReader();Geometry geometry reader.read(shape);// Perform the coordinate transformation for each coordinate in the geometryfor (int i 0; i geometry.getCoordinates().length; i) {Coordinate srcCoord geometry.getCoordinates()[i];ProjCoordinate targetCoord new ProjCoordinate(srcCoord.getX(), srcCoord.getY());transform.transform(targetCoord, targetCoord); // 将源坐标转换为目标坐标并保存在 targetCoord 中srcCoord.setX(targetCoord.x);srcCoord.setY(targetCoord.y);}// Convert the transformed geometry back to a stringWKTWriter writer new WKTWriter();String transformedShape writer.write(geometry);// Update the original table with the transformed geometry using the primary keyString updateSQL;if (DatabaseType.SQLSERVER.equals(config.getDatabaseType())) {updateSQL UPDATE tableName SET geometryColumn ? WHERE OBJECTID ?;} else {//UPDATE public.ROAD SET Shape ST_SetSRID(ST_GeomFromText(Shape), 4490);updateSQL UPDATE tableName SET geometryColumn ST_SetSRID(?,4490) WHERE OBJECTID ?;}statement connection.prepareStatement(updateSQL);statement.setString(1, transformedShape);statement.setInt(2, objectId);statement.executeUpdate();statement.clearParameters();}if (DatabaseType.SQLSERVER.equals(config.getDatabaseType())) {//修复多边形错误 UPDATE dbo.ROAD SET Shape Shape.MakeValid()String updateSQL UPDATE tableName SET geometryColumn geometryColumn .MakeValid();statement connection.prepareStatement(updateSQL);statement.executeUpdate();//指定坐标系 UPDATE dbo.ROAD SET Shape.STSrid4490updateSQL UPDATE tableName SET geometryColumn .STSrid4490;statement connection.prepareStatement(updateSQL);statement.executeUpdate();}// Close the resourcesstatement.close();resultSet.close();} catch (SQLException e) {log.error(坐标转换中sql执行异常{}, e.getMessage());} catch (ParseException e) {log.error(坐标转换中异常{}, e.getMessage());}}上述代码只是sqlservcer亲测多种坐标系转换正常且转换后的表发布到geoserver和arcgis都能正常预览且聚焦位置正确postgresql还有待测试 4,单元测试 public static void main(String[] args) throws SQLException {String tableName ROAD;//测试sqlserverDatabaseConfig databaseConfig new DatabaseConfig(DatabaseType.SQLSERVER, 127.0.0.1, 1433, 测试中文数据库, sa, xxxx);//测试postgresql//DatabaseConfig databaseConfig new DatabaseConfig(DatabaseType.POSTGRESQL, 127.0.0.1, 5432, postgis20, postgres, xxxxxxx);int sourceEpsg TableEpsgUtil.getEpsg(databaseConfig, tableName);System.out.println(原表坐标 sourceEpsg);//如果获取到原表坐标并且不是4490,则执行转换if (sourceEpsg 0 sourceEpsg ! 4490) {epsgTo4490(sourceEpsg, databaseConfig, tableName, Shape);System.out.println(坐标转换完成);}}
http://www.w-s-a.com/news/269619/

相关文章:

  • 网站的流量怎么赚钱经销做网站都有什么好处
  • 如何做好网站首页企术建站
  • 杭州网站建设咨询蓝韵网络聊城有制作网站的吗
  • 网站开发注意的事项深圳企业网站
  • 哈尔滨网站制作哪里专业网站建设维护有哪些内容
  • 花的网站建设规划书网络营销培训
  • 又拍云wordpress全站cdn无锡做网站品牌公司
  • 计算机网络工程网站建设黄石建设信息网站
  • 旅游网站开发毕业设计开题报告青岛网站建设服务公司
  • 人员调动在网站上怎么做网站开发课程意见和建议
  • 卓训网是个什么网站wordpress命令执行时间
  • 网站建设需要做哪些工作网片焊接
  • 网站优化方案dedecms win8风格网站模板
  • 企业如何制作网站管理系统慈溪住房和城乡建设部网站
  • 青岛网站建设有哪些公司区块链网站开发价格
  • 怎么设置网站的logo微信公众号的h5网站开发6
  • 粉色的网站绍兴市建设局网站
  • 个人网站的基本风格是wordpress 模板选择
  • 南昌专业做网站公司有哪些广州市住房城乡建设部门户网站
  • 福州网站建设团队淘宝联盟网站怎么建设
  • 福州企业网站建站模板国内黑色风格的网站
  • 好看的网站首页设计android移动开发
  • 域名注册完成后如何做网站域名 删除 wordpress
  • wordpress xml导入大小东莞seo优化方案
  • 网站建设效益网站销售怎么做的
  • 利用网站空间做代理设计方案的格式范文
  • 无锡建设工程质量监督网站遵义做手机网站建设
  • 衡阳商城网站制作ps做网站首页规范尺寸
  • 微信网站应用开发营销推广的方案
  • 广州做网站商城的公司制作一个app的完整流程