区块链+GIS技术怎么使用

这篇文章主要讲解了“区块链+GIS技术怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“区块链+GIS技术怎么使用”吧!

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

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

  • 关于Fabric:

    • Fabric是超级账本-HyperLedger的一个项目实现,是广泛使用的超级账本版本。

    • HyperLedger最初由IBM发起,现在是Linux基金会管理的一个开源软件项目。

  • SuperMap GIS 10i(2020) 新特性速览

    • 新增覆盖组件、桌面、服务器 GIS 产品的空间区块链功能

    • 新增区块链空间数据 Fabric 与 IPFS 联合存储

    • 新增空间区块链数据查询、编辑、历史追溯功能

    • 新增支持空间区块链的地图服务、数据服务和数据历史服务


1、下载SuperMap iObjects for Blockchain

然后对下载包使用Unzip展开,目录结构如下:

├── 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上编辑的。不过不影响咱的尝鲜!

2、运行例程

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

/**
 * @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、其它说明

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 版许可中心进行。
            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")

感谢各位的阅读,以上就是“区块链+GIS技术怎么使用”的内容了,经过本文的学习后,相信大家对区块链+GIS技术怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!