zoukankan      html  css  js  c++  java
  • 超图GIS入门iserver搭建,前端调用iserver加载三维场景demo

    前言

    前段时间因为对3D制图感兴趣,学习了一下国内制作GIS的公司产品技术,并以一个demo为示例演示
    从制作一个三维场景地图——>安装iserver服务——>发布制作的地图——>最后通过前端加载地图显示操作等
    分为几个步骤来逐步讲解。

    GIS介绍,为什么选择它?

    iserver安装和接口调用

    制作一个简单的demo

    一.GIS介绍,为什么选择它?

    超图是全球第三大、亚洲最大的地理信息系统(GIS)软件厂商,主要从事地理信息系统相关软件技术研发与应用服务。
    为什么选它?因为它是国产了,上手比较简单,因为是中文的,我也不用去找其它国外的破解版。省心、省力、省时、省钱
    图片1e8105f7b56f3c5c32dfe081ad888edc9

    正所谓没有最牛的语言、框架。直接抛开外在客观因素、外在条件去聊方案都是耍流氓。

    二.环境安装

    我用的是安装在本地的服务,一套服务都可以用超图的进行搭建,它的功能还是挺多的,还处于慢慢完善的阶段。
    首先打开超图的技术资源中心http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx
    找到云GIS服务,选择 SuperMap iServer 10i(2021)

    图片2e003fcc2d8eaaf381b8a8619bcdb38a1

    下载该服务包,版本建议下载V10.1.2以上版本,老版本毛病太多了。电脑系统和安装包格式根据个人需求进行下载,我配置的是本地的,所以下载的是windowns版本64位V10.1.2 的zip格式压缩包

    图片3152a76055a009562a25cbfdd080ca97b

    下载解压后,打开文件夹找到“bin”目录下的“startup.bat”启动程序,启动服务

    图片4d14939c40fbea994919de0e9b7fad329

    我们跳过一直点击下一步的繁琐步骤和等待,快进到最后
    SuperMap iServer默认的端口为:8090,服务器启动后,会自动发布默认的示例服务。
    通过http://:/iserver即可访问SuperMap iServer服务的首页。
    本地访问http://localhost:8090即可打开页面,如下图:

    图片5b7bcedf9a88bac583948ae6c0b12bf64

    输入账号密码配置用户这些应该都会,不用详细说了;接着我们查看系统环境,全部为绿色直接下一步就行了

    图片61276f1e29f431ac3338f7cfb1a6f1330

    在进入创建账户的第三步之前,许可驱动需要安装一下;从开始菜单进入许可中心;
    第一次进入会出现下图提示;

    图片7fc80bdfd6231abf7e6b91a824b9f5e6d

    点击“是”就行了,它会自动安装一个
    如果无法自动安装,则需要返回网页手动下载一个许可中心,解压后点击安装即可

    图片832fbcd34fe84f8851593737a40017978

    图片93e8106868a21a7b0020409e48e4bba7f

    临时许可为90天试用期,过期需要去网站申请更新即可

    图片103cdab0f80017d9d2cb194108425f6379

    图片117d301217daa478b9ecbf98074e74850b

    显示配置完成,我们的iserver服务就已经搭建成功了,可以进入主界面了

    图片12edad0a51f46507076ed73c6e8fc887d2

    图片132cb4a84dab32c65f13e35b10cbeedb76

    选择一个服务接口点进去,到里面查看该接口数据的其它内容,有很多种方式供调用,选择自己开发适合的调用即可,像xml,json,HTML等等

    图片14ce9d29c565fa39ff1f77a58c6468aff3

    三.调用三维GIS场景

    首先我们先发布一个已制作好的三维场景(制作地图需要用到其它软件制作,这个我们后面再讲,大家可以用iserver中一些自带的场景进行调用,也可以的)

    图片156168f80b4b1628f67a2f88e033d36c0e

    图片16f0bfa4d00705145864df059600169beb

    这里我们先用自带的一个服务进行制作

    图片17f5b0d4a6f1414d0dac2136d3f95d89bf

    首先我们打开VS或者其它前端软件,建议HTML页面
    (关于 SuperMap iClient3D for WebGL,大家不想自己麻烦建一个3D的js配置文件,我建议去http://support.supermap.com.cn:8090/webgl/web/index.html 官网去下载一个它已有的资源包,后续根据自己需要再做调整)

    这里我们下载一个资源包,打开资源包,在webgl目录下新建我们的HTML页面

    图片18d92bba3602b5fdf865886d2338c66399

    在examples文件夹下新建HTML文件, 在文件中通过 script 标签将Cesium.js文件引入

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <script type="text/javascript" src="../Build/Cesium/Cesium.js"></script>
    </head>
    </html>
    

    同时应该根据需要在 head 标签中引入SuperMap iClient3D for WebGL的其他css文件和js文件,如下:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
        <link href="../Build/Cesium/Widgets/widgets.css" rel="stylesheet">
        <link href="./css/pretty.css" rel="stylesheet">
        <script src="./js/jquery.min.js"></script>
        <script src="./js/config.js"></script>
        <script type="text/javascript" src="../Build/Cesium/Cesium.js"></script>
    </head>
    </html>
    

    !17 初始化三维地球!

    <script type="text/javascript">
        function onload(Cesium) {
            var viewer = new Cesium.Viewer('CesiumContainer');
        }
    </script>
    

    设置地图风格

    默认风格是Cesium自带的,这里我们使用我们本地的图片进行设置

    <script type="text/javascript">
        function onload(Cesium) {
                var viewer = new Cesium.Viewer('cesiumContainer');
                  //使用本地的一张图片初始化地球,建议图片长宽比2:1
                    viewer.imageryLayers.addImageryProvider(new Cesium.SingleTileImageryProvider({
                    url :  './images/DemoImage.jpg'
                }));
    </script>
    

    !17 颜色设置 !

    SuperMap iClient3D for WebGL支持对场景的颜色进行设置:
    viewer.scene.colorCorrection.show = true;
    viewer.scene.colorCorrection.saturation = $("#saturation").val();
    viewer.scene.colorCorrection.brightness = $("#brightness").val();
    viewer.scene.colorCorrection.contrast = $("#contrast").val();
    viewer.scene.colorCorrection.hue = $("#hue").val();
        //颜色校正开关
    $("#colorCorrectionShow").on("input change", function() {
    viewer.scene.colorCorrection.show = this.checked;
    });
        //调节饱和度
    $("#saturation").on("input change", function() {
    viewer.scene.colorCorrection.saturation = this.value;
    });
        //调节亮度
    $("#brightness").on("input change", function() {
    viewer.scene.colorCorrection.brightness = this.value;
    });
        //调节对比度
    $("#contrast").on("input change", function() {
    viewer.scene.colorCorrection.contrast = this.value;
    });
        //调节色调
    $("#hue").on("input change", function() {
    viewer.scene.colorCorrection.hue = this.value;
    });
    

    结果加载出一个球,emmm

    图片1918864f4b1c73b220f27a49a72cc2d57f

    添加地图iServer服务

    对于在 iServer上发布的S3M地图服务,可以通过以下两种方式打开。分别是addS3MTilesLayerByScp接口和open接口
    1.addS3MTilesLayerByScp接口的优势是,可以根据自己的需要选择部分图层添加到场景中,提高加载性能,但需要加载多图层的整个场景时,不如scene.open方便。
    2.这里我们采用最简单易操作且不易出现遗漏图层的接口方式,通过open接口将整个场景打开

    <script type="text/javascript">
    var viewer = new Cesium.Viewer('cesiumContainer');
    var scene = viewer.scene
        var promise = scene.open
    ('http://localhost:8090/iserver/services/3D-SctScene-8/rest/realspace');
        Cesium.when(promise, function (layers) {
            //设置相机位置、视角,便于观察场景
            scene.camera.setView({
                destination: new Cesium.Cartesian3.fromDegrees(113.93930368774213, 22.558551546996856, 500.79457371673558),
                orientation: {
                    heading: 5,
                    pitch: -1.5188,
                    roll: 6.283185307179563
                }
            });
        
        })
    if (typeof Cesium !== 'undefined') {
        window.startupCalled = true;
        onload(Cesium);
    }
    

    图片20d8dd53718f75a10dbf23a017948c4b2f

    三维场景加载出来了。注意的是由于我是用自己电脑做的,所以接口地址是localhost,如果服务在其它电脑上,尽量用IP地址。
    下图为场景的操作轮盘,360*旋转视角,180度翻转,放大缩小

    图片21708f5093f91884ce8fc510b58e957ff6

    然后就是关于加载三维GIS场景后,怎么操作,这就比较简单了

    这里我们在加入一个空间查询的设置,便于后面的信息操作,用于定位
    这个作用就像你打LOL在地上乱点时,英雄就会走到你指定的位置,一个经纬度值,配合路网集就可以进化为类似一个自动导航行走的功能

    var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
     
        //设置鼠标左键单击回调事件
        handler.setInputAction(function(e) {
            //首先移除之前添加的点
            viewer.entities.removeAll();
            //获取点击位置笛卡尔坐标
            var position = scene.pickPosition(e.position);
     
            //将笛卡尔坐标转化为经纬度坐标
            var cartographic = Cesium.Cartographic.fromCartesian(position);
            var longitude = Cesium.Math.toDegrees(cartographic.longitude);
            var latitude = Cesium.Math.toDegrees(cartographic.latitude);
            var height = cartographic.height;
            if(height < 0) {
                height = 0;
            }
     
            //创建弹出框信息,即时查看获取的位置信息
            var entity = new Cesium.Entity({
                name : "位置信息",
                description : createDescription(Cesium, [longitude, latitude, height])
            });
            viewer.selectedEntity = entity;
     
            //为更直观地展示查询的位置,在点击处添加对应点
            viewer.entities.add(new Cesium.Entity({
                point : new Cesium.PointGraphics({
                    color : new Cesium.Color(1, 1, 0),
                    pixelSize : 10,
                    outlineColor : new Cesium.Color(0, 1, 1)
                }),
                position : Cesium.Cartesian3.fromDegrees(longitude, latitude , height + 0.5)
            }));
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    

    添加完成后,我们还要添加一个物体的属性查询
    作用就是,你打LOL的时候,点击英雄的时候,告诉你英雄的属性值

    //SQL为预留给数据库用

    function doSqlQuery(SQL) {
        var getFeatureParam;
        getFeatureParam = new SuperMap.REST.FilterParameter({
            attributeFilter: SQL //SQL为查询条件
    });
    

    上帝视角:就和你们打LOL/沙盘游戏一样吗,放大缩小,点击建筑物这些都差不多,显示建筑物名称,属性值,经纬度这些也类似

    图片229bd2f28eed7fe22ac1c439bc1a6db0a9

    个人视角:这个相当于你们玩吃鸡的视角感,拉伸拉远,视角转向查看前后左右这些,点击周围树木,房子这些查看地理位置,物品属性值

    图片233336e85b606d96cf6791a7768f3736f9
    图片244b08684bdbe4386f2c63a216c9a166d2

    今天就到这了,等我把这些接口全翻译了再整点新花样

    图片25468d142195db4de6de3c6938a7109867

    后续会继续更新:三维GIS定位导航,测量绘画,数据流模拟显示航线信息,人流量分析

    图片264f2b58cd81be2a87cc168a08eec26409

    福禄·研发中心 空蝉
  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/fulu/p/15623874.html
Copyright © 2011-2022 走看看