質問
SVGファイルをGeoJSON形式に変換するにはどうすればよいですか?
望ましい結果:
D3.jsなどのライブラリを使用してコロプレスマップを作成したいと思います。
チャレンジ:
特定の国の特定の州の行政区域のパブリックドメインから取得できたSVGファイルがあります。私が知っているライブラリでそれを使用する前に、それをGeoJSONに変換する必要があると思います。
SVGファイルをGeoJSON形式に変換するにはどうすればよいですか?
D3.jsなどのライブラリを使用してコロプレスマップを作成したいと思います。
特定の国の特定の州の行政区域のパブリックドメインから取得できたSVGファイルがあります。私が知っているライブラリでそれを使用する前に、それをGeoJSONに変換する必要があると思います。
回答:
SVG画像を(少し不正確な)GeoJSONに変換するライブラリを作成しました。
SVGを手動で編集して、SVGの場所を緯度/経度に関連付ける2つのXMLタグを追加する必要があります。また、ファイルを変換するコマンドラインツールを提供します。必要に応じて、すべての最上位グループ(Illustratorがレイヤーをエクスポートするもの)を取得し、個別のファイルとしてエクスポートします。
# First, install Node.js
$ npm install svg2geojson -g # install globally for easy access to executable
$ svg2geojson -h
Usage: svg2geojson [options] file.svg
Options:
-t, --tolerance=0.1 Distance (world meters) to sample curves to. (default: 0.1)
-l, --layers Split top-level groups into separate files. (default: one file)
-o, --stdout Output GeoJSON to stdout. (default: write files with names based on the SVG/layer)
-m, --minimal Make the GeoJSON as small as possible (not pretty).
-p, --precision Number of decimal places to format JSON numbers to. (default:6, as GeoJSON recommends)
-d, --debug Include ids for each SVG element in the features. (default: no properties)
-v, --version Output the version of svg2geojson as the first line on stdout (0.7.0).
-h, --help Show this help message.
$ svg2geojson my.svg
Wrote my.geojson
画像の長方形の領域が長方形の緯度/経度の領域に対応することを前提とする単純な/不正確な非投影手法を使用します。たとえば、サンフランシスコの近くの幅約1マイル、高さ半マイルの長方形では、下端は上端より約4インチ長くなります。これは私のニーズに十分近いものでした。
現在、2次ベジエまたは楕円弧コマンドでパスを使用するSVGはサポートしていません。(これらの追加に取り組んでいます。)
<p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" />
ます。これらの4つの地理座標をこの8アイテムのデータセットに変換するにはどうすればよいですか。
私がチェックアウトしていないPhrogzによるコマンドラインツールがあります。
ここに来る人への答えは、「それは非常に難しい(少なくとも経験豊富なプログラマーであるが、経験の浅い地図製作者にとっては)」です。空間参照システム(SRS)がどのように機能するかについて、表面的な理解が必要です。多かれ少なかれ、QGISのようなものを使用して.SVGをジオコーディングする必要があります。それはどのように行われますか?まだ手がかりがありません。しかし、答えは次のとおりです。
「SVGには基本的な地理参照がないため、単純にSVGをGeoJSONに変換することはできません。」
続行する場合は、DXFファイルをジオリファレンスする方法の検索を開始します。
GermánCarrilloの答えは非常に有用です。
コマンドラインツールogr2ogrはそれを行うことができるはずです。何かのようなもの:
ogr2ogr -f "GeoJSON" dst.json src.svg
これらの形式は両方ともhttp://www.gdal.org/ogr_formats.htmlでサポートされています。ogr2ogrに慣れていない場合は、おそらくhttps://trac.osgeo.org/osgeo4w/からダウンロードしてインストールするのが最も簡単な方法です。
d3のコロプレスに画像を使用するためにSVGからGeoJSONに変換する必要はありませんが、他のライブラリでは必要になる場合があります。
SVGファイルのパス情報(マップの各州/国/州/区画に少なくとも1つのパスが必要)は、d3のSVG画像にデータをマップするのに十分です。
別の言い方をすれば、州/国/地域ごとに1つのパスのみを返す元のsvgでd3.selectを実行できる場合は、d3を使用してコロプレスを作成できます。これは通常、SVGにマップがある場合に当てはまります。スペースの位置、投影などを心配する必要がないため、GeoJSONファイルを使用するよりも実際は簡単です。元のSVGを調整して、不足している情報(状態名など、DOM IDまたはクラス)D3で使用する前に、通常は必要ありません。
一方、前述したように、SVGには地理情報や空間情報ではなく、パス/ライン情報のみが含まれているため、SVGからGeoJSONに変換する場合は、SVG画像に地理位置情報を追加/マッピングする必要があります。たとえば、最初にsvgからJSONに変換してから、位置情報を計算/追加し(これはマッピングしている地域によって異なります)、そこからGeoJSONを生成できます。私が知っている限りでは、あなたのためにこの仕事をするためのすぐに使えるツールはありません。
探している州のSVGではなく、シェープファイル形式をソースにしてみます。データはパブリックドメインであるため、データを見つけることができます。http://www.naturalearthdata.com/を試すか、ここで質問してください。次に、ShapefileからGeoJSONまたはTopoJSONに変換します。MapShaperはあなたの友達です。この時点から、D3は到達可能になります(優れたチュートリアル、マップを作成しましょう)