天天看點

地圖資料--GeoJSON介紹postgres-xl 導入 “GeoJSON” 地圖資料

postgres-xl 導入 “GeoJSON” 地圖資料

一、GeoJSON 介紹

GeoJSON是一種對各種地理資料結構進行編碼的格式。
GeoJSON對象可以表示幾何(Geometry)、特征(Feature)或者特征集合(FeatureCollection)。
GeoJSON支援下面幾何類型:點(Point)、線(LineString)、面(Polygon)、
                      多點(MultiPoint)、多線(MultiLineString)、
                      多面(MultiPolygon)和幾何集合(GeometryCollection)。
GeoJSON裡的特征包含一個幾何對象和其他屬性,特征集合表示一系列特征。
           

一個完整的GeoJSON資料結構可以稱為一個對象。在GeoJSON裡,對象由名/值對–也稱作成員的集合組成。對每個成員來說,名字總是字元串。成員的值要麼是字元串、數字、對象、數組,要麼是下面文本常量中的一個:”true”,”false”和”null”。數組值是由上面所說的元素組成。

GeoJSON特征集合–舉例:

{ "type": "FeatureCollection",  
  "features": [  
        { "type": "Feature",  
          "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},  
          "properties": {"prop0": "value0"}  
         },  
        { "type": "Feature",  
          "geometry": {  
          "type": "LineString",  
          "coordinates": [  
            [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]  
           ]  
         },  
        "properties": {  
              "prop0": "value0",  
              "prop1": 0.0  
                 }  
        },  
        { "type": "Feature",  
          "geometry": {  
              "type": "Polygon",  
              "coordinates": [  
                    [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],  
                    [100.0, 1.0], [100.0, 0.0] ]  
                ]  
           },  
          "properties": {  
              "prop0": "value0",  
              "prop1": {"this": "that"}  
           }  
         }  
     ]  
  }  
           

GeoJSON對象

  • GeoJSON總是由一個單獨的對象組成。這個對象表示幾何、特征或者特征集合。
  • GeoJSON對象可能有任何數目成員(名/值對)。
  • GeoJSON對象必須由一個名字為”type”的成員。這個成員的值是由GeoJSON對象的類型所确定的字元串。 type成員的值必須是下面之一: * “Point”, “MultiPoint”, “LineString”, “MultiLineString”, “Polygon”, “MultiPolygon”, “GeometryCollection”, “Feature”, 或者 “FeatureCollection”。這兒type成員值必須如這兒所示。
  • GeoJSON對象可能有一個可選的”crs”成員,它的值必須是一個坐标參考系統的對象。
  • GeoJSON對象可能有一個”bbox”成員,它的值必須是邊界框數組。

1.幾何對象

幾何是一種GeoJSON對象,這時type成員的值是下面字元串之一:”Point”, “MultiPoint”, “LineString”, “MultiLineString”, “Polygon”, “MultiPolygon”, 或者”GeometryCollection”。 除了“GeometryCollection”外的其他任何類型的GeoJSON幾何對象必須由一個名字為”coordinates”的成員。coordinates成員的值總是數組。這個數組裡的元素的結構由幾何類型來确定。

  • 位置

位置是基本的幾何結構。幾何對象的”coordinates”成員由一個位置(這兒是幾何點)、位置數組(線或者幾何多點),位置數組的數組(面、多線)或者位置的多元數組(多面)組成。

位置由數字數組表示。必須至少兩個元素,可以有更多元素。元素的順序必須遵從x,y,z順序(投影坐标參考系統中坐标的東向、北向、高度或者地理坐标參考系統中的坐标長度、緯度、高度)。任何數目的其他元素是允許的—其他元素的說明和意義超出了這篇規格說明的範圍。

位置和幾何的例子在附錄A.幾何例子裡呈現。

  • 1.對類型”Point”來說,“coordinates”成員必須是一個單獨的位置。

    2.多點對類型”MultiPoint”來說,”coordinates”成員必須是位置數組。

    3.線對類型”LineString”來說,“coordinates”成員必須是兩個或者多個位置的數組。

    線性環市具有4個或者更多位置的封閉的線。第一個和最後一個位置是相等的(它們表示相同的的點)。

    雖然線性環沒有鮮明地作為GeoJSON幾何類型,不過在面幾何類型定義裡有提到它。

    4.多線對類型“MultiLineString”來說,”coordinates”成員必須是一個線坐标數組的數組。

    5.面對類型”Polygon”來說,”coordinates”成員必須是一個線性環坐标數組的數組。

    對擁有多個環的的面來說,第一個環必須是外部環,其他的必須是内部環或者孔。

    6.多面對類型”MultiPlygon”來說,”coordinates”成員必須是面坐标數組的數組。

    7.幾何集合類型為”GeometryCollection”的GeoJSON對象是一個集合對象,它表示幾何對象的集合。

    幾何集合必須有一個名字為”geometries”的成員。與”geometries”相對應的值是一個數組。

    這個數組中的每個元素都是一個GeoJSON幾何對象。

2.特征對象

1.類型為”Feature”的GeoJSON對象是特征對象。

  2.特征對象必須由一個名字為”geometry”的成員,這個幾何成員的值是上面定義的幾何對象或者JSON的null值。
           

特征對戲那個必須有一個名字為“properties”的成員,這個屬性成員的值是一個對象(任何JSON對象或者JSON的null值)。

3.如果特征是常用的辨別符,那麼這個辨別符應當包含名字為“id”的特征對象成員。
           

3.特征集合對象

1.類型為”FeatureCollection”的GeoJSON對象是特征集合對象。

  2.類型為”FeatureCollection”的對象必須由一個名字為”features”的成員。與“features”相對應的值是一個數組。這個數組中的每個元素都是上面定義的特征對象。
           

二、坐标參考系統對象

GeoJSON對象的坐标參考系統(CRS)是由它的”crs”成員(指的是下面的CRS對象)來确定的。如果對象沒有crs成員,那麼它的父對象或者祖父對象的crs成員可能被擷取作為它的crs。如果這樣還沒有獲得crs成員,那麼預設的CRS将應用到GeoJSON對象。

預設的CRS是地理坐标參考系統,使用的是WGS84資料,長度和高度的機關是十進制标示。

名字為”crs”成員的值必須是JSON對象(指的是下面的CRS對象)或者JSON的null。 | 如果CRS的值為null,那麼就假設沒有CRS了。 | crs成員應當位于(特征集合、特征、幾何的順序的)層級結構裡GeoJSON對象的最頂級,而且在自對象或者孫子對象裡不應該重複或者覆寫。 | 非空的CRS對象有兩個強制擁有的對象:”type”和”properties”。 | type成員的值必須是字元串,這個字元串說明了CRS對象的類型。 | 屬性成員的值必須是對象。 | CRS應不能更改坐标順序(見2.1.1.位置)。

1. 名字CRS

CRS對象可以通過名字來表明坐标參考系統。在這種情況下,它的”type”成員的值必須是字元串”name”。它的”properties”成員的值必須是包含”name”成員的對象。這個”name”成員的值必須是辨別坐标參考系統的字元串。比如“urn:ogc:def:crs:OGC:1.3:CRS84“的OGC CRS的URN應當優先于舊的辨別符如”EPSG:4326”得到選用:

[javascript] view plain copy
"crs": {  
  "type": "name",  
  "properties": {  
"name": "urn:ogc:def:crs:OGC:1.3:CRS84"  
}  
  }  
           

2. 連接配接CRS

CRS對象也可以連接配接到網際網路上的CRS參數。在這種情況下,它的”type”成員的值必須是字元串”link”,它的”properties”成員的值必須是一個連接配接對象(見3.2.1.連接配接對象) 。 幾點人

  • 連接配接對象

1.連接配接對象由一個必需的成員:”href”,和一個可選的成員:”type”。

2.必需的”href”成員的值必須是解引用的URI(統一資源辨別)。

3.可選的”type”成員的值必須是字元串,而且這個字元串暗示了所提供的URI裡用來表示CRS參數的格式。建議值是:”proj4”,”ogcwkt”,esriwkt”,不過可以使用其他值:

[javascript] view plain copy
"crs": {  
  "type": "link",  
  "properties": {  
"href": "http://example.com/crs/42",  
"type": "proj4"  
}  
           

相對連接配接常常可以作為輔助檔案裡的CRS的直接處理器: `”crs”:{“type”:”link”,”properties”:{“href”:”data.crs”,”type”:”ogcwkt”}}

三、邊界框

為了包含幾何、特征或者特征集合的坐标範圍資訊,GeoJSON對象可能有一個名字為”bbox的成員。 *

bbox成員的值必須是2*n數組,這兒n是所包含幾何對象的維數,并且所有坐标軸的最低值後面跟着最高者值。 * bbox的坐标軸的順序遵循幾何坐标軸的順序。除此之外,bbox的坐标參考系統假設比對它所在GeoJSON對象的坐标參考系統。

特征對象上的bbox成員的例子:

[javascript] view plain copy
{ "type": "Feature",  
  "bbox": [-180.0, -90.0, 180.0, 90.0],  
  "geometry": {  
"type": "Polygon",  
"coordinates": [[  
  [-180.0, 10.0], [20.0, 90.0], [180.0, -5.0], [-30.0, -90.0]  
  ]]  
}  
  ...  
  }  
           

特征集合對象bbox成員的例子:

[javascript] view plain copy
{ "type": "FeatureCollection",  
  "bbox": [100.0, 0.0, 105.0, 1.0],  
  "features": [  
...  
]  
  }  
           

附錄A.集合例子

下面例子中的每一個都表示一個完整的GeoJSON對象。 注意: JSON對象裡的結尾的空白字元沒有意義。 例子裡所用的空白符有助于說明這個資料結構,不過不是必需的。

點坐标是按照x,y順序的(投影坐标的東向、北向,地理坐标的長度、高度):

[javascript] view plain copy
{ "type": "Point", "coordinates": [100.0, 0.0] }  
           

線的坐标是位置數組(見2.1.1.位置):

[javascript] view plain copy
{ "type": "LineString",  
  "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]  
  }  
           

面的坐标是線性環坐标數組的數組。這個數組的第一個元素表示的是外部環。其他後續的元素表示的内部環(或者孔)。

1.沒有孔的:

[javascript] view plain copy
{ "type": "Polygon",  
  "coordinates": [  
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]  
]  
 }  
           

2.有孔的:

[javascript] view plain copy
{ "type": "Polygon",  
  "coordinates": [  
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ],  
[ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]  
]  
 }  
           
  • 多點

多點的坐标是位置數組:

[javascript] view plain copy
{ "type": "MultiPoint",  
  "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]  
  }  
           
  • 多線

多線的坐标是線坐标數組的數組:

[javascript] view plain copy
{ "type": "MultiLineString",  
  "coordinates": [  
  [ [100.0, 0.0], [101.0, 1.0] ],  
  [ [102.0, 2.0], [103.0, 3.0] ]  
]  
  }  
           
  • 多面

多面的坐标是面坐标數組的數組:

[javascript] view plain copy
{ "type": "MultiPolygon",  
  "coordinates": [  
[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],  
[[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],  
 [[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]  
]  
  }  
           
  • 幾何集合

幾何集合的幾何數組裡的每個元素都是上面所描述的幾何對象之一:

[javascript] view plain copy
{ "type": "GeometryCollection",  
  "geometries": [  
{ "type": "Point",  
  "coordinates": [100.0, 0.0]  
  },  
{ "type": "LineString",  
  "coordinates": [ [101.0, 0.0], [102.0, 1.0] ]  
  }  
  ]  
}  
           

繼續閱讀