Erlang 地図
本ブログ的な意味での Erlang 関係国の分布図を作りました。geotools.rb に Geo::create_lambert_conformal_conic_2sp_for(env) を追加しています。
Erlang を作った国、Erlang の出身国、erlangen という単語がある国
http://d.hatena.ne.jp/hfu/20071108 で出てきた、スウェーデン、デンマーク、ドイツの位置関係を明示したくなり、以下のような地図を作りました。
青色がスウェーデン、赤色がデンマーク、金色(ドイツ国旗の一番下の色は、黄色ではなくて金色です。)がドイツです。地図で表現することで、位置的につながっていることが分かりやすくなりました。
この画像は International Potato Center の無料 GIS データ、World を使い、geotools.rb と QGIS を使って作成したものです*1。
geotools.rb
今回の地図を作るスクリプトは、以下のようになります:
require 'geotools' src = '~/src/world_adm0.shp' dst = 'erlangen.shp' countries = ['Sweden', 'Denmark', 'Germany'] fs = [] env = nil Geo::FeatureList.foreach(src) do |f| next unless countries.include?(f[:NAME]) fs << f env = (env == nil) ? f[:the_geom].getEnvelopeInternal : env.expandToInclude(f[:the_geom].getEnvelopeInternal) end lambert = Geo::create_lambert_conformal_conic_2sp_for(env) tr = Geo::Transform.new(Geo::import_epsg_crs(4326), lambert) Geo::FeatureList.open(dst) do |w| fs.each do |f| f[:the_geom] = tr.transform(f[:the_geom]) w.write f end end
geotools.rb には、Geo::Transform::lambert_conformal_conic_2sp_for(env) を追加しました。地図の包含矩形を与えると、その矩形に適当に合わせたランベルト等角投影(標準緯線2本)を返します*2。
geotools.rb について
geotools.rb は http://svgmapdata.sakura.ne.jp/geotools/ から入手することができます。
*1:ところで、「この地図は、〜したものです。」ではなく、「この地図の作成にあたっては、〜したものです。」という記述がときどき見られますが、後者の場合の「したものです」は、「私の若い頃は、大変苦労したものです。」という文章にあるような、追憶の記法と解釈せざるを得ないものになります。「許可なく複製を禁ずる(僭主なのか?)」と同じく、不思議な記法だと思います。c.f. Google 検索 , esp. Google マップの利用規約← Google マップの利用規約での記述は、自然な日本語に修正されていました。2007-12-22 追記。
*2:実は、今回の地図は東西ではなく南北に長いので、ランベルト等角投影が適した投影であるとは言い切れない気もします。中高緯度で東西に長い範囲であれば、ランベルト等角投影が適すると言えるはずであったと記憶しています。