笔记系列——开源GIS学习笔记

2 篇文章 0 订阅
2 篇文章 0 订阅

包含:

  1. PostgreSQL + PostGIS
  2. pgrouting
  3. cesium

安装postgis

致命错误

  • 错误:无法加载库‘C:/PostgreSQL/11/lib/rtpostgis-2.5.dll’ : 找不到指定模块

  • 在postgresql\bin\postgisgui下面找到:

    • libeay32.dll
    • ssleay32.dll
  • 复制粘贴到postgresql\bin下
    致命错误

安装CMake

  • 因为安装pgRouting 需要使用 CMake 来安装,所以需要安装 CMake
  • 网址:https://cmake.org/download/
  • 下载安装包安装cmake

安装pgRouting——方法一

  • 下载 pgRouting 安装包
  • 运行cmd
mkdir build
cd build
cmake -G"MSYS Makefiles" ..

安装pgRouting——方法二

  • 将pgRouting 解压路径下所有文件,复制并覆盖到 postgresql 安装路径下

将shapfile导入PostgreSQL

  1. 创建数据库
  2. 打开SQL Shell 输入
-- 创建普通数据库
CREATE DATABASE dbname;
-- 给数据库添加空间扩展,切换刚才创建的数据库下,运行下面的命令即可:
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION address_standardizer;
  1. 为PostgreSQL 导入 pgrouting
  2. 进入指定数据库,执行
CREATE EXTENSION pgrouting;
  1. 打开 PostGIS 2.0 Shapefile and DBF Loader Exporter

  2. 验证链接:

  • UserName: postgres

  • Password: xxx
    连接数据库

  1. 导入shapfile:
    导入Shapfile导入Shapfile

  2. 点击Import

  3. 在Options点选下面对号

设置Options

  1. 注意最后一个复选框必须打勾,以此来生成LineString类型,否则无法进行路径规划。

数据准备

  1. 查看刚才导入的表的数据,增加source,target字段
--在road_two中添加source,target字段
ALTER TABLE road add COLUMN source int;
ALTER TABLE road add COLUMN target int;
--增加路线长度字段(根据长度设置权重)
ALTER TABLE road ADD COLUMN length double precision;

  1. 通过pgrouting提供的pgr_createTopology方法,对道路数据创建拓扑关系,就是创建导航网络
--创建连通性topo
--road_two是表名称,geom是该表的图形字段名称,gid是改变的主键
--一般我们使用shp2pgsql工具会自动创建gid为主键,geom为图形,如果是其他工具,注意对应字段
SELECT  pgr_createTopology('road',0.001,'geom','gid','source','target');
  1. 计算长度
--计算路线长度
UPDATE road SET length = ST_Length(geom);--计算路线长度
  1. 对连通性字段建立索引,增加查询速度
create index road_source_index on road("source");
create index road_target_index on road("target");
  1. 整体代码
alter table road add column source int;
alter table road add column target int;

create index road_source_idx on road("source");
create index road_target_idx on road("target");

ALTER TABLE road  ADD COLUMN length double precision;  

SELECT pgr_createTopology('road',0.00001, 'geom', 'gid');  

update road set length =st_length(geom); 

创建路径分析

执行

SELECT st_astext(geom) FROM pgr_dijkstra('SELECT gid AS id,source::integer,
target::integer,length::double precision AS cost FROM road',30, 60, false, false) as di
join road pt on di.id2 = pt.gid;--查询所经过的所有点

创建最短路径函数

  • postgresql 创建函数
CREATE [OR REPLACE] FUNCTION function_name (arguments)   
RETURNS return_datatype AS $variable_name$  
  DECLARE  
    declaration;  
    [...]  
  BEGIN  
    < function_body >  
    [...]  
    RETURN { variable_name | value }  
  END; LANGUAGE plpgsql;
  • function_name:指定函数的名称。
  • -[ OR REPLACE]:是可选的,它允许修改/替换现有函数。
  • DECLARE:定义参数(参数名写在前面 类型写在后面)。
  • BEGIN~END:在中间写方法主体。
  • RETURN:指定要从函数返回的数据类型(它可以是基础,复合或域类型,或者也可以引用表列的类型)。
  • LANGUAGE:它指定实现该函数的语言的名称。
UPDATE road SET length = ST_Length(geom);
SELECT  pgr_createTopology('road',0.001,'geom','gid','source','target');

SELECT seq, id1 AS node, id2 AS edge, cost,geom into road_res FROM pgr_dijkstra('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost
FROM road',
1, 10, false, false) as di join road pt on di.id2 = pt.gid;
select * from road_res;
drop table road_res;

Cesium密码

  1. 账号:账号

  2. 密码:密码

环境搭建

  1. 安装node. js

  2. 解压Cesium压缩包后,cd到目录下,安装npm

  3. 输入 node server. js开启服务

  4. 加载地图 viewer之前,需要Cesium安全钥匙——Token

##Token

  1. 生成网址:https://cesium. com/ion/tokens

  2. 在初始化 viewer之前,加入token:

​ Cesium. Ion. defaultAccessToken=‘你的token’;

服务网址

Localhost:8083/(路径名)

安装VsCode代码提示

npm install –save @types/cesium

初始位置

viewer.camera.setView({
    // 经度,纬度  高度
    destination: Cesium.Cartesian3.fromDegrees(110.20, 34.55, 5000000)
});

控件

var viewer = new Cesium.Viewer('cesiumBox', {
    timeline: false, //时间条
    animation: false, //最下方动作条
    vrButton: false, // vr模式
    baseLayerPicker: true, //底图切换
    navigationHelpButton: false, //帮助按钮
    sceneModePicker: false, //2D, 3D切换
    infoBox: true,
    credtiContainer: "credit",
    fullscreenButton: false
});

定义帧数显示

viewer.scene.debugShowFramesPerSecond = true;

自动贴地

viewer.scene.globe.depthTestAgainstTerrain = true;

不显示Cesium Logo

viewer._cesiumWidget._creditContainer.style.display = “none”;

创建平移矩阵

var translation = Cesium.Cartesian3.fromArray([0.0, 0.0, -40.0]);
var m = Cesium.Matrix4.fromTranslation(translation);

设置3Dtile文件

var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url: './practice/Production_2. json',
    shadows: true,
    maximumScreenSpaceError: 2,
    maximumNumberOfLoadedTiles: 1000
    // modelMatrix: m 设置平移矩阵
}));

在 vue中添加Cesium(可以使用vue-cesium或CDN方式)

  1. 安装cesium
npm install cesium
  1. 将node_modules/ cesium/ Build/ Cesium下的四个文件夹复制到static中的Cesium

并把其中Cesium. js删除

  1. 配置webpack. base. conf. js

​ (1)添加Source文件路径

const cesiumSource = '. . /node_modules/cesium/Source'

​ (2)配置cesium路径

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKnpu3wW-1577321182693)(file:///C:/Users/Myz/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)]

​ (3)检查module:[rules]中,是否有js. map的定义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w9mMTEFH-1577321182694)(file:///C:/Users/Myz/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png)]

没有则添加

{
    test: /. js. map$/,
        use: {
            loader: 'file-loader'
        },
}
  1. 在module:[rules]后,添加语句:
unknownContextRegExp: /^. \/. *$/,
unknownContextCritical: false
  1. 在显示webpack. dev. conf. js添加
new CopyWebpackPlugin([ { from: path. join('node_modules/cesium/Source', '. . /Build/Cesium/Workers'), to: 'Workers' } ]),

new CopyWebpackPlugin([ { from: path. join('node_modules/cesium/Source', 'Assets'), to: 'Assets' } ]),

new CopyWebpackPlugin([ { from: path. join('node_modules/cesium/Source', 'Widgets'), to: 'Widgets' } ])

见下文详解:

https://blog. csdn. net/m0_37972557/article/details/79768408

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值