fix: 增加日记记录
This commit is contained in:
@@ -1,3 +1,22 @@
|
||||
# Gis技术
|
||||
# Gis相关内容简介
|
||||
|
||||
> Gis技术
|
||||
该教程内容是根据[Spatialite官方教程](https://www.gaia-gis.it/fossil/libspatialite/wiki?name=misc-docs)所做的翻译,Spatialite教程主要分为[cookbook](http://www.gaia-gis.it/gaia-sins/spatialite-cookbook/index.html)和[tutorial](http://www.gaia-gis.it/gaia-sins/spatialite-tutorial-2.3.1.html)
|
||||
|
||||
建议先食用tutorial后,再酌情考虑是否使用cookbook
|
||||
|
||||
官方声称该教程已经较为老旧,但是仍可继续使用,spatialite更新并非特别频繁,因此此教程在较长时间里还是很有借鉴意义的
|
||||
|
||||
## Spatialite教程
|
||||
|
||||
* [Spatialite教程](Spatialite教程.md)是官方教程
|
||||
## Spatialite-Cookbook
|
||||
|
||||
* [Spatialite-Cookbook](Spatialite-Cookbook.md)类似于最佳实践
|
||||
|
||||
## VTM引擎
|
||||
|
||||
* [VTM引擎使用指南](VTM引擎使用指南.md)
|
||||
|
||||
## xviz
|
||||
|
||||
* [xviz学习记录](xviz.md)
|
||||
34
gis/Spatialite-Cookbook.md
Normal file
34
gis/Spatialite-Cookbook.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Spatialite CookBook
|
||||
|
||||
## 厨房工具和烹饪技巧
|
||||
|
||||
### 技术名词介绍
|
||||
|
||||
专业的说法,SpatiaLite是支持国际标准(例如SQL92和OGC-SFS)的Spatial DBMS(空间数据库管理系统)。
|
||||
|
||||
我想,即使是专业的计算机相关专业人员,上面的各种缩写和英文描述一定会让你觉得一头雾水——虽然我们已经尽量为这些描述添加了一些说明。
|
||||
|
||||
不用担心:晦涩的技术术语通常掩盖了真正易于理解的概念:
|
||||
|
||||
* DBMS(Database Management System) 数据库管理系统
|
||||
* 数据库管理系统是一种旨在以最有效和通用的方式存储和检索任意数据的软件,事实上,数据库内一般会存储很多大量的,高度结构化的复杂数据。
|
||||
* SQL (Structured Query Language) 结构化查询语言
|
||||
* Sql是一种支持DBMS处理的标准化语言。使用Sql,您可以方便地定义数据的组织和存储方式,您可以方便地在数据库中实现复杂的增、删、改、查操作。
|
||||
* OGC-SFS (Open Geospatial Consortium - Simple Feature Specification) 开放地理空间联盟-简要特征规范
|
||||
* 允许扩展基本的DBMS / SQL功能,以便支持特殊的Geometry数据类型,因此也被称为Spatial DBMS(空间地理数据库)。
|
||||
|
||||
**SpatiaLite**是一个广泛流行的,基于Sqlite的轻量级个人数据库系统。
|
||||
|
||||
**SQLite**实现标准的SQL92数据引擎,而SpatiaLite实现标准的OGC-SFS核心,二者紧密结合。结合二者的能力去使用,就是一个完整的Spatial DBMS(空间地理数据库)。
|
||||
|
||||
了解Sqlite的应该都清楚,SQLite并非传统的client-server架构,而是将数据库引擎嵌入在程序中。这样简洁的架构设计大大减少了数据库管理的成本,你可以像打开一个普通的文本文件一样打开一个sqlite数据库。一个包含了数百万条数据的sqlite数据库文件,你可以自由地将其复制、删除而不会有任何问题。同样因为数据库文件的通用性,你可以将这个文件从一台电脑传输到另外一台上,而无需做任何预处理。两台电脑也可以是不同的操作系统,因为Sqlite数据库是跨平台的。
|
||||
|
||||
诚然,所有这些简单和轻量级的优点都是有代价的:SQLite/SpatiaLite对多线程的支持很差,这也是它被称为个人数据库的原因,其潜台词就是:单用户、单程序、单工作站。
|
||||
|
||||
如果支持多线程并发是你的硬需求,那么SQLite/SpatiaLite显然不是你的最佳选择。幸运的是,Sqlite/Spatialite同PostgreSQL/PostGIS(一款重量级的client-server架构的空间地理数据库系统)十分相似,你可以平滑地切换到该平台。
|
||||
|
||||
---
|
||||
|
||||
### 准备工作(软件安装)
|
||||
|
||||
这不是一本理论手册:这是面向绝对初学者的实用入门指南。忽略那些DBMS、SQL以及GIS这些专有名词吧,跟着这个教程一步一步动手去做就好了。
|
||||
171
gis/Spatialite教程.md
Normal file
171
gis/Spatialite教程.md
Normal file
@@ -0,0 +1,171 @@
|
||||
# Spatialite快速入门
|
||||
|
||||
## 1.开始
|
||||
|
||||
### 1.1 开始准备
|
||||
本教程的目标是让你快速熟悉Spatialite和Spatialite的空间函数。
|
||||
|
||||
这里我们默认您已经熟悉最基本的Sql增删改查操作,如果您不是一名程序员,也无需担心,基础的sql语句都十分简单,相信您在学习本教程时也能快速入门。
|
||||
|
||||
本教程使用[test-2.3.sqlite](../assets/test-2.3.sqlite)作为测试用数据,您可以点击超链接下载该文件。这里我们使用官方提供的基于Windows环境的[Spatialite-gui程序](../assets/spatialite_gui-NG-5.0.0-win-amd64.7z)作为练习,您也可以在[这里](http://www.gaia-gis.it/gaia-sins/index.html)下载或编译其他系统的Spatialite程序。
|
||||
|
||||
万事具备,现在可以双击打开spatialite_gui.exe程序。
|
||||
1. 点击Menu
|
||||
2. 选择Connect an existing Sqlite DB,然后选择刚才下载的test-2.3.sqlite文件。
|
||||
3. 此后我们右侧上部的输入框内输入sql语句。
|
||||
4. 然后单击最右侧的按钮执行sql。
|
||||
|
||||

|
||||
|
||||
### 1.2 关于test-2.3.sqlite文件
|
||||
这是一个简单的,小型的但是又极具现实意义的数据库文件,由[这个网站](https://www.rigacci.org/wiki/doku.php/tecnica/gps_cartografia_gis/download)提供。
|
||||
|
||||
这个文件主要包含下面几个表:
|
||||
1. regions表:包含109行数据,存在的geometry列,存储的是一个POLYGON面数据。
|
||||
2. towns表: 包含8101行数据,存在的geometry列,存储的是一个POINT点数据。
|
||||
3. highways表: 包含775行数据,存在的geometry列,存储的是一个LINESTRING线数据。
|
||||
|
||||
### 1.3 简单的sql查询
|
||||
Spatialite支持所有的sqlite语句的执行,事实上,Spatialite是在sqlite数据库的基础上,增加了支持空间函数的扩展,例如,我们可以在Spatialite-gui.exe中执行以下sql语句:
|
||||
#### 1.3.1 简单查询
|
||||
> ```sql
|
||||
> SELECT * FROM towns LIMIT 5;
|
||||
> ```
|
||||
>
|
||||
> 
|
||||
|
||||
#### 1.3.2 条件查询
|
||||
> ```sql
|
||||
> select name AS Town, peoples as Population from towns ORDER BY name LIMIT 5;
|
||||
> ```
|
||||
>
|
||||
> 
|
||||
|
||||
#### 1.3.3 排序查询
|
||||
> select name, peoples from towns WHERE peoples > 350000 order by peoples DESC;
|
||||
>
|
||||
> 
|
||||
|
||||
#### 1.3.4 求和、最大、最小值查询
|
||||
> ```sql
|
||||
> select COUNT(*) as '# Towns',
|
||||
> MIN(peoples) as Smaller,
|
||||
> MAX(peoples) as Bigger,
|
||||
> SUM(peoples) as 'Total peoples',
|
||||
> SUM(peoples) / COUNT(*) as 'mean peoples for town'
|
||||
> from towns;
|
||||
> ```
|
||||
> 
|
||||
|
||||
#### 1.3.5 简单表达式
|
||||
|
||||
**Spatialite也支持简单的表达式,请看这个例子**
|
||||
|
||||
> ```sql
|
||||
> select (10 - 11) * 2 as Number, ABS((10 - 11) * 2) as AbsoluteValue;
|
||||
> ```
|
||||
>
|
||||
> 
|
||||
|
||||
#### 1.3.6 使用HEX
|
||||
|
||||
**HEX函数可以将指定列的数据转换为16进制的数据显示**
|
||||
> ```sql
|
||||
> select name, peoples, HEX(Geometry) from Towns where peoples > 350000 order by peoples DESC;
|
||||
> ```
|
||||
>
|
||||
> 
|
||||
|
||||
## 2. 开始使用空间函数
|
||||
|
||||
### 2.1 Geometry和WKT字符串的互转
|
||||
|
||||
#### 2.1.1 查看Geometry的bolb对象,使用AsText
|
||||
|
||||
* AsText函数也许是Spatialite中使用最频繁的函数之一,多数情况下,我们会将数据的位置信息以Bolb格式(数据对象)保存,并且为了日后可以按照空间关系去查询数据,还会以该字段建立空间索引。而查询后的数据又该如何使用呢?就是通过AsText函数将Bolb对象转换为WKT文本,然后在应用层再将该WKT文本重新转换为空间对象(Java中使用jts.jar中提供的函数实现转换)。
|
||||
|
||||
> ```sql
|
||||
> Select Name, Peoples, AsText(Geometry) from Towns order by Peoples Desc
|
||||
> ```
|
||||
>
|
||||
> 
|
||||
|
||||
|
||||
#### 2.1.2 Wkt对象转换为数据库中的空间对象,使用GeomFromText
|
||||
* GeomFromText可以将wkt格式的字符串,转换为Spatialite中的geometry对象
|
||||
|
||||
> select GeomFromText('Point(5 10)')
|
||||
|
||||
### 2.2 获取Geometry的X和Y坐标
|
||||
* 当Geometry的数据类型是Point点时,可以通过X、Y函数获取这个点的经纬度
|
||||
> ```sql
|
||||
> SELECT name, X(Geometry), Y(Geometry) FROM Towns
|
||||
> WHERE peoples > 350000
|
||||
> ORDER BY peoples DESC
|
||||
> ```
|
||||
> 
|
||||
|
||||
### 2.3
|
||||
|
||||
* 该部分我们将带你认识OpenGIS规范中定义的SpatiaLite支持的各种GEOMETRY类,简单来讲,任何的Geometry类都是一种特定的几何类型(点/线/面)。在此前的章节中我们已经认识了点(Point)类型,下面我们再来了解下其他的几何类型。
|
||||
|
||||
---
|
||||
#### 2.3.1 查询线类型
|
||||
> ```sql
|
||||
> SELECT PK_UID, AsText(Geometry) FROM HighWays WHERE PK_UID = 1
|
||||
> ```
|
||||
> 
|
||||
> 截图不完整,请自行在Spatialite中测试查看
|
||||
|
||||
* LineString是另外一种Geometry对象,它由许多个(>=2)点组成,在几何中代表一根线
|
||||
* 这里查询到的就是由若干个点组成的一根线数据,在LineString中,一组经纬度由空格分隔,而各组经纬度所组成的点则由逗号分隔
|
||||
* 在实际使用中,成百上千个点组成一条线并不少见
|
||||
|
||||
#### 2.3.2 NumPoints、GLength、Dimension、GeometryType
|
||||
> ```sql
|
||||
> SELECT PK_UID, NumPoints(Geometry), GLength(Geometry),Dimension(Geometry), GeometryType(Geometry)
|
||||
> FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5;
|
||||
> ```
|
||||
> 
|
||||
|
||||
* NumPoints函数返回LineString对象的点位个数
|
||||
* GLength函数返回LineString的长度(单位以地图单位为准)
|
||||
* Dimension函数返回Geometry的维度(点类型的维度就是0,线类型为1,面类型为2)
|
||||
* GeometryType返回Geometry的类型(可能会返回POINT、LINESTRING、POLYGON以及多线MULTILINESTRING、多面MULTIPOLYGON)
|
||||
|
||||
#### 2.3.3 StartPoint、EndPoint、PointN
|
||||
> ```sql
|
||||
> SELECT PK_UID, NumPoints(Geometry),
|
||||
> AsText(StartPoint(Geometry)), AsText(EndPoint(Geometry)),
|
||||
> X(PointN(Geometry, 2)), Y(PointN(Geometry, 2))
|
||||
> FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5;
|
||||
> ```
|
||||
> 
|
||||
|
||||
* StartPoint函数返回LineString对象的起点
|
||||
* EndPoint函数返回LineString对象的终点
|
||||
* PointN返回LineString对象指定的第N个点
|
||||
|
||||
#### 2.3.4 面对象Polygon
|
||||
> ```sql
|
||||
> SELECT name, AsText(Geometry) FROM Regions WHERE PK_UID = 52
|
||||
> ```
|
||||
> 
|
||||
|
||||
* Polygon是另外一种Geometry对象,一般由多个点(>=3)组成,代表一个面几何对象
|
||||
* 这个例子中的Polygon是一个极为简单的类型,只包含一个外环。请注意,Polygon有时会包含若干个内环
|
||||
* Polygon的数据与LineString类似,事实上,一个Polygon面可以认为是一条首尾相连的Line组成的
|
||||
* 因此,Polygon的首点和尾点必须一致
|
||||
#### 2.3.5 Area、Centroid、Dimension、GeometryType
|
||||
> ```sql
|
||||
> SELECT PK_UID,
|
||||
> Area(Geometry), AsText(Centroid(Geometry)),
|
||||
> Dimension(Geometry), GeometryType(Geometry)
|
||||
> FROM Regions ORDER BY Area(Geometry) DESC LIMIT 5;
|
||||
> ```
|
||||
> 
|
||||
|
||||
* Area函数返回Polygon的面积
|
||||
* Centroid函数返回Polygon的质心,可以认为是polygon的中心点
|
||||
* Dimension和GeometryType我们在上面的LineString中已经见识过了,这里不再赘述
|
||||
|
||||
183
gis/VTM引擎使用指南.md
Normal file
183
gis/VTM引擎使用指南.md
Normal file
@@ -0,0 +1,183 @@
|
||||
# VTM 引擎使用指南
|
||||
|
||||
[VTM](https://github.com/mapsforge/vtm)(Vector Tile Map)地图引擎是一个由OpenScienceMap组织开发的(目前已移交给mapsforge组织管理维护),Java编写的地图引擎,它是一个支持Android、IOS、桌面端以及Web端的跨平台渲染引擎,同时显示效率也极为优秀。
|
||||
|
||||
## 地图特性
|
||||
|
||||
- Java地图库
|
||||
- OpenGL矢量瓦片渲染
|
||||
- 可设置主题的矢量瓦片图层(渲染主题)
|
||||
- 支持多个瓦片数据源:
|
||||
- OpenScienceMap矢量瓦片
|
||||
- 地图矢量地图
|
||||
- MBTiles矢量瓦片&栅格瓦片
|
||||
- Mapbox矢量瓦片(例如Mapilion、Mapzen、Nextzen、OpenMapTiles)
|
||||
- GeoJSON矢量瓦片(例如Mapzen、Nextzen)
|
||||
- 栅格瓦片:以四叉树方式存储的栅格图片
|
||||
|
||||
## [地图样式详解](https://github.com/mapsforge/vtm/blob/master/docs/Rendertheme.md)
|
||||
<!-- tabs:start -->
|
||||
#### **中文**
|
||||
|
||||
本文介绍了如何使用基于XML的渲染主题来设置矢量瓦片图层数据样式的映射。
|
||||
|
||||
#### **英文**
|
||||
|
||||
This article describes how to use XML-based render-themes to style maps.
|
||||
<!-- tabs:end -->
|
||||
### 样式介绍
|
||||
<!-- tabs:start -->
|
||||
#### **中文**
|
||||
|
||||
渲染主题是一个包含了规则和渲染指令的XML文件。这样的文件可以用于自定义渲染地图的可视化样式。vtm地图库带有类似于Osmarender风格的内置渲染主题。也支持加载外部渲染主题文件,可以在运行时通过map.setTheme(ThemeLoader.load(File))方法激活对应的渲染文件。
|
||||
|
||||
渲染主题文件的语法和语义与Osmarender规则相似但不完全相同。格式化的渲染主题的描述规则以XML模式文档的形式存在,可以在[仓库这里](https://github.com/mapsforge/vtm/blob/master/resources/rendertheme.xsd)中找到。
|
||||
|
||||
我们始终建议您通过研究默认的[内置渲染主题](https://github.com/mapsforge/vtm/blob/master/vtm-themes/resources/assets/vtm/default.xml)来学习如何定义渲染样式。
|
||||
|
||||
#### **英文**
|
||||
|
||||
A render-theme is an XML file which contains rules and rendering instructions. Such files can be used to customize the visual style of the rendered map. The vtm map library comes with built-in render-themes similar to the Osmarender style. External render-theme files are also supported and can be activated via the map.setTheme(ThemeLoader.load(File)) method at runtime.
|
||||
|
||||
Syntax and semantics of render-theme files are similar but not identical to Osmarender rules. A formal render-theme description exists as an XML schema document, it can be found in the repository.
|
||||
|
||||
It is always recommended to study the default built-in render theme.
|
||||
<!-- tabs:end -->
|
||||
|
||||
### 规则描述
|
||||
---
|
||||
规则元素<m/>(match)是主题文件匹配数据的最基础标签,它具有多个属性,用于指定规则如何匹配属性元素,他们都是可选的,没有一个是必需的。
|
||||
|
||||
| 属性 | 可选值 | 描述 | 默认值 |
|
||||
|:---------:|:-----------:|:-----------------------:|:-----------:|
|
||||
| e | node</br> way </br> any|定义匹配到的地图要素类型| any |
|
||||
| k | string | tile数据源中tag的key.</br>可以通过在多个string中添加"\|"方式定义多个key |any key|
|
||||
|v |string |tile数据源中tag的value.</br> 可以通过在多个string中添加"\|"方式定义多个value.</br> 可以在“\|”前添加“-”,表示非指定要素可以匹配,例如“-\|A\|B”意味着匹配非A或B的value,注意:“\|”不会单独使用.</br> 如果地图tag存在该key,但是没有特定的value,可以使用“~”匹配任意value.| any value|
|
||||
|closed |yes</br>no</br>any|当way要素被匹配时,如果首尾坐标相同,则被认为closed为true| any|
|
||||
|select | first</br>when-matched</br>any|当前规则的子规则下的仅第一个匹配规则生效(其他规则忽略)</br>当前闭合规则下所有的匹配项均被选择</br>选择所有(无论是否匹配)|any|
|
||||
|zoom-min | unsigned byte | 规则匹配的最小zoom | 0 |
|
||||
|zoom-max | unsigned byte | 规则匹配的最大zoom | 127|
|
||||
|
||||
规则定义可以是无限深度来定义渲染指令,并且指令取决于多个规则。这样可以用来定义复杂的渲染规则以避免冗余。
|
||||
请看下面的示例:
|
||||
```xml
|
||||
<m e="way" closed="no">
|
||||
<m k="highway" v="motorway">
|
||||
<m k="tunnel" v="true|yes">
|
||||
…
|
||||
</m>
|
||||
<m k="tunnel" v="~|no|false">
|
||||
…
|
||||
</m>
|
||||
</m>
|
||||
</m>
|
||||
```
|
||||
下面有一个select标签的使用示例,在下面这段规则中,symbol会显示,而加粗的coption不会被显示,因为只有第一个匹配的子规则会被选择。斜体的caption也会被显示,因为它也是第一个被选中的子规则。
|
||||
```xml
|
||||
<m k="railway" v="halt|tram_stop" zoom-min="15" select="first">
|
||||
<m v="tram_stop">
|
||||
<symbol src="assets:symbols/transport/tram_stop.svg" />
|
||||
</m>
|
||||
<m v="tram_stop">
|
||||
<caption style="bold" dy="20" fill="#af3a3a" k="name" size="12"/>
|
||||
</m>
|
||||
<m select="when-matched">
|
||||
<caption style="italic" dy="-20" fill="#222222" k="name" size="12"/>
|
||||
</m>
|
||||
</m>
|
||||
```
|
||||
|
||||
### 渲染介绍
|
||||
---
|
||||
渲染指令指定地图元素的绘制方式。**每个规则元素可以包括任意数量的渲染指令**。除了标签(label)和符号(symbol)之外,所有渲染指令都按照定义的顺序绘制在地图上。
|
||||
当前版本下支持的渲染样式有如下几类:
|
||||
- area
|
||||
- caption
|
||||
- circle
|
||||
- line
|
||||
- outline
|
||||
- lineSymbol
|
||||
- text
|
||||
- extrusion
|
||||
- symbol
|
||||
每一个渲染要素支持的渲染属性,可以参考对应的[渲染规则xml文件](https://github.com/mapsforge/vtm/blob/master/resources/rendertheme.xsd)。
|
||||
|
||||
### 标题元素
|
||||
---
|
||||
在顶级标签rendertheme下可以添加下面几个属性描述,用于定义theme中的整体样式。
|
||||
|
||||
- map-background: 地图背景颜色(空白区域的颜色描述),这个颜色值应该区别于陆地要素和海洋要素,默认的背景颜色是白色#FFFFFF
|
||||
- base-stroke-width: 基础线宽,默认值为1
|
||||
- base-text-scale: 基础文本缩放比例,默认为1
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rendertheme xmlns="http://opensciencemap.org/rendertheme" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://opensciencemap.org/rendertheme https://raw.githubusercontent.com/mapsforge/vtm/master/resources/rendertheme.xsd" version="1" map-background="#FFFCFA">
|
||||
…
|
||||
</rendertheme>
|
||||
```
|
||||
|
||||
### Text和Caption标签
|
||||
---
|
||||
最常用的显示文本的标签:
|
||||
|属性|可选值|描述|默认值|
|
||||
|:---------:|:-----------:|:-----------------------:|:-----------:|
|
||||
|font-family| default, default_bold, monospace, sans_serif, serif, thin, light, medium, black, condensed| 设置字体| default|
|
||||
|style| bold, bold_italic, italic, normal| 设置文字样式| normal|
|
||||
|size| non negative float| 设置文字大小| 0|
|
||||
|fill| color| 设置文字填充颜色| #000000|
|
||||
|stroke| color| 设置文字外边框颜色| #000000|
|
||||
|stroke-width| non negative float| 设置文字外边框宽度| 0|
|
||||
|dy| float| 设置文字在纵轴上的偏移量| 0|
|
||||
|
||||
### 样式(Styles)
|
||||
|
||||
---
|
||||
尽可能以简化地图渲染以及切换地图样式。
|
||||
|
||||
#### 样式模板Style patterns
|
||||
|
||||
假如你要在不同匹配规则下多次使用对应的样式(文字text、线line、面area或者符号symbol),不用每次都定义一次新的样式,你可以通过定义一个渲染样式后,为它命名一个id,然后在需要使用它是使用use标签来引用它。
|
||||
|
||||
```xml
|
||||
<style-area fade="11" fill="#e8e7e3" id="residential" />
|
||||
|
||||
<m closed="yes" e="way" k="highway|building" v="~">
|
||||
<m v="residential|commercial|retail|farmyard">
|
||||
<area use="residential" />
|
||||
</m>
|
||||
</m>
|
||||
```
|
||||
|
||||
### 样式菜单(略)
|
||||
|
||||
### 优先级Priorities
|
||||
|
||||
label和symbol是按照优先级绘制在地图上的,默认(最高)的优先级是0,因此,只有当空间尚未被占用或优先级值低于其冲突元素时,才会绘制优先级高于0的内容。
|
||||
|
||||
```xml
|
||||
<m e="node" k="place" v="town" zoom-min="8">
|
||||
<caption priority="2" k="name" style="bold" size="14" fill="#333380" stroke="#FFFFFF" stroke-width="2.0"/>
|
||||
</m>
|
||||
<m e="node" k="place" v="city" zoom-min="6" zoom-max="6">
|
||||
<caption priority="0" k="name" style="bold" size="11" fill="#333380" stroke="#FFFFFF" stroke-width="2.0"/>
|
||||
</m>
|
||||
```
|
||||
|
||||
### 图标Symbol
|
||||
|
||||
Symbol可以使用png图片或是svg矢量图标,VTM在Android和Java环境下支持[Tiny SVG](http://www.w3.org/TR/SVGTiny12/index.html)标准的大部分子集内容。
|
||||
|
||||
#### SVG缩放
|
||||
|
||||
SVG资源会被自动缩放以适应不同设备的分辨率,但是你也可以通过下面的选项来优化SVG图标的显示大小:
|
||||
|
||||
- 如果没有给出大小,svg将呈现为20x20像素乘以设备比例因子和用户设备的缩放调整。
|
||||
- Symbol-percent: SVG以其默认大小的百分比大小呈现。这是使某些svg比其他svg更小或更大的最佳方法。
|
||||
|
||||
- symbol-width/symbol-height:其他参数提供符号的绝对像素大小,同样由比例因子调整。如果只设置了一个尺寸,则根据纵横比计算另一个尺寸。
|
||||
|
||||
#### SVG资源
|
||||
|
||||
如果你想知道如何设计自己的svg图标,你可以看看[Google's Material Design](https://material.io/design/iconography/system-icons.html)惯例。为了降低SVG的大小,建议使用SVG文件中的重用工具,并删除任何不必要的注释和元数据。
|
||||
4
gis/_sidebar.md
Normal file
4
gis/_sidebar.md
Normal file
@@ -0,0 +1,4 @@
|
||||
* [Gis相关](/Gis/README.md)
|
||||
* [Spatialite教程](/Gis/Spatialite教程.md)
|
||||
* [Spatialite-Cookbook](/Gis/Spatialite-Cookbook.md)
|
||||
* [VTM引擎使用指南](/Gis/VTM引擎使用指南.md)
|
||||
99
gis/xviz.md
Normal file
99
gis/xviz.md
Normal file
@@ -0,0 +1,99 @@
|
||||
# Xviz协议
|
||||
|
||||
> 说明
|
||||
本文是参考Xviz翻译的学习笔记,英文功底好的同学可以直接去[官网](https://avs.auto/#/streetscape.gl/overview/introduction)学习
|
||||
|
||||
## 介绍
|
||||

|
||||
|
||||
## Xviz概念
|
||||
---
|
||||
XVIZ 协议的描述基于此处介绍的许多概念。
|
||||
|
||||
### Datum(数据资料)
|
||||
---
|
||||
一个我们希望可视化的数据对象(通常来自机器人系统)。
|
||||
|
||||
### Stream(数据流)
|
||||
---
|
||||
流是相同类型的时间戳数据序列(Datum)。不同类型的基准被组织在不同的流中。
|
||||
|
||||
- 流名称(Stream Name) - 每个流必须有一个唯一的名称。应用程序定义了这些名称,XVIZ 要求名称遵循以“/”分隔的类路径结构,例如“/vehicle/velocity”。
|
||||
- 流类型(Stream Type) - 流的类型由它包含的数据(Datum)类型定义。
|
||||
|
||||
下面的流类型是Xviz协议预定义的一些类型,Xviz提供了工具包以支持这些类型数据的解析、显示:
|
||||
|
||||
- 姿态流(Pose Stream) - 描述一个角色在它定义的相对坐标系统下的位置和方向的数据集。
|
||||
- 坐标类型(Geometry Types) - 原始的经纬度坐标。
|
||||
- 变量(Variables) - 数据组
|
||||
- 时间序列(Time series) - 一个大序列的独立样本(individual samples of a larger series)
|
||||
- 树形结构表 - 树形数据结构,用来记录密集的数据记录类型(hierarchical data structure, use to convey dense record type data)
|
||||
- 照片流(Image Stream) - 二进制格式的图片数据(Binary format image data)
|
||||
|
||||
### 数据源(Source)
|
||||
---
|
||||
一个数据源(Source)是一个Xviz流数据产生的源。它可以是从Url或者一个文件加载的预生成的Log数据,也可以对应一个从数据服务器(例如socket)产生的实时数据。(A source of XVIZ streams. A source can be a pre-generated log loaded from a URL or a file, but it can also be a live data served over e.g. a socket.)
|
||||
|
||||
一个Source包含一个或者多个Stream流以及关于流的元数据metadata描述。(Each source contains one or more streams, as well as a metadata about the streams.)
|
||||
|
||||
### 元数据(Metadata)
|
||||
---
|
||||
一个特殊的Xviz消息,它包含了关于Source以及Source包含的Stream的描述信息。(A special XVIZ message that contains descriptive information about the data source and its streams.)。
|
||||
|
||||
### 原始坐标(Primitive)
|
||||
---
|
||||
Xviz的原始坐标是指诸如点、线、面这样的可视化几何对象,这些对象可以被标记为特定的样式(例如颜色)。
|
||||
|
||||
### 样式(Style)
|
||||
---
|
||||
Xviz支持样式表,允许对基于流和类的对象属性做特殊的样式声明。(XVIZ support a form of stylesheets, allowing object properties to be specified based stream and class.)
|
||||
|
||||
### 对象(Object)
|
||||
---
|
||||
对象(Object)是一个被原始坐标、变量和时间序列标记的主体,这些标记可以跨流或者跨时间片段。
|
||||
|
||||
### 变量(Variable)
|
||||
一个值序列在单一时刻下发生的值,例如一辆行驶在特定路径上汽车的速度值,每次从流中获取的数据就是值序列在此时刻改变的更新值。
|
||||
(A sequences of values the occur at a one time. Like the speed of travel over a planned path for a vehicle. Each time you get an update to a variable stream, the full list of values changes.)
|
||||
|
||||
### 时间序列(Time Series)
|
||||
时间戳值可以包含在流中。每次流更新时,您都会得到一个新的时间戳的名值对。(Time stamped values can be included in streams. Each time the stream updates you get a new timestamp, value pair.)
|
||||
|
||||
### 声明式UI(Declarative UI)
|
||||
结构化数据格式可以映射为UI组件,如线形图、控制面板、表格以及视频面板,都与流中指定的数据名绑定。这些数据会和元数据一起发送,以使其与数据源紧密耦合。
|
||||
(A structured data schema that will map UI elements, such as plots, controls, tables, and video panels along with the stream name data bindings. This data is sent with the metadata to keep it closely coupled to the data source.)
|
||||
|
||||
### 视频(Video)
|
||||
XVIZ可以同步外部视频源数据,前提是该数据已经被提前按照指定方式编码过。(XVIZ can sync with external video sources provided that they have been encoded in a suitable way.)
|
||||
|
||||
### 编码(Encoding)
|
||||
XVIZ协议规范没有规定任何给定的编码,但是XVIZ库支持JSON中的编码和解析。(The XVIZ protocol specification does not prescribe any given encoding, however the XVIZ libraries come with support for encoding and parsing in JSON.)
|
||||
|
||||
## 用户引导
|
||||
Xviz提供了多种工具以帮助你生成、验证、解析和格式化Xviz数据。(XVIZ comes with a number of tools to help you generated, validate, parse and style XVIZ.)
|
||||
|
||||
这个引导将向你演示如何使用提供的工具将你的数据转换为Xviz协议的数据。(This guide will show you how to use these tools to convert your data into XVIZ.)
|
||||
|
||||
它包含下面几个方面:
|
||||
|
||||
- 解释Xviz必须的数据
|
||||
- 在Xviz中如何管理流(stream)、对象(object)和时间(time)
|
||||
- 解释帧概念(fram)以及与之相关的时间(time)和流(stream)
|
||||
- 如何在Xviz中创建UI对象
|
||||
|
||||
### 安装
|
||||
根据你需要对Xviz所做的操作(生成、解析、验证),可以单独安装其中的某些组件。
|
||||
|NPM moudule名| 描述 |
|
||||
|:-----------:|:---:|
|
||||
|@xviz/builder| 帮助构建和生成Xviz数据|
|
||||
|@xviz/parser | 帮助解析和处理Xviz数据|
|
||||
|@xviz/schema |用于验证 XVIZ JSON 数据的 JSON 结构|
|
||||
|
||||
例如如果需要生成Xviz数据,可以引入builder Api:
|
||||
```Javascript
|
||||
npm install @xviz/builder
|
||||
# or
|
||||
yarn add @xviz/builder
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user