データ分析実践
中級問題チェック

問題 39 /40

次のGeoJSON形式の文字列に関して、誤った説明はどれか。 geojson = """{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "name": "yurakucho" }, "geometry": { "type": "Point", "coordinates": [ 35.675056, 139.763333 ] } } ] }"""

選択 1

「"type": "Point"」は、「点」を表すgeometory型の記述である。

選択 2

Shapelyのfrom_geojson関数で読み込み、to_geojson関数で書き出すことができる。

選択 3

Shapelyのfrom_geojson関数で、「"name": "yurakucho"」の情報を読み込むことができる。

選択 4

GeoPandasのto_fileメソッドで、GeoJSONファイルに出力することができる。

解説

選択肢3が正解です。 GeoJSONとは、JSONに基づいた地理空間データの記述形式です。点や線、ポリゴンなどの地理的な図形や、それらに関連する属性を表現するために使用されます。 問題文の変数「geojson」は、GeoJSONの記述形式に沿ったPythonの文字列です。 geojson = """{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "name": "yurakucho" }, "geometry": { "type": "Point", "coordinates": [ 35.675056, 139.763333 ] } } ] }""" 【選択肢1】 「"type": "Point"」は、「点」を表すgeometory型の記述である。 正しい説明です。 geometory型の記述を使ってGeoJSON形式にすることで、Jupyter上でオブジェクトを表示したり、他のアプリケーションにファイルを渡すことができます。 Point以外にも、「線」を表すLineStringや、「ポリゴン」を表すPolygonなどがあります。 なお、問題文の35.675056は緯度の値で、139.763333は経度の値です。 緯度は-90〜90の範囲で、経度は-180〜180の範囲になります。緯度は赤道をゼロ度として、北側がプラス符号、南側がマイナス符号になります。経度はグリニッジ子午線をゼロ度として、西側がプラス符号、東側がマイナス符号になります。 また、緯度はlatitude、経度はlongitudeで、latとlonと省略されることがあります。「経度のほうが範囲が広くて長いのでlong」と覚えます。 【選択肢2】 Shapelyのfrom_geojson関数で読み込み、to_geojson関数で書き出すことができる。 正しい説明です。 from_geojson関数で問題文のgeojsonを読み込むと、「POINT (35.67506 139.76333)」というshapelyオブジェクトになります。 Jupyter上で実行すると、次のようにPointが表示されます。 from shapely import from_geojson shapley_obj = from_geojson(geojson) shapley_obj ▶︎ このshapelyオブジェクト(shapley_obj)を、GeoJSON形式の文字列に出力するのがto_geojson関数です。 from shapely import to_geojson geojson2 = to_geojson(shapley_obj, indent=4) geojson2 ▶︎ '''{ "type": "GeometryCollection", "geometries": [ { "type": "Point", "coordinates": [ 35.675056, 139.763333 ] } ] }''' このように、Shapelyのfrom_geojson関数とto_geojson関数は、GeoJSON形式の文字列を読み書きする関数です。GeoJSON形式のファイルを読み書きする関数ではありません。 【選択肢3】 Shapelyのfrom_geojson関数で、「"name": "yurakucho"」の情報を読み込むことができる。 誤った説明です。 from_geojson関数は、propertiesの情報を読み込むことができません。 問題文のgeojsonには「"name": "yurakucho"」の情報がありますが、選択肢2の解説にあるように、from_geojson関数を使って読み込み、to_geojson関数で書き出す過程で、「"name": "yurakucho"」の情報が消えています。 【選択肢4】 GeoPandasのto_fileメソッドで、GeoJSONファイルに書き出すことができる。 正しい説明です。 問題文のgeojsonを、GeoPandasのread_file関数で読み込むと、GeoDataFrameに変換できます。 import geopandas as gpd geojson_gdf = gpd.read_file(geojson) geojson_gdf ▶︎ このようにGeoPandasのread_file関数で読み込むと、propertiesの情報も保持します。 このGeoDataFrameのgeometry列の要素は、shaplyのPointクラスのオブジェクトとなっており、Jupyterで表示することができます。 type(geojson_gdf.loc[0, 'geometry']) ▶︎ shapely.geometry.point.Point geojson_gdf.loc[0, 'geometry'] ▶︎ このGeoDataFrame(geojson_gdf)は、GeoPandasのto_fileメソッドでGeoJSONファイルに出力することができます。 geojson_gdf.to_file('sample.geojson') sample.geojson ------------------------------- { "type": "FeatureCollection", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features": [{ "type": "Feature", "properties": { "name": "yurakucho" }, "geometry": { "type": "Point", "coordinates": [ 35.675056, 139.763333 ] } } ] } ------------------------------- 出力したファイルを、GeoPandasのread_file関数で読み込むこともできます。 このように、GeoPandasのread_file関数はGeoJSON形式の文字列やファイルを読み込む関数で、to_fileメソッドはJSON形式のGeoJSONファイルを出力するメソッドです。 (公式書籍 p.296-301)