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) のペアが追加されます。

データノードの構造

単一タイプのジオメトリオブジェクト(PointLineStringPolygon )の場合、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 に変換されます:

    {
      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}])
        }
      ]
    }
  • タイプが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 と含まれるジオメトリを区別する唯一の方法は、QVariantMapproperties ノードが存在するかどうかをチェックすることである。

例えば、以下の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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。