区块链+GIS-SuperMap iObjects for Blockchain尝鲜

2021年11月22日 阅读数:7
这篇文章主要向大家介绍区块链+GIS-SuperMap iObjects for Blockchain尝鲜,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

区块链的发展愈来愈快,新的平台、架构和算法也不断涌现,应用接受度也愈来愈高。做为GIS平台天然也能利用区块链的特性给地理空间信息行业应用带来新的可能。SuperMap iObjects for Blockchain(如下简称SMIB)是第一个平台级空间信息区块链产品,虽然目前功能还有限,但也算开创了先河,把区块链的能力引入到了专业GIS平台之中。html

SuperMap iObjects for Blockchain(如下简称SMIB)是基于分布式技术的区块链 GIS 基础组件,提供空间数据上链、链上管理功能,适用于 Fabric 架构的计算和开发环境。java

一、下载SuperMap iObjects for Blockchain

而后对下载包使用Unzip展开,目录结构以下:web

├── License.txt
├── dist
│   ├── com.supermap.blockchain.fabric-10.1.0.jar
│   └── com.supermap.blockchain.fabric-runtime-10.1.0.jar
├── docs
│   ├── FabricI?\201øA?\202çºI?\201IPFSI?\201øA?\202粿E?\202ð½I?\200³I?\200£¨E?\200y?\201I?\200¨»u?\201?\206÷£©.pdf
│   ├── FabricI?\201øA?\202çºI?\201IPFSI?\201øA?\202粿E?\202ð½I?\200³I?\200£¨O?\200»I?\200¨»u?\201?\206÷£©.pdf
│   ├── SuperMap\ iObjects\ for\ Blockchain(Fabric)\ E?\202¹O?\201A?\203E?\210µA?\203÷E?\202e?\201.pdf
│   ├── SuperMap\ iObjects\ for\ Blockchain(Fabric)\ Help.chm
│   └── ·A?\203I?\202E?\202Çø¿e?\201A?\201´I?\201øA?\202çµA?\210yamlI?\202A?\210¼þE?\210µA?\203÷.pdf
├── readme.txt
├── samplecode
│   ├── src
│   │   ├── CertificatePictureTest.java
│   │   ├── CopyDataFromUDBChain.java
│   │   ├── DatasetCreateTest.java
│   │   ├── FeatureTest.java
│   │   ├── HistoryTest.java
│   │   ├── TpsTest.java
│   │   └── Utils.java
│   └── ²»¶¯²u?\201µÇ¼ÇO?\210¤.jpg
└── tools
    ├── blockchaincode
    │   └── supermap_chaincode.tar.gz
    └── fabrictools
        ├── Tools¹¤¾?\237E?\202¹O?\201A?\203O?\210¸A?\210I?\210.pdf
        └── com.supermap.fabrictools-10.1.0.jar

我用的MacOS big sur,目录中文件名有一些乱码,估计在老Windows上编辑的。不过不影响咱的尝鲜!算法

二、运行例程

安装后的samplecode目录含有一些例子。以Feature的读写为例:windows

/**
 * @author oupp
 * @date 2020/5/26 21:37
 */

import com.supermap.blockchain.fabric.*;
import org.locationtech.jts.util.Assert;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 */
public class FeatureTest {
    private static String dtName = "datasetCreateTest";
    public static void main(String[] args) {
//        addFeatureTest();
        modifyFeatureTest();
//        deleteFeatureTest();
    }


    public static boolean addFeatureTest() {
        //获取数据源
        Datasource datasource = Utils.getDatasource();
        //构造Feature
        DataFeature feature = new DataFeature();
        List<AttributeInfo> fieldInfos = new java.util.ArrayList<>();
        AttributeInfo fieldInfo = new AttributeInfo();
        fieldInfo.setName("mm");
        fieldInfo.setType(AttributeType.DOUBLE);
        fieldInfo.setDefaultValue(2.4);
        fieldInfos.add(fieldInfo);
        feature.setAttributeInfos(fieldInfos);
        feature.setFieldValue(0, 11);
        //feature.setFeatureData("MULTILINESTRING ((120.6689 27.98687, 120.66901 27.98684))", FeatureType.WKT);
        feature.setFeatureData("MULTILINESTRING ((135.6689 27.98687, 135.66901 27.98684))", FeatureType.WKT);
        //获取数据集并添加对象
        Dataset dt = datasource.getDataset(dtName);
        if (dt == null) {
            Assert.isTrue(false, "添加对象失败,数据集为空");
        }
        String strKey = dt.addFeature(feature);

        if (strKey != null) {
            System.out.println("添加记录成功!");
            return true;
        }
        System.out.println("添加记录失败!");
        return false;
    }

    /**
     * 修改记录集
     */
    public static void getFeatureTest() {
        //获取数据源
        Datasource datasource = Utils.getDatasource();
        //构造待修改的Feature信息
        DataFeature feature = new DataFeature();
        //构造字段信息
        List<AttributeInfo> fieldInfos = new java.util.ArrayList<AttributeInfo>();
        AttributeInfo fieldInfo = new AttributeInfo();
        fieldInfo.setName("mm");
        fieldInfo.setType(AttributeType.DOUBLE);
        fieldInfo.setDefaultValue(2.4);
        fieldInfos.add(fieldInfo);
        feature.setAttributeInfos(fieldInfos);
        feature.setFieldValue(0, 8.5);
        feature.setFeatureData("MULTILINESTRING ((100.6689 27.98687, 100.66901 27.5025))", FeatureType.WKT);
        //获取数据集
        Dataset dt = datasource.getDataset(dtName);
        //获取要修改的Feature的id
        Map map = new HashMap<String, String>();
        map.put("\"mm\"", 11);
        DataFeatureIterator iterator = dt.getFeature(new QueryParameter(QueryType.GENERAL, map));
        DataFeature feature1 = iterator.next();
        String strKey = feature1.getId();
        String wktGeo = feature1.getFeatureData().toString();
        System.out.println("查出的数据key是:" + strKey);
        System.out.println("查出的数据空间信息是:" + wktGeo);
    }

    /**
     * 修改记录集
     */
    public static boolean modifyFeatureTest() {
        //获取数据源
        Datasource datasource = Utils.getDatasource();
        //构造待修改的Feature信息
        DataFeature feature = new DataFeature();
        //构造字段信息
        List<AttributeInfo> fieldInfos = new java.util.ArrayList<AttributeInfo>();
        AttributeInfo fieldInfo = new AttributeInfo();
        fieldInfo.setName("mm");
        fieldInfo.setType(AttributeType.DOUBLE);
        fieldInfo.setDefaultValue(2.4);
        fieldInfos.add(fieldInfo);
        feature.setAttributeInfos(fieldInfos);
        feature.setFieldValue(0, 8.5);
        feature.setFeatureData("MULTILINESTRING ((100.6689 27.98687, 100.66901 27.5025))", FeatureType.WKT);
        //获取数据集
        Dataset dt = datasource.getDataset(dtName);
        //获取要修改的Feature的id
        Map map = new HashMap<String,String>();
        map.put("\"mm\"",11);
        DataFeatureIterator iterator = dt.getFeature(new QueryParameter(QueryType.GENERAL, map));
        DataFeature feature1 = iterator.next();
        String strKey = feature1.getId();
        //修改Feature
        Boolean bModify = dt.modifyFeature(strKey, feature);
        if (bModify){
            System.out.println("修改为功" + bModify);
            return true;
        }

        System.out.println("修改失败");
        return false;
    }

    /**
     * 删除记录集
     */
    public static boolean deleteFeatureTest() {
        //获取数据源
        Datasource datasource = Utils.getDatasource();
        //获取数据集
        Dataset dt = datasource.getDataset(dtName);
        //获取待删除的feature的id
        Map map = new HashMap<String,String>();
        map.put("\"mm\"",4);
        DataFeatureIterator iterator = dt.getFeature(new QueryParameter(QueryType.GENERAL, map));
        DataFeature feature1 = iterator.next();
        String strKey = feature1.getId();
        //删除记录
        Boolean bDelete = dt.deleteFeatureByKey(strKey);
        if(bDelete){
            System.out.println("删除记录成功!");
            return true;
        }

        return false;
    }

}

整体上仍是比较简单的。不过,由于是开发平台,目前用起来仍是复杂一些,之后在桌面软件能够直接访问区块链上的数据,也能够经过服务器在浏览器里访问,或者在移动端访问。期待地理空间信息区块链的功能愈来愈完善,并且可以支持更多种的区块链平台,以及提供在不一样平台之间可以实现互操做,与业务应用进一步绑定的更紧密。浏览器

三、其它说明

3.1.系统配置要求

  • 硬件推荐配置:
    • 处理器:双核,2.00 GHz 或以上主频
    • 内存:4 GB 或以上
    •  硬盘:80 GB  或以上
    •  网络适配器:100 M 或以上网络适配器
    •  显示适配器:512 M 或以上显存(安装显示适配器驱动),OpenGL 版本:3.0

3.2. 许可说明

    3.2.1 普通许可
    使用 SuperMap GIS 10i 系列产品许可用于验证产品的可用性。针对Windows 平台,提供 SuperMap 许可中心(SuperMap License Center)对许可进行配置和管理;在 Linux 平台,提供命令行方式配置许可。此外,还提供了云许可。
        在 Windows 和 Linux 操做系统下,SuperMap GIS 10i 系列产品均提供两种许可:试用许可和正式许可,其中正式许可又分为软许可和硬件许可。试用许可SuperMap GIS 10i 系列产品默认提供了90天的试用许可,您也能够在线申请试用许可,申请地址:https://www.supermapol.com/web/pricing/triallicense,用户只要安装了 SuperMap GIS 10i 系列产品,并在 Windows 平台部署 SuperMap 许可中心,或在 Linux 平台安装许可驱动 ,就能够查看到对应的产品的试用许可状态。
    3.2.2 正式许可
    正式许可的提供形式有两种:软许可和硬件许可。
        A. 软许可,是以离线或在线方式得到合法的软件运行许可,激活到本机,便可生效。软许可分为单机软许可和网络软许可。若是激活单机软许可,则只能为本机提供许可服务;若是激活网络软许可,则能够为当前网络中的计算机提供许可服务。注意,在许可服务器上激活网络软许可后,没法转移该网络软许可。
        B. 硬件许可,是以硬件加密锁(简称“硬件锁”)的形式得到合法的软件运行许可。
        您能够联系相关销售人员购买正式许可。
    3.2.3 Web许可
        SuperMap GIS 产品从10i 系列开始支持 Web 许可,Web许但是一种适配云环境的许可方式。要使用 Web 许可,您须要链接到可用的 Web 版许可中心。在链接到 Web 版许可中心后,经过 Web 版许可中心受权得到许可。
        许可获取方式
        正式版 Web 许可请联系销售获取,试用版许可能够在线申请获取,申请地址:https://www.supermapol.com/web/pricing/triallicense。
        使用 Web 许可
            1. 配置 Web 版许可中心
             您能够从超图技术资源中心下载 Web 版许可中心的安装包,地址为http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx。Web 版许可中心安装包中提供的 Readme 文档将为您介绍 Web 版许可中心安装和使用的流程,您能够参照该文档安装和使用 Web版许可中心。
            2. 启用 Web 许可
             Web 许可的激活在 Web 版许可中心进行,具体请参考 Web 版许可中心产品包中的 Readme文档。
            3. 配置许可环境
             在环境变量中配置 BS_LICENSE_SERVER=[本机ip]:9183,如Linux中export BS_LICENSE_SERVER=192.168.3.3:9183,windows中set BS_LICENSE_SERVER=192.168.3.3:9183,代码中System.setProperty("BS_LICENSE_SERVER","192.168.3.3:9183")服务器

四、反馈

  若是您在使用中发现任何问题,请与北京超图软件股份有限公司联系:网络

  •     地址:北京市朝阳区酒仙桥北路甲10号院电子城IT产业园107号楼6层
  •     邮编:100015
  •     电话:+86-10-59896655
  •     传真:+86-10-59896666
  •     技术支持与客户监督热线:400-8900-866
  •     技术支持电子邮箱:support@supermap.com
  •     客户监督电子邮箱:cs@supermap.com
  •     网址:http://www.supermap.com