包含:
- PostgreSQL + PostGIS
- pgrouting
- 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
- 创建数据库
- 打开SQL Shell 输入
-- 创建普通数据库
CREATE DATABASE dbname;
-- 给数据库添加空间扩展,切换刚才创建的数据库下,运行下面的命令即可:
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION address_standardizer;
- 为PostgreSQL 导入 pgrouting
- 进入指定数据库,执行
CREATE EXTENSION pgrouting;
-
打开 PostGIS 2.0 Shapefile and DBF Loader Exporter
-
验证链接:
-
UserName: postgres
-
Password: xxx
-
导入shapfile:
-
点击Import
-
在Options点选下面对号
- 注意最后一个复选框必须打勾,以此来生成LineString类型,否则无法进行路径规划。
数据准备
- 查看刚才导入的表的数据,增加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;
- 通过pgrouting提供的pgr_createTopology方法,对道路数据创建拓扑关系,就是创建导航网络
--创建连通性topo
--road_two是表名称,geom是该表的图形字段名称,gid是改变的主键
--一般我们使用shp2pgsql工具会自动创建gid为主键,geom为图形,如果是其他工具,注意对应字段
SELECT pgr_createTopology('road',0.001,'geom','gid','source','target');
- 计算长度
--计算路线长度
UPDATE road SET length = ST_Length(geom);--计算路线长度
- 对连通性字段建立索引,增加查询速度
create index road_source_index on road("source");
create index road_target_index on road("target");
- 整体代码
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密码
-
账号:账号
-
密码:密码
环境搭建
-
安装node. js
-
解压Cesium压缩包后,cd到目录下,安装npm
-
输入 node server. js开启服务
-
加载地图 viewer之前,需要Cesium安全钥匙——Token
##Token
-
在初始化 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方式)
- 安装cesium
npm install cesium
- 将node_modules/ cesium/ Build/ Cesium下的四个文件夹复制到static中的Cesium
并把其中Cesium. js删除
- 配置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'
},
}
- 在module:[rules]后,添加语句:
unknownContextRegExp: /^. \/. *$/,
unknownContextCritical: false
- 在显示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