
生成 AI にデータを渡して「グラフを作って」と頼めば、コードが数秒で返ってくる——そんな時代になりました。では、等高線図やグリッドデータの処理はどうでしょうか。
Surfer は Automation(自動化)に対応しており、Python などから外部操作できます。つまり——AI に「このデータをクリギングで格子化して、等高線図にして、書き出して」と日本語で指示するだけで、Surfer を動かすスクリプトが手に入る。 コードが書けなくても、マッピングの”繰り返し作業”を自動化できる時代になりました。
本記事では、Surfer の自動化を AI と組み合わせて使う具体的な方法を紹介します。あわせて、「AI があれば専用ソフトは要らないのでは?」という問いにも答えながら、AI 時代にこそ際立つ Surfer の価値を実例とともにお見せします。
GridData6)の主なパラメータ生成 AI にデータを渡せば、折れ線グラフも散布図も数秒で返ってきます。「可視化」は、もはや希少な能力ではなくなりました。
すると当然、こんな疑問が浮かびます。
「AI がここまでできるなら、専用のマッピングソフトはもう要らないのでは?」
結論から言えば——専用ソフトの価値は、置き換わる部分と、むしろ際立つ部分に分かれていきます。
まず認めておきます。単純なグラフや簡易な可視化を「ただ描く」だけなら、AI と無償ツールでも十分です。 そこは AI が急速に肩代わりしていく領域です。
一方で、AI が普及するほど際立つ価値もあります。Surfer が扱うのは「グラフ」ではなく、空間データ——散らばった観測点から面を推定し、地図に載せる仕事です。ここには、AI 単体では簡単に置き換わらない専門性があります。
AI は Surfer を陳腐化させるのではなく、“使いこなせる人を増やす入口”になります。AI が「何をしたいか」を受け取る窓口となり、実際に空間データを処理して地図に仕上げる本体が Surfer——そんな役割分担です。「マップが描ける」ではなく「専門的なグリッド化・マッピングの質・一貫性・データ保護を、AI で誰でも使える」——これが本記事で示す姿です。以降のセクションは、この主張を実例で裏づけていきます。
複数の観測井の地下水位、複数サイトの汚染濃度、毎月の定期モニタリング——「同じ形式のマップを、データを変えて何枚も作る」場面は珍しくありません。
1枚ずつ、グリッド化して、等高線を引いて、色を塗って、書き出して……。しかもその一つひとつが、地味に手間のかかる作業です。Contents ウィンドウで目的のオブジェクト(等高線レイヤーやカラースケールなど)を選び、Properties ウィンドウにずらりと並んだ膨大な設定項目の中から、変えたい一つを探し当てて書き換える——等高線レベルを揃えたい、色を変えたい、フォントを直したい、そのたびに「あの設定はどのタブのどこだったか」とプロパティの海をたどることになります。おまけに項目名はすべて英語表記。これを何枚分も繰り返すのですから、時間もかかり、微妙な体裁のばらつきも生まれます。
本記事の後半では、フォルダにデータを置いて実行するだけで、下のような同一条件(共通のカラースケール)のもとに作成された比較可能なマップ集が一気に出来上がるところまでお見せします。



まずは、その土台となる「AI で自動化する仕組み」から見ていきましょう。
Surfer は Automation(自動化) に対応しており、Python などの外部プログラムから操作できます。「グリッド化」「等高線図の作成」「画像の書き出し」といった操作を、メニューを触らずスクリプトで実行できるということです。
ここに AI が加わります。Surfer のオブジェクトモデル(操作の一覧)と、AI に渡っても差し支えないダミーの CSV(構造だけ本物と同じサンプル)を用意し、
「この CSV をクリギングで格子化して、等高線図にして、PNG で書き出すスクリプトを書いて」
と日本語で指示するだけで、動くコードが返ってきます。コードが書けなくても、自動化スクリプトが完成します。(実データではなくダミーを使う理由と、そのメリットは §6 で詳しく説明します。)
⚠️ ただし「実機検証」が前提です。 Surfer の Automation はメソッド名や引数がバージョンによって異なり、AI が生成したコードがそのまま動くとは限りません。ここは、実際に動かして確かめる——私たちのようなサポートの出番でもあります。
観測点の CSV(Easting, Northing, Elevation の XYZ 3列からなるデータ)を渡し、クリギング法でグリッド化 → 等高線図 → 書き出し。これだけで、散布点から滑らかな面が推定されます。

処理は「① グリッド化 → ② 等高線図 → ③ 書き出し」の3ステップ。補間法・格子間隔・カラースケールも、日本語で指示するだけで変えられます。
等高線は、散らばった観測点から推定した面です。では、その推定はどれだけ確からしいのでしょうか。Surfer なら、元の観測点(散布図)を重ね、各点に実測値を添えることで、それを1枚で示せます。

+印が実際の観測点、その脇の数字が実測値です。等高線の谷や丘が、実測点とその値にきちんと沿っていることが読み取れます。「どこに実データがあり、そこが実際いくつだったか」を示せるので、読み手は補間結果を鵜呑みにせず、自分で妥当性を確認できます。これも、データの透明性を大切にする専用ソフトならではの見せ方です。
作れるのは等高線図だけではありません。同じグリッドから、3D サーフェス(立体地形)もスクリプト1行で生成できます。 見下ろす角度・回転・高さの強調・光源の向きといった視点も指示で制御できます。

等高線図・3D サーフェス・ワイヤーフレーム・陰影起伏図……1つのデータを、目的に応じて何通りにも見せられるのが Surfer の強みです。回転角を少しずつ変えて連番で書き出せば、3D アニメーションの素材も自動で作れます。
同じデータでも、補間法を変えると結果は変わります。下は左からクリギング・IDW・最小曲率。スクリプト上は手法を1つ指定し直すだけです。



IDW はデータ点の周りに同心円状の”目玉”が出やすく、クリギング・最小曲率は滑らかな面になります。どれが正しいかはデータの性質で決まります。 「指示するだけで切り替わる」手軽さと、「どれを選ぶべきか」の専門判断——この両方があって初めて、良いマップになります。
補間法だけではありません。格子間隔・探索半径・異方性といったパラメータも、AI に頼めば一言で変えられます。ただ、ここでも「変えられること」と「正しく選べること」は別です。Surfer の価値は、まさに後者を支えるところにあります。
たとえば格子間隔。「もっと細かく」と指示すれば等高線はなめらかになりますが、それで精度が上がるわけではありません。
格子間隔が決めるのは「解像度(見た目の滑らかさ)」であって、「精度(推定の確からしさ)」ではないからです。精度を決めるのはデータの密度・分布と補間法。細かくしすぎると、データが支えていない詳細を実在するかのように見せる”見かけの精度”を生むだけです。
実際に、同じデータ(Demogrid・クリギング)を粗い格子と細かい格子でグリッド化してみると——


細かい方は等高線がなめらかになりますが、丘の位置も高さ(=推定した地形の骨格)もまったく同じです。変わったのは”見た目の滑らかさ”だけ、というのが一目で分かります。どちらも同じデータの異なる表現にすぎず、どちらを採用するかの判断はユーザーに委ねられています。
次に探索半径。これは「各格子点を推定するとき、どれだけ広い範囲のデータを使うか」を決める設定です。つまり、補間に考慮するデータポイントの範囲です。クリギングでも、この探索半径の内側にある観測点だけを使って値を計算します。
半径を変えると結果は大きく変わります。同じ Demogrid(クリギング)で、探索半径を小さくした場合と大きくした場合を比べると——


半径が小さいと、近くに観測点がない格子点は値を持てず、等高線がギザギザになったり空白(穴)ができたりします。大きくすると多くの点を使って滑らかにつながります。小さすぎればデータの穴、大きすぎれば遠くの無関係な点まで平均して局所の特徴が鈍る——ちょうどよい半径は、実際の地形のありかたと、観測点の密度を総合的に考慮して吟味する必要があります。
そして異方性(方向によって効き方を変える)。これも、正しく使えば結果を実態に近づけます。
たとえば地層の走向や地下水の流動方向のように「方向性のある現象」では、異方性を設定することで実態に沿ったマップになります。同じ Demogrid を、異方性の向きだけ変えて(クリギング)作図すると——


観測点(=地形)は同じでも、異方性の向きに沿って等高線の伸びる方向が変わります。「その現象がどの方向に連続しているか」というデータの背景を知っていて初めて、正しく設定できる——ここに専門判断が効きます。
つまり——AI はパラメータを”一瞬で変える”力をくれますが、どう設定すれば正しいマップになるかを判断するのは、依然として専門知識の領域です。 §1 で述べた「専用ソフトに残る価値」は、こうした場面で具体的にあらわれます。
書式を作り込んだ Surfer ファイル(.srf)を雛形として保存し、データだけ差し替えて同じ体裁のマップを量産できます。
下は、同じ雛形に3期間分のデータを流し込んだ結果。カラースケール・等高線レベル・凡例・レイアウトはすべて共通で、データだけが変わっています。



ここが重要です。Surfer はデフォルトでは、各マップの Z 値の最大・最小からカラースケールを自動的に決めます。 単一のマップを作るだけなら、これで問題ありません。
ところが、複数の期間を比較したいときはこれが困りものになります。データごとに最大・最小が異なると、マップごとのカラースケールも変わってしまい、「月1で緑だった値が、月2では同じ値なのに黄色」——同じ色が同じ値を示さなくなるのです。これでは色で比較できません。
そこで雛形の出番です。レベルとカラースケールを固定値で作り込んでおけば、どのデータを流し込んでも「同じ色=同じ値」。 期間やサイトをまたいで色の意味が揃うので、並べるだけで高低差・経時変化が正しく読めます。上の3枚も、共通スケールだからこそ「month3 が全体に赤い=値が高い」と一目で分かります。
単一マップでは不要でも、比較には不可欠。 これが雛形量産の核心的なメリットです。
もう一つ、実務でうれしい使い方があります。自動化で作ったマップを Surfer のネイティブ形式(.srf)で保存し、あとから開いて仕上げるという流れです。
Surfer の操作は「データ準備 → グリッド化 → マップ生成 → 書式・仕上げ → 書き出し」という一連の流れになっています。このうちどこまでを自動化し、どこからを人が手を加えるかは、決まりきったものではなく、ユーザーが自由に決められます。 .srf 形式がその”橋渡し役”となり、どの段階の状態も保存して、いつでも開いて続きから編集できるからです。
たとえば「等高線図+実測点」のベースをスクリプトで一気に作って .srf に保存し、それを開いて、塗りつぶし・カラースケール・ラベル・タイトルを整える——という段取りができます。


ポイントは、この仕上げをスクリプトで行っても、Surfer を開いて手作業で行ってもよいことです。.srf に保存できるので、「自動化」と「手作業」を自由に行き来できます。 「8割の土台を自動でつくり、残り2割を人が詰める」——AI・自動化と、人の判断を組み合わせる、現実的で無理のない使い方です。
補足:日本語の文字化け(豆腐)について
タイトルなどに日本語を入れると□(豆腐)になることがあります。これは File > Options で既定フォントを日本語フォント(メイリオ等)に設定するか、スクリプトでフォント名を日本語名(”メイリオ”)で指定することで解決します(英語名 “Meiryo” での指定は不可)。上のタイトルもこの方法で表示しています。
自動化には、もう一つ大きな利点があります。データ保護とコスト効率です。
AI に手伝ってもらうとき、スクリプトの作成(AI に相談) と 実運用(Surfer で実行) を分けるのがポイントです。
こうすれば、観測データや座標の中身が AI サーバーに送信されることはありません。 同じ原理で、大容量のグリッドデータを扱っても、AI の利用コストが跳ね上がることもありません。守秘義務の厳しい分野(環境・資源・防災・インフラなど)にも、安心して勧められる進め方です。
AI の登場で、「ただ可視化する」ことの価値は薄れていきます。しかし、散らばった観測点から面を推定し、正確な座標に載せ、比較可能な品質で仕上げる——この空間データの専門性は、むしろ際立ちます。
AI は Surfer を置き換えるのではなく、その専門機能を”誰でも使える”ものにする入口になります。
そして、単純な処理を AI が肩代わりするほど、「そのデータから何を読み取り、どう見せるか」という最終的な人間の判断の比重は、むしろ増していきます。 どの補間法を選ぶか、探索半径をどこまで広げるか、比較のために色をどう揃えるか——本記事で繰り返し見てきたこうした「選ぶ」仕事は、繰り返しの手作業が自動化されて初めて、いっそう際立ちます。AI が”手を動かす”部分を担うことで、人は“何をどう見せるか”を考えることに集中できる——それは、専門知識を持つ人の価値がむしろ高まっていく、ということでもあります。
「AI があれば、Surfer を使わず Python で直接クリギングすればいいのでは?」——もっともな疑問です。実際に比べてみると、この記事の主張がよく見えてきます。
PyKrige などのライブラリを使えば、通常クリギング(Ordinary Kriging)は実質10行ほどで書けます。
import numpy as np
from pykrige.ok import OrdinaryKriging
# x, y, z は観測点の配列(Easting, Northing, Elevation)
OK = OrdinaryKriging(x, y, z, variogram_model="spherical")
gridx = np.arange(xmin, xmax, dx)
gridy = np.arange(ymin, ymax, dy)
zgrid, variance = OK.execute("grid", gridx, gridy) # 補間値と推定分散
ここだけなら、AI に「PyKrige でクリギングして」と頼めばすぐ書いてくれます。
問題は、上のコードが variogram_model="spherical" と決め打ちしている点です。クリギングの精度はバリオグラム(空間相関構造)のモデリングで決まり、そこが本体の専門作業です。実務で通用させるには、次を自前で積み上げることになります。
| 必要な作業 | Python で自前実装 | Surfer |
|---|---|---|
| バリオグラムの当てはめ(sill / range / nugget の推定・モデル選択) | 実験的バリオグラムを描き、モデルを選び、検証する | 標準機能・妥当な既定値 |
| 異方性(方向依存) | モデルとパラメータを自分で組む | バリオグラムで定義 |
| 探索近傍(半径・セクター・最大点数) | 自前実装、または制御が効かない | SearchRad1/2 などで細かく制御 |
| 凸包の外側ブランク(外挿抑制) | 凸包判定してマスクを自作 | BlankOutsideHull=True の一発 |
| 座標系・投影法 | 別ライブラリで処理 | 標準装備 |
| 出版品質の作図(等高線・3D・実測点重ね)と GIS 形式出力 | すべて手作り | 標準装備 |
| クロスバリデーション(妥当性検証) | 自分で実装 | レポート機能あり |
つまり、「補間の1行」より「その前後(バリオグラム設計・検証・作図・出力)」のほうが圧倒的に手間で、しかも地統計のドメイン知識が要ります。使い捨てのデモなら Python で十分ですが、報告書・論文・規制対応など”通用する”成果物にするほど、Surfer が標準・検証済みで備えている部分を、自前で一から作り直すことになります。
ここでも構図は同じです。AI(+Python)は「クリギングのコードを書く」ことはできる。でも「どのバリオグラムで・どの異方性で・どこまで外挿するかを選び」「出版品質で作図・検証する」のは、専用ソフトとドメイン知識の領域です。AI にコードを書かせ、Surfer に本体の処理を任せる——それが、いちばん速くて確実な進め方です。
GridData6)の主なパラメータSurfer の自動化でグリッド化を担うのが GridData6 メソッドです。ここでは、AI に指示を出すときの”語彙”として役立つ主要パラメータをまとめます。名前を知っておくと、「探索半径を広げて」ではなく「SearchRad1 を◯◯にして」と、より正確に AI へ依頼できます。
⚠️ バージョン依存に注意 — 引数名・定数値は Surfer のバージョンによって異なる場合があります。本付録は動作確認時点のもので、最終的な確認は実機で行ってください(=本文で述べた「実機検証が前提」の考え方です)。
Algorithm)の一覧GridData6(..., Algorithm=<定数>) で指定します。「どの手法で面を推定するか」を切り替える、いちばん重要な設定です。
| 定数名 | 補間法 | 特徴 |
|---|---|---|
srfInverseDistance | IDW(逆距離加重法) | 単純・高速。同心円状の”目玉”効果に注意 |
srfKriging | クリギング法 | 地質・環境の定番。なめらかで自然な面 |
srfMinCurvature | 最小曲率法 | 薄板を張ったような滑らかな面。定番 |
srfShepards | 修正 Shepard 法 | IDW の改良版。目玉効果を軽減 |
srfNaturalNeighbor | 自然近傍法 | 外挿しない。データ密度が不均一なとき有効 |
srfNearestNeighbor | 最近傍法 | 最も近い点の値を採用。欠損補完・格子変換向き |
srfRegression | 多項式回帰 | 傾向面(トレンド)の抽出 |
srfRadialBasis | 動径基底関数(RBF) | クリギングに匹敵する汎用高精度手法 |
srfTriangulation | 三角形分割+線形補間 | データ点を厳密に通す。断層・稜線向き |
srfMovingAverage | 移動平均法 | 大規模データの平滑化・ノイズ低減 |
srfDataMetrics | データメトリクス | 点数・分散など統計量を格子化(補間ではなく集計) |
srfLocalPolynomial | 局所多項式法 | 近傍点に多項式をフィット |
すべて名前付きの任意引数で、指定しなければ既定値が使われます。最小構成は入力・列指定・補間法・出力の7つ(本文の作例もこれだけ)。そこに格子間隔や探索の設定を足していくイメージです。
① 入力・出力(最小構成)
| 引数 | 内容 |
|---|---|
DataFile | 入力データファイルのパス |
xCol / yCol / zCol | X / Y / Z の列番号(1 始まり) |
DataFileOptions | 入力ファイルのオプション(例:"Header=1" でヘッダ行あり) |
Algorithm | 補間法(上表の定数) |
OutGrid | 出力グリッドファイルのパス |
② 格子の範囲・間隔
| 引数 | 内容 |
|---|---|
xMin / xMax / yMin / yMax | グリッドの範囲 |
xSize / ySize | 格子間隔(セルサイズ)=§4「もっと細かく」の実体 |
NumCols / NumRows | 格子の列数・行数 |
③ 探索(Search)
| 引数 | 内容 |
|---|---|
SearchEnable | 探索の有効化 |
SearchRad1 / SearchRad2 / SearchAngle | 探索楕円の半径1・半径2・角度=§4「探索半径」の実体 |
SearchNumSectors | 探索セクター数 |
SearchMinData / SearchMaxData | 使用データ数の最小・最大 |
④ 異方性・ブランク・Z 値制限
| 引数 | 内容 |
|---|---|
AnisotropyRatio / AnisotropyAngle | 異方性の比・角度(※クリギングでは効き方が異なる/下記) |
BlankOutsideHull | データ範囲(凸包)の外側をブランク=外挿による不自然な等高線を抑制 |
ZLimitMin / ZLimitMax | 推定値の下限・上限 |
⑤ 主な手法別パラメータ
| 手法 | 引数 |
|---|---|
| IDW | IDPower(べき乗)・IDSmoothing(平滑化) |
| クリギング | KrigType・KrigDriftType・KrigVariogram(異方性はここで定義) |
| 最小曲率 | MCMaxResidual・MCMaxIterations・MCInternalTension ほか |
| 動径基底関数 | RBBasisType・RBRSquared |
💡 注意: 「異方性」を指定するとき、IDW では
AnisotropyRatioが直接効きますが、クリギングではバリオグラムKrigVariogramの中で指定します(クリギングの異方性は、そこで定義する仕様のため)。