QGeoJson Namespace
QGeoJson 名前空間には、GeoJson ファイルから、または GeoJson ファイルへ地理位置情報をインポートおよびエクスポートする関数が含まれています。詳細...
Header: | #include <QGeoJson> |
qmake: | QT += location |
関数
QJsonDocument | exportGeoJson(const QVariantList &geoData) |
QVariantList | importGeoJson(const QJsonDocument &geoJson) |
QString | toString(const QVariantList &geoData) |
詳細説明
QGeoJson 名前空間のメソッドは、GeoJSON ドキュメント(Wikipedia のページ、RFC を参照)と、MapItemView の Model として使用できるQVariantMap 要素のQVariantList との間の変換に使用できます。
GeoJSON のインポート
importGeoJson() メソッドはQJsonDocument を受け取り、そこから単一のJSONオブジェクトを抽出する。GeoJSON RFC は、有効な GeoJSON ドキュメントがそのルートに単一の JSON オブジェクトを持つことを想定しています。このメソッドは、入力に対していかなる検証も行わない。インポーターは、単一のQVariantMap を含むQVariantList を返す。このマップは、常に少なくとも2つの(キー、値)ペアを持つ。最初のペアはキーとしてtype
を持ち、対応する値は GeoJSON タイプを識別する文字列である。この値は GeoJSON オブジェクト・タイプのいずれかである:Point
MultiPoint
,LineString
,MultiLineString
,Polygon
,MultiPolygon
,GeometryCollection
,FeatureCollection
。2 番目のペアは、data
をキーとし、対応する値は GeoJSON タイプに応じて、QGeoShape またはリストのいずれかである。次のセクションでは、GeoJson オブジェクトから Qt Location で知られているオブジェクトへの会話について詳しく説明します。Feature
properties
QVariantMap properties
型は、その中に含まれるジオメトリの型に変換され、(key, value) のペアが追加されます。
データノードの構造
単一タイプのジオメトリオブジェクト(Point
、LineString
、Polygon
)の場合、data
キーに対応する値はQGeoShape です:
- タイプが
Point
の場合、データはQGeoCircle で、center プロパティに点座標が格納されます。たとえば、次の GeoJSON ドキュメントには
Point
ジオメトリが含まれています:{ "type" : "Point", "data" : [60.0, 11.0] }
これは、次の構造を持つQVariantMap に変換されます:
{ type : "Point" data : QGeoCircle({60.000, 11.000}, -1) }
- タイプが
LineString
の場合、データはQGeoPath となる。たとえば、次の GeoJSON ドキュメントには
LineString
のジオメトリが含まれる:{ "type" : "LineString", "coordinates" : [[13.5, 43],[10.73, 59.92]] }
これは、以下の構造を持つQVariantMap に変換される:
{ type : "LineString", data : QGeoPath([{43.000, 13.500}, {59.920, 10.730}]) }
- タイプが
Polygon
の場合、データはQGeoPolygon となる(穴はサポートされる)。たとえば、次の GeoJSON ドキュメントには
Polygon
のジオメトリが含まれます:{ "type" : "Polygon", "coordinates" : [ [[17.13, 51.11], [30.54, 50.42], [26.70, 58.36], [17.13, 51.11]] ], "bbox" : [60, 60, -60, -60] }
これは、次の構造を持つQVariantMap に変換されます:
{ type : "Polygon" data : QGeoPolygon([{51.110, 17.130}, {50.420,30.540}, {58.360, 26.700}, {51.110, 17.130}]) }
同型のマルチパートジオメトリオブジェクト(MultiPoint
,MultiLineString
,MultiPolygon
)の場合、data
キーに対応する値はQVariantList です。リストの各要素は、上記の型のいずれかのQVariantMap です。このリストの要素はすべて同じ GeoJSON タイプになります:
- タイプが
MultiPoint
の場合、データは Point のリストである。たとえば、次の GeoJSON ドキュメントには
MultiPoint
のジオメトリが含まれます:{ "type" : "MultiPoint", "coordinates" : [ [11,60], [5.5,60.3], [5.7,58.90] ] }
これは、次の構造を持つQVariantMap に変換される:
{ type : "MultiPoint" data : [ { type : "Point" data : QGeoCircle({60.000, 11.000}, -1) }, { type : "Point" data : QGeoCircle({60.300, 5.500}, -1) }, { type : "Point" data : QGeoCircle({58.900, 5.700}, -1) } ] }
- タイプが
MultiLineString
の場合、データは LineStrings のリストである。たとえば、次の GeoJSON ドキュメントには
MultiLineString
ジオメトリが含まれています:{ "type" : "MultiLineString", "coordinates" : [ [[13.5, 43], [10.73, 59.92]], [[9.15, 45], [-3.15, 58.90]] ] }
これは、次の構造を持つQVariantMap に変換されます:
- タイプが
MultiPolygon
の場合、データはポリゴンのリストである。たとえば、次の GeoJSON ドキュメントには
MultiPolygon
ジオメトリが含まれます:{ "type" : "MultiPolygon", "coordinates" : [ [ [ [17.13, 51.11], [30.54, 50.42], [26.74, 58.36], [17.13, 51.11] ] ], [ [ [19.84, 41.33], [30.45, 49.26], [17.07, 50.10], [19.84, 41.33] ] ] ] }
これは、次の構造を持つQVariantMap に変換されます:
{ type : "MultiPolygon" data : [ { type : "Polygon" data : QGeoPolygon([{51.110, 17.130}, {50.420,30.540}, {58.360, 26.700}, {51.110, 17.130}]) }, { type : "Polygon" data : QGeoPolygon([{41.330, 19.840}, {49.260,30.450}, {50.100, 17.070}, {41.330, 19.840}]) } ] }
GeometryCollection
は、他のジオメトリ タイプの異種合成です。結果のQVariantMap では、data
メンバの値は、GeometryCollection 自体を含め、さまざまなジオメトリの QVariantMap が配置されたQVariantList です。
たとえば、次のGeometryCollection
:
{ "type" : "GeometryCollection", "geometries" : [ { "type" : "MultiPoint", "coordinates" : [ [11,60], [5.5,60.3], [5.7,58.90] ] }, { "type" : "MultiLineString", "coordinates" : [ [[13.5, 43], [10.73, 59.92]], [[9.15, 45], [-3.15, 58.90]] ] }, { "type" : "MultiPolygon", "coordinates" : [ [ [[17.13, 51.11], [30.54, 50.42], [26.74, 58.36], [17.13, 51.11]] ], [ [[19.84, 41.33], [30.45, 49.26], [17.07, 50.10], [19.84, 41.33]] ] ] } ] }
これは、以下の構造を持つQVariantMap に変換されます:
{ type : "GeometryCollection" data : [ { type : "MultiPolygon" data : [ { type : "Polygon" data : QGeoPolygon([{41.330, 19.840}, {49.260, 30.450}, {50.100, 17.070}, {41.330, 19.840}]) } { type : "Polygon" data : QGeoPolygon([{51.110, 17.130}, {50.420, 30.540}, {58.360, 26.740}, {51.110, 17.130}]) } ] } { type : "MultiLineString" data : [ { type : "LineString" data : QGeoPath([{45.000, 9.150}, {58.900, -3.150}]) } { type : "LineString" data : QGeoPath([{43.000, 13.500}, {59.920, 10.730}]) } ] } { type : "MultiPoint" data : [ { type : Point data : QGeoCircle({58.900, 5.700}, -1) }, { type : Point data : QGeoCircle({60.300, 5.500}, -1) }, { type : Point data : QGeoCircle({60.000, 11.000}, -1) } ] } ] }
Feature
オブジェクトは、前述のジオメトリの 1 つと関連する属性から構成され、前述の 7 つのジオメトリ タイプの 1 つにproperties
メンバを加えた構造になっています。このメンバの値はQVariantMap である。Feature と含まれるジオメトリを区別する唯一の方法は、QVariantMap にproperties
ノードが存在するかどうかをチェックすることである。
例えば、以下のFeature
:
{ "type" : "Feature", "id" : "Poly", "properties" : { "text" : "This is a Feature with a Polygon" }, "geometry" : { "type" : "Polygon", "coordinates" : [ [[17.13, 51.11], [30.54, 50.42], [26.70, 58.36], [17.13, 51.11]], [[23.46, 54.36], [20.52, 51.91], [28.25, 51.50], [26.80, 54.36], [23.46, 54.36]] ] } }
は、以下の構造を持つQVariantMap に変換されます:
{ type : "Polygon" data : QGeoPolygon([{51.110, 17.130}, {50.420,30.540}, {58.360, 26.700}, {51.110, 17.130}]) properties : {text : "This is a Feature with a Polygon"} }
FeatureCollection
は、Feature オブジェクトのコンポジションである。FeatureCollection 内のdata
メンバの値は、Feature タイプ QVariantMaps で指定されたQVariantList です。
たとえば、次のFeatureCollection
:
{ "type" : "FeatureCollection", "features" : [ { "type" : "Feature", "id" : "Poly", "properties" : { "text" : "This is a Feature with a Polygon" }, "geometry" : { "type" : "Polygon", "coordinates" : [ [[17.13, 51.11], [30.54, 50.42], [26.70, 58.36], [17.13, 51.11]], [[23.46, 54.36], [20.52, 51.91], [28.25, 51.50], [26.80, 54.36], [23.46, 54.36]] ] } }, { "type" : "Feature", "id" : "MultiLine", "properties" : { "text" : "This is a Feature with a MultiLineString" }, "geometry" : { "type" : "MultiLineString", "coordinates" : [ [[13.5, 43], [10.73, 59.92]], [[9.15, 45], [-3.15, 58.90]] ] } } ] }
は、次のような構造を持つQVariantMap に変換されます:
{ type : "FeatureCollection" data : [ { type : "MultiLineString" data : [ { type : "LineString" data : QGeoPath([{45.000, 9.150}, {58.900, -3.150}]) } { type : "LineString" data : QGeoPath([{43.000, 13.500}, {59.920, 10.730}]) } ] properties : {text : "This is a Feature with a MultiLineString"} }, { type : "Polygon" data : QGeoPolygon({51.110, 17.130}, {50.420, 30.540}, {58.360, 26.700}, {51.110, 17.130}) properties : {text : "This is a Feature with a Polygon"} } ] }
GeoJSON のエクスポート
エキスポーターは、importer によって返されたQVariantList を受け取り、JSON ドキュメントを返します。エクスポーターはインポーターを補完するものであり、逆の動作を実行するからである。
toString関数
toString は、デバッグのために、importGeoJson のように構造化されたQVariantList の内容を、QString に prettyfied フォーマットで出力します。
関数ドキュメント
QJsonDocument QGeoJson::exportGeoJson(const QVariantList &geoData)
このメソッドは、Importing GeoJSON のセクションで説明されているような構造になっていることが期待されるQVariantList geoData を、GeoJSON に変換されたデータを含むQJsonDocument にエクスポートする。
注意: このメソッドは入力のバリデーションを行いません。
importGeoJsonも参照 。
QVariantList QGeoJson::importGeoJson(const QJsonDocument &geoJson)
このメソッドは、有効な GeoJSON データを含むと予想されるgeoJson ドキュメントを、Importing GeoJSON セクションで説明されているような構造のQVariantList にインポートする。
注意: このメソッドは、入力のバリデーションは行いません。
exportGeoJsonも参照してください 。
QString QGeoJson::toString(const QVariantList &geoData)
このメソッドは、Importing GeoJSON で説明されているように構造化されたQVariantList geoData を受け取り、同じデータを可読形式で含む文字列を返します。
本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。