.SVGファイルをGeoJSONに変換する方法


12

質問

SVGファイルをGeoJSON形式に変換するにはどうすればよいですか?

望ましい結果:

D3.jsなどのライブラリを使用してコロプレスマップを作成したいと思います。

チャレンジ:

特定の国の特定の州の行政区域のパブリックドメインから取得できたSVGファイルがあります。私が知っているライブラリでそれを使用する前に、それをGeoJSONに変換する必要があると思います。


2
特定の国の特定の州の正確な行政区域とは何ですか?間違った問題を解決するために戦うのではなく、SHPまたはGeoJSONの利用可能なファイルを見つける手助けをすることができます。
ThomasG77

回答:


5

SVG画像を(少し不正確な)GeoJSONに変換するライブラリを作成しました。

svg2geojson

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はサポートしていません。(これらの追加に取り組んでいます。)


そのリポジトリのプルリクエストの2017年12月のバージョンは、2ではなく3ポイントでジオリファレンスしたい/必要な場合にも機能します逆さまに。また、SVGのプロパティをGeoJSONに結合するには、もう少し手間がかかります。しかし、将来的に使用することを楽しみにしています。クールなモジュールをありがとう。
thadk

これはおそらく理想的ではありませんが、SVGの変換されたPNGでQGISジオリファレンサープラグインを使用して、ポイントのテーブルを作成し、線形長方形シフトが妥当であるかどうかを確認するのに役立ちましたが、 SVG空間を正しくポイントします。
thadk

ライブラリを調べました。変換は、地理座標境界四角形内のSVGポイントの変換を介して行われることを理解しています。ただし、これにより4ポイントになります(つまり、leftLongitude = "0.1617178" topLatitude = "23.4999998" rightLongitude = "15.9990339" bottomLatitude = "11.694295")。2つのXMLタグは、すべて8ビットのデータを暗示しており、Prognozのドキュメントでは完全に混乱してい<p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" /> ます。これらの4つの地理座標をこの8アイテムのデータセットに変換するにはどうすればよいですか。
ジェローム

4

私がチェックアウトしていないPhrogzによるコマンドラインツールがあります。

/gis//a/245085/35596


ここに来る人への答えは、「それは非常に難しい(少なくとも経験豊富なプログラマーであるが、経験の浅い地図製作者にとっては)」です。空間参照システム(SRS)がどのように機能するかについて、表面的な理解が必要です。多かれ少なかれ、QGISのようなものを使用して.SVGをジオコーディングする必要があります。それはどのように行われますか?まだ手がかりがありません。しかし、答えは次のとおりです。

「SVGには基本的な地理参照がないため、単純にSVGをGeoJSONに変換することはできません。」

続行する場合は、DXFファイルをジオリファレンスする方法の検索を開始します。

QGIS Affine変換のパラメーターを計算する方法は?

GermánCarrilloの答えは非常に有用です。


1
たぶん、この情報を質問に含める必要があります。つまり、svgファイルはジオリファレンスされていません。または、QGISなどを使用して.SVGをジオコーディングするにはどうすればよいでしょうか?
user55937

SVG形式内で地理参照は可能ですか?
マイケルペル

2
正確にはわかりません。SVGではなく、スケーリングするためのSVG形式のマップがあるように思えます。そのため、既知の座標を持つ地上制御点が必要になり、データに何らかの変換を適用して、実際の座標系でジオリファレンスするように聞こえます。多分、これらは役立つでしょうか?:gis.stackexchange.com/questions/33208/…gisforthought.com/…-user55937 16
1

1

コマンドラインツールogr2ogrはそれを行うことができるはずです。何かのようなもの:

ogr2ogr -f "GeoJSON" dst.json src.svg

これらの形式は両方ともhttp://www.gdal.org/ogr_formats.htmlでサポートされています。ogr2ogrに慣れていない場合は、おそらくhttps://trac.osgeo.org/osgeo4w/からダウンロードしてインストールするのが最も簡単な方法です。


3
それはまっすぐ、ということではありませんOGR SVGドライバは 3857:のみ「Cloudmadeベクトルストリームサーバ」でとEPSGで作成されたSVGの特別な種類をサポートしています。
-AndrewHarvey

1

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を生成できます。私が知っている限りでは、あなたのためにこの仕事をするためのすぐに使えるツールはありません。


0

探している州のSVGではなく、形式をソースにしてみます。データはパブリックドメインであるため、データを見つけることができます。http://www.naturalearthdata.com/を試すか、ここで質問してください。次に、ShapefileからGeoJSONまたはTopoJSONに変換します。MapShaperはあなたの友達です。この時点から、D3は到達可能になります(優れたチュートリアル、マップを作成しましょう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.