SpringBoot de SuperMap iObjects Java implementa servicios GIS

Autor: Ying

1. Antecedentes

  SuperMap iObjects JavaEs una plataforma de desarrollo GIS basada en componentes para desarrolladores de sistemas de aplicaciones GIS. Tiene una potente gestión de datos geográficos, edición, visualización, análisis y otras funciones, y tiene una gran facilidad de uso y abundantes recursos de ayuda, adecuados para el desarrollo rápido de sistemas de aplicaciones GIS a gran escala.

  Este artículo presenta principalmente cómo usar SuperMap iObjects Javacomponentes como base funcional y combinar el marco de trabajo de código abierto SpringBoot para crear rápidamente servicios de fondo GIS.

2. Preparación del entorno

2.1 Entorno del sistema

Sistema operativo apoyo ilustrar
ventanas Requisitos de configuración de hardware recomendados para la plataforma Windows: Procesador: superior a 2,00 GHz Requisitos de memoria: 2 GB Capacidad del disco duro: 100 GB
linux Requisitos mínimos de hardware para la plataforma Linux: CPU: 1,00 GHz (arquitectura x86) Memoria: 512 MB Espacio en disco duro: 40 GB

2.2 Entorno de desarrollo

software Versión enlace de descarga ilustrar
iObjetos Java 10i y superior Dirección de descarga de iObjects Java SuperMap proporciona oficialmente el almacén Maven del componente Java de iObjects , que se puede utilizar directamente
IDEA 2020.3.4 y superior Dirección de descarga de IDEA
SpringBoot 2.7.x * IDEA puede seleccionar directamente la versión requerida al crear un nuevo proyecto SpringBoot
Pavonearse 3.0.0 * Configurado en el archivo pom.xml del proyecto SpringBoot

3. Pila de tecnología

3.1. Supermapa iObjects Java

  Los componentes Java de SuperMap iObjects proporcionan funciones GIS profesionales para servicios en segundo plano.

3.2. SpringBoot

  SpringBoot es un marco para que los desarrolladores desarrollen rápidamente servicios en segundo plano de Java.

3.3. Pavonearse

  Swagger es un documento de interfaz RESTFUL en línea de generación automática + software de función de prueba funcional.Después de que SpringBoot integre Swagger, los desarrolladores y usuarios de servicios pueden utilizarlo para aprender y probar las interfaces de servicio.

4. Cree un nuevo proyecto SpringBoot

  • IDEA crea un nuevo proyecto SpringBoot
    IDEA nuevo proyecto SpringBoot.png

  • Configurar Maven y proyectar la versión de Java
    IDEA crea un nuevo proyecto SpringBoot para configurar las versiones de Maven y Java.png

  • Configurar módulos dependientes de SpringBoot
    IDEA crea un nuevo módulo de dependencia de configuración del proyecto SpringBoot.png

5. Configurar el módulo Swagger

  springfox-boot-starter es una biblioteca SpringBoot que brinda a las aplicaciones Spring la capacidad de crear documentación de Swagger de forma rápida y sencilla. La documentación de Swagger puede ayudar a los desarrolladores a comprender y utilizar mejor las API RESTful.

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
  • Modificar la configuración del archivo application.properties

      Dado que la estrategia de coincidencia de ruta predeterminada de la versión SpringBoot 2.7.x es que path-pattern-matcherdespués de que el proyecto SpringBoot actual integre Swagger 3.0.0, si el programa de servicio se ejecuta directamente, se generará la excepción "Failed to start bean 'documentationPluginsBootstrapper'; excepción anidada..." , por lo que se debe agregar la siguiente configuración al archivo application.properties para modificar la estrategia de coincidencia de ruta:

    spring.mvc.pathmatch.matching-strategy=ant_path_matcher
    

6. Configure los componentes Java de SuperMap iObjects

  SuperMap proporciona oficialmente el almacén supermap-maven (https://maven.supermap.io) , que contiene SuperMap iServer, SuperMap iObjects y otros Jars relacionados y bibliotecas de terceros dependientes. Al agregar la biblioteca oficial de SuperMap en el archivo pom, los usuarios pueden agregar directamente las bibliotecas utilizadas en el desarrollo y sus dependencias al proyecto maven, lo cual es conveniente para que los usuarios resuelvan problemas como la falta de dependencias al usar la biblioteca oficial de SuperMap.

  • Agregue el almacén remoto SuperMap Maven

      Agregue el nodo de repositorio SuperMap Maven en el pom.xml del proyecto SpringBoot.

    <repositories>
      <repository>
        <id>supermap</id>
        <url>https://maven.supermap.io/</url>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
        <releases>
          <enabled>true</enabled>
        </releases>
      </repository>
    </repositories>
    
  • Agregue la dependencia de SuperMap iObjects Java

      Agregue dependencias de componentes en pom.xml del proyecto SpringBoot SuperMap iObjects Javay agregue dependencias com.supermap.data de la siguiente manera.

    <dependency>
      <groupId>com.supermap</groupId>
      <artifactId>com.supermap.data</artifactId>
      <version>11.0.1-21501-98146</version>
    </dependency>
    
  • Configurar las variables de entorno del componente Java de iObjects

      Dado que SuperMap iObjects Javala función GIS central del componente se implementa en base a C++ y luego se invoca a través de JNI, solo agregar el paquete jar del componente iObjects Java dependiente a través de Maven provocará la falta de bibliotecas dependientes de C++ Por lo tanto, es necesario configurar el entorno dependiente del componente iObjects Java en la máquina del entorno de desarrollo.

    Sistema operativo Configurar variables de entorno
    ventanas Agregue el directorio de instalación de SuperMap iObjects Java\Bin ruta a la variable de entorno del sistema PATH
    linux export LD_LIBRARY_PATH=Directorio de instalación de SuperMap iObjects Java\Bin export PATH=$LD_LIBRARY_PATH:$PATH

7. Realización de funciones GIS

  En el proyecto SpringBoot donde se agregaron las dependencias del componente Java de iObjects, las funciones comerciales GIS requeridas por el proyecto se pueden implementar directamente en el marco SpringBoot en función de las funciones principales GIS proporcionadas por el componente Java de iObjects. A continuación, se toma como ejemplo un código de implementación de un servicio de datos simple.

  • Crear un nuevo controlador de servicios de datos (DataServiceController)

    @Api(tags = "数据服务")
    @RestController
    @RequestMapping("/data")
    public class DataServiceController {
          
           }
    
  • espacio de trabajo abierto

    @Operation(summary = "打开工作空间", description = "打开文件型工作空间")
    @ApiImplicitParams({
          
          
      @ApiImplicitParam(name = "workspacePath", value = "文件型工作空间路径", dataType = "String", dataTypeClass = String.class)
    })
    @GetMapping("/openWorkspace")
    public boolean openWorkspace(String workspacePath) {
          
          
      if (workspace != null) {
          
          
        workspace.close();
        workspace.dispose();
        workspace = null;
      }
    
      File file = new File(workspacePath);
      String workspaceName = file.getName();
      String[] splitted = workspaceName.split("\\.");
      workspaceName = "";
      for (int i = 0; i < splitted.length - 1; i++) {
          
          
        workspaceName = workspaceName.concat(splitted[i]);
        if (i < splitted.length - 2) {
          
          
          workspaceName = workspaceName.concat(".");
        }
      }
    
      WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo(workspacePath);
      workspaceConnectionInfo.setName(workspaceName);
    
      workspace = new Workspace();
      return workspace.open(workspaceConnectionInfo);
    }
    
  • Obtener una lista de nombres de fuentes de datos

    @Operation(summary = "获取数据源列表", description = "获取当前工作空间内的数据源列表")
    @GetMapping("/getDatasourceNames")
    public ArrayList<String> getDatasourceNames() {
          
          
      ArrayList<String> datasourceNames = new ArrayList<>();
      if (workspace != null) {
          
          
        Datasources datasources = workspace.getDatasources();
        for (int i = 0; i < datasources.getCount(); i++) {
          
          
          Datasource datasource = datasources.get(i);
          String datasourceAlias = datasource.getAlias();
          datasourceNames.add(datasourceAlias);
        }
      }
      return datasourceNames;
    }
    
  • Obtener una lista de nombres de conjuntos de datos

    @Operation(summary = "获取数据集名称列表", description = "根据输入的数据源名称获取数据集名称列表")
    @ApiImplicitParams({
          
          
      @ApiImplicitParam(name = "datasourceName", value = "数据源名称", dataType = "String", dataTypeClass = String.class)
    })
    @GetMapping("/getDatasetNames")
    public ArrayList<String> getDatasetNames(String datasourceName) {
          
          
      ArrayList<String> datasetNames = new ArrayList<>();
      if (workspace != null) {
          
          
        Datasources datasources = workspace.getDatasources();
        if (datasources.contains(datasourceName)) {
          
          
          Datasource datasource = datasources.get(datasourceName);
          Datasets datasets = datasource.getDatasets();
          for (int i = 0; i < datasets.getCount(); i++) {
          
          
            Dataset dataset = datasets.get(i);
            datasetNames.add(dataset.getName());
          }
        }
      }
      return datasetNames;
    }
    
  • Obtener los registros del conjunto de datos especificado

    @Operation(summary = "获取指定数据集记录", description = "根据输入的数据源名称、数据集名称获取记录")
    @ApiImplicitParams({
          
          
      @ApiImplicitParam(name = "datasourceName", value = "数据源名称", dataType = "String", dataTypeClass = String.class),
      @ApiImplicitParam(name = "datasetName", value = "数据集名称", dataType = "String", dataTypeClass = String.class)
    })
    @GetMapping("/getRecordset")
    public JSONArray getRecordset(String datasourceName, String datasetName) {
          
          
      JSONArray jsonArray = new JSONArray();
      if (workspace != null) {
          
          
        Datasources datasources = workspace.getDatasources();
        if (datasources.contains(datasourceName)) {
          
          
          Datasource datasource = datasources.get(datasourceName);
          Datasets datasets = datasource.getDatasets();
          if (datasets.contains(datasetName)) {
          
          
            Dataset dataset = datasets.get(datasetName);
            if (dataset instanceof DatasetVector) {
          
          
              DatasetVector datasetVector = (DatasetVector) dataset;
              Recordset recordset = datasetVector.getRecordset(false, CursorType.STATIC);
              FieldInfos fieldInfos = recordset.getFieldInfos();
              for (int i = 0; i < recordset.getRecordCount(); i++) {
          
          
                recordset.moveTo(i);
                JSONObject subJsonObject = new JSONObject();
                for (int j = 0; j < fieldInfos.getCount(); j++) {
          
          
                  FieldInfo fieldInfo = fieldInfos.get(j);
                  String fieldName = fieldInfo.getName();
                  Object fieldValue = recordset.getFieldValue(fieldName);
                  if (fieldInfo.isSystemField() && fieldInfo.getType() == FieldType.LONGBINARY) {
          
          
                    fieldValue = Toolkit.GeometryToGeoJson(recordset.getGeometry());
                  }
                  subJsonObject.put(fieldName, fieldValue);
                }
                jsonArray.add(subJsonObject);
              }
              recordset.close();
              recordset.dispose();
            }
          }
        }
      }
      return jsonArray;
    }
    

8. Resumen

  Después de desarrollar de acuerdo con el tutorial anterior, se puede realizar el servicio GIS que se muestra en la figura a continuación.
iObjects Java implementa la prueba de interfaz Swagger del servicio GIS basada en SpringBoot.png

  Además, este tutorial también proporciona el código de muestra del servicio en segundo plano GIS desarrollado de acuerdo con el tutorial anterior , o puede descargar directamente el código de muestra y compilarlo a través de Maven para ejecutarlo y depurarlo.

Supongo que te gusta

Origin blog.csdn.net/supermapsupport/article/details/131475904
Recomendado
Clasificación