7.gis矢量数据格式

前言

这里只说明二维数据格式,三维数据后面会提到,常见的二维矢量数据格式基本有shp系列、json系列的(geojson、topojson)、数据库系列(gdb、mdb)、字符串系列(WKT、WKB)以及其他(KML、KMZ、CZML)

shpfile

该种文件格式是由多个文件组成的。其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是".shp", ".shx"与 ".dbf"文件
必须的文件:

1.shp — 图形格式,用于保存元素的几何实体。

2.shx — 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。

3.dbf — 属性数据格式,以dBase III+ 的数据表格式存储每个几何形状的属性数据。

其他可选的文件:

1.prj — 投帧式,用于保存地理坐标系统与投影信息,是一个存储well-known text投影描述符的文本文件。

2.sbn and .sbx — 几何体的空间索引

3.fbn and .fbx — 只读的Shapefiles的几何体的空间索引

4.ain and .aih — 列表中活动字段的属性索引。

5.ixs — 可读写Shapefile文件的地理编码索引

6.mxs — 可读写Shapefile文件的地理编码索引(ODB格式)

7.atx — .dbf文件的属性索引,其文件名格式为shapefile.columnname.atx (ArcGIS 8及之后的版本)

8.shp.xml — 以XML格式保存元数据。

9.cpg — 用于描述.dbf文件的代码页,指明其使用的字符编码。

存储特性:.shp文件或.dbf文件最大的体积不能够超过2 GB(或2位)。也就是说,一个shapefile最多只能够存储七千万个点坐标。文件所能够存储的几何体的数目取决于单个要素所使用的顶点的数目。
属性数据库格式所使用的.dbf文件基于一个比较古老的[dBase]标准。这种数据库格式天生有许多限制,例如:无法存储[空值]。这对于数量数据来说是一个严重的问题,因为空值通常都用0来代替,这样会歪曲很多统计表达的结果。对字段名或存储值中的[Unicode]支持不理想。字段名最多只能够有10个字符。最多只能够有255个字段。
在每个.shp, .shx与.dbf文件之中,图形在每个文件的排序是一致的。也就是说,.shp的第一条记录与.shx及.dbf之中的第一条记录相对应,如此类推。此外,在.shp与.shx之中,有许多字段的字节序是不一样的。因此用户在编写读取这些文件格式的程序时,必须十分小心地处理不同文件的不同字节序。

geojson

GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法(JavaScript Object Notation, 简称JSON)的地理空间信息数据交换格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON 支持下面几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。

{
	"type": "FeatureCollection",
	"features": [
		{
			"type": "Feature",
			"properties": {
				
				"name": "ddd",
				
			},
			"geometry": {
                "type": "MultiPolygon",
                "coordinates": [[108.953361,34.292663],[108.953404,34.289539]]
                }
        } 
       ] 
 }

获取方式

全国及各省市区县数据点击获取(阿里云基于高德数据)

WKT与WKB

WKT(Well-known text)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB,postgis数据库就是使用WKB格式储存空间数据的

WKT(Well-known binary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定。WKT可以表示的几何对象包括:点,线,多边形,TIN(不规则三角网)及多面体。可以通过几何集合的方式来表示不同维度的几何对象。

WKT格式如下:

点:POINT(103.365926 30.558386)

线:LINESTRING(104.079727 30.540988,104.067608 30.535152)

面:POLYGON ((103.88109322629896 31.089692013481724, 104.01292916379867 30.88919152520053, 103.75200387083044 30.880951779106482, 103.88109322629896 31.089692013481724))

多面:MULTIPOLYGON(((104.4685243069 30.3336904936,104.4670262929 30.33037331,104.4644834911 30.3312774512,104.464433366 30.3313740694,104.4659245068 30.3346309237,104.4685243069 30.3336904936)))

WKB格式如下:0101000020E610000058589BBF3CCF5A4040954185082D4140

WKT与WKB转换

使用postgis函数

wkb转wkt: st_astext(geom)

wkt转wkb: st_geomfromtext(text)

geojson与WKT互转

import { stringify, parse } from ‘wellknown’; // 坐标转换

stringify:geojson转wkt;

parse:wkt转geojson;

GDB

gdb文件地理数据库(File Geodatabase)数据后缀表达为.gdb,整体组织为文件夹,可以存储、查询和管理空间数据和非空间数据。在不使用DBMS的情况下能够扩展并存储大量数据。文件地理数据库可同时有多个用户使用,但一个数据只能有一个用户编辑。因此,一个文件地理数据库可以由多个编辑者访问,但必须编辑不同的数据。
可使用java GADL库读取,也可使用arcgis for android sdk 读取

mdb个人地理数据库(Personal Geodatabase)

数据后缀表达为.mdb,整体组织为文件,所有的数据集都存储于Microsoft Access数据文件内,在Microsoft Access数据文件中存储和管理空间数据和非空间数据。个人数据库存储在Access数据库中,其最大容量为2 GB,并且一次只有一个用户可以编辑个人地理数据库中的数据。
可使用java GADL库读取,也可使用arcgis for android sdk 读取

topojson

TopoJSON 是 GeoJSON 的扩展,增加了拓扑逻辑的编码。TopoJSON 文件中的几何图形不是独立地表示,而是由共享的线段(称为弧线)拼接而成。TopoJSON 消除了冗余,提供了比 GeoJSON 更紧凑的几何表示;典型的 TopoJSON 文件比 GeoJSON 等价文件小 80%。此外,TopoJSON 还为使用拓扑的应用提供了便利,如拓扑保护形状简化、自动地图着色和制图。

{
  "type":"Topology",
  "transform":{
    "scale": [1,1],      //缩放比例
    "translate": [0,0] //相对于原点([0,0])的偏移量
  },
  "objects":{ 
    "two-squares":{
      "type": "GeometryCollection",
      "geometries":[
        {"type": "Polygon", "arcs":[[0,1]],"properties": {"name": "Left_Polygon" }},
        {"type": "Polygon", "arcs":[[2,-1]],"properties": {"name": "Right_Polygon" }}
      ]
    },
    "one-line": {
      "type":"GeometryCollection",
      "geometries":[
        {"type": "LineString", "arcs": [3],"properties":{"name":"Under_LineString"}}
      ]
    },
    "two-places":{
      "type":"GeometryCollection",
      "geometries":[
        {"type":"Point","coordinates":[0,0],"properties":{"name":"Origine_Point"}},
        {"type":"Point","coordinates":[0,-1],"properties":{"name":"Under_Point"}}
      ]
    }
  },
  "arcs": [
    [[1,2],[0,-2]],
    [[1,0],[-1,0],[0,2],[1,0]],
    [[1,2],[1,0],[0,-2],[-1,0]],
    [[0,-1],[2,0]]
  ]
}

KML

KML(Keyhole Markup Language,Keyhole 标记语言)最初是由Google 旗下的Keyhole 公司开发和维护的一种基于XML 的标记语言,利用XML 语法格式描述地理空间数据(如点、线、面、多边形和模型等),适合网络环境下的地理信息协作与共享。2008 年4月,KML的最新版本2.2 被OGC 宣布为开放地理信息编码标准,并改由OGC 维护和发展。
KML文件的打开方式:
1、最常用的打开方式,双击直接打开,打开的程序是谷歌地球,会显示为一条自由曲线(路线)。
2、可以在轨迹共享网站上打开,比如六只脚,专门提供共享KML文件(绝大多数是GPS轨迹文件)。跟GE类似,打开后也显示为一条自由曲线(路线)。
3、以文本方式打开。KML文件本身为文本格式,因此可以使用字处理程序打开。以这种方式打开KML文件的目的是相对专业人士对该文件内容进行自由创建,编辑,或修改。
4.arcmap

KMZ

KMZ文件是压缩过的KML文件。由于 KMZ 是压缩包,因此,它不仅能包含 KML文本,也能包含其他类型的文件。如果您的地标描述中链接了本地图片等其他文件,建议您在保存地标时,保存类型选 KMZ 而不选 KML,Google Earth 会把您链接的图片等文件复制一份夹 KMZ 压缩包中。这样,您就可以将包含丰富信息的地标文件发给朋友,一起分享了。八、GMLGML(Geography Madcup Language)是由OGC制定的基于XML的地理信息(包括几何和属性特征)编码、传输、存储的XML语法规范。它提供了一个开放的,用来定义地理空间数据的框架,允许用户开发出基于XML规范的应用子集H1。由于GML数据在描述、存储、传输地理空间信息时具有很强的可理解性,如果不采取安全措施,GML数据在传输过程中很容易被非法用户截获和篡改。
arcmap中打开
与KML都可转shp

czml

CZML是一种用来描述动态场景的JSON架构的语言,主要用于Cesium 在浏览器中的展示。它可以用来描述点、线、布告板、模型以及其他的图元,同时定义他们是怎样随时间变化的。Cesium拥有一套富客户端API,通过CZML采用数据驱动的方式,不用写代码我就可以使用通用的Cesium viewer构建出丰富的场景。

CZML是cesium中很重要的一个概念,也是一个亮点,CZML使得cesium很酷很炫地展示动态数据成为可能。

CZML是一种JSON格式的字符串,用于描述与时间有关的动画场景,CZML包含点、线、地标、模型、和其他的一些图形元素,并指明了这些元素如何随时间而变化。某种程度上说, Cesium 和 CZML的关系就像 Google Earth 和 KML。

CZML 的一个典型结构如下。片段描述了两个包(packet,这里每个包描述了一个点),每个包的id,position和color。
格式如下:

[
    // packet one
    {
        "id": "GroundControlStation"
        "position": { "cartographicDegrees": [-75.5, 40.0, 0.0] },
        "point": {
            "color": { "rgba": [0, 0, 255, 255] },
        }
    },
    // packet two
    {
        "id": "PredatorUAV",
        // ...
    }
]

{  
    // ...  
    "someInterpolatableProperty": {  
        "cartesian": [  
            "2012-04-30T12:00Z", 1.0, 2.0, 3.0, //表示当时间为2012-04-30T12:00Z,坐标为(1,2,3)
            "2012-04-30T12:01Z", 4.0, 5.0, 6.0, //表示当时间为2012-04-30T12:01Z,坐标为(4,5,6)
            "2012-04-30T12:02Z", 7.0, 8.0, 9.0  //表示当时间为2012-04-30T12:02Z,坐标为(7,8,9)
        ]  
    }  
}

{  
    // ...  
    "someInterpolatableProperty": {  
        "epoch": "2012-04-30T12:00Z", //表示时间起点为2012-04-30T12:00:00 
        "cartesian": [  
            0.0, 1.0, 2.0, 3.0,  //从起点开始,第0秒时坐标为(1,2,3)
            60.0, 4.0, 5.0, 6.0, //从起点开始,第60秒时坐标为(4,5,6) 
            120.0, 7.0, 8.0, 9.0 //从起点开始,第120秒时坐标为(7,8,9) 
        ]  
    }  
}

{  
    // ...  
    "someInterpolatableProperty": {  
        "epoch": "2012-04-30T12:00Z",  
        "cartesian": [  
            0.0, 1.0, 2.0, 3.0,  
            60.0, 4.0, 5.0, 6.0,  
            120.0, 7.0, 8.0, 9.0  
        ],  
        "interpolationAlgorithm": "LAGRANGE",  //插值算法为LAGRANGE,还有HERMITE,GEODESIC
        "interpolationDegree": 5 //1为线性插值,2为平方插值
    },  }

你可能感兴趣的:(gis开发学习,arcgis,数据库)