日本スーパーマップトップページ

製品情報

サポート

FAQ

SuperMap Objects (COM)

COMベースのWebGIS開発プラットフォーム製品、つまりSuperMap IS .NET 2008 及び SuperMap IS .NET 6、これら全般に関する内容です。 2008:SuperMap IS .NET 2008 限定の内容です。6:SuperMap IS .NET 6 限定の内容です。 (ほとんどの項目は2008ファミリーと6シリーズで共通しています。順次、各項目についての6シリーズ製品における状況を確認後、2008のみ、6のみ、共通の項目かを明示してゆきます。)

プログラミング関連

[トラッキングレイヤー]

[マップ表示、操作]

[クエリ]

[クリップ]

[レイアウト、印刷]

[データ処理]

[インポート]

[ラスタデータ]

[データソース]

[解析]

[空間インデックス]

[投影変換]

[データベース]

[エラー情報]

[その他]

SuperMap Objects 6全般

Objects6は、Objects2008と比べてどのような違いがありますか?

SuperMap Objects 6は、既存のコンポーネントGIS開発キットSuperMap Objects 2008 をバージョンアップした製品で、同じ製品コアを使用しています。従来機能を修正 、強化したほか、新たな機能を追加してあります。また、Windows7での動作を確認しています。
主な追加機能:
・空間データエンジンSDX+のOracle Spatial エンジンを強化し、Oracle Spatialの空間オブジェクトタイプを新たにサポート
・空間データエンジンSDX+にInformixエンジンを追加し、IBM Informix データベースを新たにサポート
・データセット単位の座標系設定を新たにサポート
・Microsoft Excelファイル(*.xls、*.xlsx)のインポートを新たにサポート
・KML/KMZファイル(2.2)へのエクスポートを新たにサポート
・画像データセットのERDAS IMAGINE Imageファイル(*.img)へのエクスポートを新たにサポート
・DXFファイルへのエクスポートの際の、AutoCADバージョンの指定を新たにサポート(R12 / R13 / R14 / AutoCAD2000 / AutoCAD2004 / AutoCAD2007)
・複数データセットの1つのDXF/KML/KMZファイルへのエクスポート機能を新たにサポート
・既知のポイントデータから、一番近いポイントまたはラインを抽出し、そのオブジェクトとそこまでの距離を計算する機能を新たにサポート
・トポロジ処理ツールとは別に、トポロジ関連のデータ処理を行う複数のインターフェースを新たにサポート
・ラインデータセット間のオーバーレイ解析(ユニオン)を新たにサポート
・マップをGIF、PNGに出力する際、背景の透過を新たにサポート
・レイアウト上で、マップ・シンボル・注記の回転を設定を新たにサポート
・グリッド段階区分主題図オブジェクトで、Null値のセルにカラー設定を行う機能を新たにサポート

▲ページトップへ

開発環境、設定

VisualStudio.NET 2003の開発環境で、SuperMapの一部のコントロールがFormに追加できません。

.NET Framework1.1のSP1がインストールされている環境で起こる現象で、マイクロソフトが提供している修正プログラム(Hotfix:KB886802)を充当することで解消します。

既存のファイルを完全にアンインストールできておらず、再度インストールが行えません。

前回インストールが不規則に行われた場合(重複してインストールするなど)に、完全アンインストールできない状況が起こります。このような場合、手動でレジストリの関連情報を削除してください。

(XPの場合)Windowsのスタートメニューから「ファイル名を指定して実行」を選択、ダイアログボックスに「regedit」と入力してレジストリエディタウィンドウを開きます。左側枠で、 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall を開き、数ある項目の中から、右側ウィンドウのDisPlayNameが「SuperMap Objects +バージョン」の項目を確認して、左側枠から削除してください。

SuperMap Objects5.2.1のVS C#のプロジェクトをSuperMap Objects2008にアップグレードする方法

プロジェクトに含まれる、binとobjフォルダについて、削除・修正する必要があります。
(1) objフォルダ全体を削除します。
(2) binフォルダ内の既存の*.dllファイルを削除します。binフォルダ内のDebugフォルダ(またはReleaseフォルダ)には、プログラムが参照する全ての*.dllファイルがあり、まずこれら5.2.xの*.dllファイルを全て削除する必要があります。

以上のファイル処理終了後、再度ソリューションあるいはプログラムを開きます。
(3) 「Solution Explorer」の「References」で、SuperMapに関するReferencesを全て削除します。
(4) WinFormフォームを新規作成し、レジスタしたObjects2008のコントロールを追加します。
(5) ソリューションをRebuildし、IDEの「Errors List」にエラーがあるか確認します。エラーがなければ、コントロールのアップグレード成功です。新規作成したWinFormフォームを削除します。

マップの左上に「Unregistered SuperMap Objects …」と表示されているのは何ですか?

ランタイムライセンスを登録しておらず、開発版のライセンスで実行しているためです。インストールとデバッグ自体は問題ありません。

Windows Template Library (WTL)での開発をサポートしていますか?

サポートしておりません。

▲ページトップへ

全般

.NETでのオブジェクトの解放について。

.NETでSuperMap Objectsを含めたCOMオブジェクトを使用する場合は、以下のコードにより明示的にオブジェクトを解放してください。

例:定義済みのsoLayerクラスの変数objlayer
System.Runtime.InteropServices.Marshal.ReleaseComObject(objlayer); objlayer=null;

戻り値もCOMオブジェクトの場合、必ず変数を定義してから受け取り、それから解放します。
例:
object handle;
handle=superworkspace1.CtlHandle();
supermap1.Connect(handle);
System.Runtime.InteropServices.Marshal.ReleaseComObject(handle);
handle=null;

コントロールのAxSuperMapとSuperMapの違いはなんでしょうか?

.NETプログラムでSuperMapLibを使用する場合、Referencesには自動的にAxが追加され、AxSuperMapLibになります。これは.NETのパッケージにより取得されるもので、コントロールクラスに属します。プログラムで使用するのはパッケージしたクラスとオブジェクトです。AxSuperMapコントロールも同様です。
ヘルプファイルにあるSuperMapコントロールはAxSuperMapコントロールに対応しています。

▲ページトップへ

プログラミング関連
[トラッキングレイヤー]

SuperMapコントロールのPrintMapメソッドで印刷を行った場合、トラッキングレイヤーは印刷されないのですか?

トラッキングレイヤーのオブジェクトは印刷することができません。
印刷結果に反映させる場合は、臨時のレイヤーを新規作成して、トラッキングレイヤーのオブジェクトをこの臨時のレイヤーに追加して、さらに臨時レイヤーをマップに追加して印刷することで可能です。

どのような状況でTrackingLayerを使う必要がありますか?

(1)オブジェクトをレコードセットに追加したくない場合。
(2)動的にトラッキングする場合。
(3)大量のオブジェクトをレコードセットに追加する場合。一旦トラッキングレイヤー上に表示して、追加が確定してから更にトラッキングレイヤー上のオブジェクトをレコードセットに追加します。

トラッキングレイヤーを更新する場合のRefreshExメソッドとRefreshメソッドはどのような違いがありますか?

Refreshはトラッキングレイヤー全体を更新します。
RefreshExは変更されたオブジェクトのみを更新します。RefreshExは必要な部分のみ更新するため画面のチラつきも最小に抑える効果があります。

トラッキングレイヤーに描画するライン幅などスタイル変更したい。

以下のようにトラッキングレイヤーのスタイルを設定します。

Private Sub btnTrackPolyline_Click()
Me.SuperMap1.Action = scaTrackPolyline End Sub Private Sub SuperMap1_Tracked()
Dim objGeoM As soGeometry
Set objGeoM = Me.SuperMap1.TrackedGeometry
Dim objTrackL As soTrackingLayer
Set objTrackL = Me.SuperMap1.TrackingLayer
Dim objStyle As New soStyle
objStyle.PenWidth = 100 'ライン幅
objTrackL.AddEvent objGeoM, objStyle, "" 'スタイル設定
objTrackL.Refresh
Set objStyle = Nothing
Set objTrackL = Nothing
Set objGeoM = Nothing
End Sub

▲ページトップへ

[マップ表示、操作]

ある2つの地点の緯度、経度が分かっている場合、この2点間の距離はどのように求めますか?

緯度経度データソースの距離はsoGeometrist.Geodesicdistanceメソッドで計算してください。
2点間の距離を求めるsoGeoPoint.DistanceToメソッドは投影座標系で使用してください。

ポイント、ライン、ポリゴンなどの幾何オブジェクトとテキストオブジェクトのスタイル設定の違いは何ですか?

ポイント、ライン、ポリゴンなどの幾何オブジェクトのスタイルはsoStyleを使って設定しますが、テキストオブジェクトのスタイルはsoTextStyleを使って設定します。
ポイント、ライン、ポリゴンオブジェクトのスタイルはカラー、サイズ、シンボルスタイルなどを含み、テキストオブジェクトのスタイルはテキストのフォント、カラー、サイズ、回転角度を含みます。
ポイント、ライン、ポリゴンオブジェクトのスタイルは保存することができませんが、テキストオブジェクトのスタイルは、テキストオブジェクト中に保存することができます。

マップ上の図形を選択後、プログラムで選択状態を解除する方法はありますか?

soSelection.RemoveAllメソッドを使用することで、選択状態を全て解除することができます。

選択状態を反転させるには?

例えば選択されたオブジェクトのSMIDが2、4、5である場合、クエリ条件を”SMID not in (2,4,5)”と設定します。この条件でクエリしたレコードセットを選択セットに変換します。

soSelection.FromRecordsetメソッドもしくはsoSelection.Addメソッドを使っても選択セットに追加されません。

マップ内では1つレイヤーのオブジェクトのみ選択することができ、選択セットは複数のレイヤーに跨ることはできません。以下の例のように、soSelection.Datasetを使い、選択されるレイヤー(データセット)を設定します。
Set objDataset=SuperMap1.Layers.Item(1)
SuperMap1.Selection.Dataset=objDataset
SuperMap1.Selection.Add …
もしくは、
SuperMap1.Selection.FromRecordest …

soRecordsetについて― 性能向上の秘訣。

レコードセットのクエリはリソースを多く消耗します。テーブルが大きければ相応に時間を費やし、ネットワークの流動量も増加します。テーブルのサイズが大きな場合、目的により次のような方法で性能を向上させることができます。

1. フィールド情報を取得する場合
soRecordset.GetFieldInfoをではなく、soDatasetVector.GetFieldInfoメソッドを使用します。返す情報は双方とも同じです。

2. レコードセットにレコードを追加する場合
Set Recordset = Dataset.Query("",FALSE)
通常はこのように全てのレコードを検索するところを、
Set Recordset = Dataset.Query("1<0",FALSE)
とします。"1<0"というエラーの条件により、データベースで検索することなく空のレコードセットを返すため高速となります。
ここにレコードを追加します。

現在のマップの縮尺表示を1:**** のように表示するにはどうしたらいいですか?

SuperMap.ViewScaleプロパティで取得した値を使い、1/ViewScale で求められた数値が、縮尺の分母となります。
"縮尺 1:" & 1/ViewScale
このように使用してください。

SuperMap Deskproにある「前のビュー」、「次のビュー」に対応するプロパティかメソッドは存在しますか?

直接対応するプロパティ、メソッドは存在しません。
Array関数を設定して、SuperMapコントロールのAfterMapDrawイベントでマップウィンドウの表示範囲を記録します。 「前のビュー」、「次のビュー」をクリックして、SuperMap.ViewBoundsを対応する記録の範囲に設定することで可能です。

マウスホイールでのマップの拡大縮小機能を実装する方法は?

以下のようにコーディングすることで実装できます。
(1) SuperMap.MouseWheelイベントで、ズーム前のマウス位置の座標Aを取得します。
(2) 座標Aをマップの中心点に設定します。
(3) ズームします(SuperMap.Zoomメソッドを使用)。
(4) ズームした後で、中心点を座標Aに移動します(SuperMap.Pan2メソッドを使用)。

SuperMap.Zoomメソッドはマップの中心点に基づき実行するので、中心点を設定することが必要です。

soLayer.Editableプロパティは読取専用ですが、どのようにレイヤーを編集可能に設定しますか?

soLayer.Editableプロパティでは現在のレイヤーの状態を返すのみで設定できません。soLayers.SetEditableLayerメソッドで編集可能レイヤーに設定します。

グリッドデータセットの段階区分主題図で使うオブジェクトは?

soGridThemeRangeオブジェクトを使用してください。

SuperMapコントロール上でホイールを操作するとマップの縮尺が自動で変わりますが、ホイールを操作してもマップの縮尺が変わらないようにすることはできますか?

SuperMap Objects 2008 SP5から新しいプロパティ SuperMap.MiddleButtonEnabled を追加しています。
このプロパティではマウスのホイールを使用できるかどうかを設定することができます。これをFalseに設定すると、ホイールを操作してもマップの縮尺が変わらないようになります。

MouseDown,MouseMove,MouseUpのイベントを利用してドラッグによるマップのスクロール機能を作成しましたが、動作がやや重いです。より簡単な実装方法や動作を軽くする方法はあるでしょうか?

これらのイベントを利用する必要はなく、SuperMap.ActionプロパティをscaPanに設定することで簡便に実現できます。

Deskproではマウスカーソルがポイント選択の状態で、矩形に範囲を指定してオブジェクトを選択できますが、どのように実現するのでしょうか?

SuperMap.ActionプロパティをscaSelectEx(ポイント矩形選択)に設定することで実行できます。

選択されているオブジェクトの座標を取得するにはどのような方法があるでしょうか?

1つのポイントオブジェクトを選択しているケースを例として、座標の取得方法を説明いたします。
①SuperMap.Selectionプロパティで、選択されているオブジェクトの集合(選択セット)を取得します。
②soSelection.ToRecordsetメソッドで、選択セットをレコードセットに変換します。
③soRecordset.GetGeometryメソッドで、現在のレコードに対応する幾何オブジェクトを取得します。
④返されたsoGeoPointオブジェクトに対し、soGeoPoint.x、soGeoPoint.yプロパティで座標を取得します。

また、複数オブジェクトを選択している場合、soSelection.Itemプロパティで選択されたオブジェクトをそれぞれ取得して、それぞれに対して②-④の操作を行います。

ライン、ポリゴンの場合は、さらに④でsoGeoLine.GetPartAt、soGeoRegion.GetPartAtメソッドにより、各サブオブジェクト集合soPointsを取得し、soPoints.Itemプロパティで対応するポイントsoPointを取得して、soPoint.x、soPoint.yプロパティで座標を取得します。

ポリゴンの場合は、soGeoRegion.CentroidPointプロパティで、ポリゴン中心点の座標を取得することができます。

マップ上にEditableなレイヤーが存在しない場合に、SuperMap.SnapPointメソッドが機能しません。

仕様上このようになっています。Editableレイヤー無しで、直接スナップ情報を取得することはできませんが、以下の方法でスナップ機能を使用せずに実行することができます。

ポイントデータセットを例とした場合の手順は以下のとおりです。
①指定のポイントオブジェクト(SnapPointメソッドのパラメータsoPoint)からすべてのポイントオブジェクトまでの距離を計算します。
②距離が指定のトレランス以内のポイントオブジェクトを取得します。
③取得したポイントオブジェクトの座標値を指定のポイントオブジェクトに与えます。

オブジェクトを回転させるにはどのようにコーディングするでしょうか?

soGeometry.Rotateメソッドで、回転の支点と回転角度のパラメータを指定してオブジェクトを回転することができます。データの変更結果を反映させるために、以下の操作が必要です。
soRecordset.Edit → soGeometry.Rotate → soRecordset.SetGeometry →soRecordset.Update

複合オブジェクトsoGeoCompoundの色を変更する方法を教えてください。

直接複合オブジェクトのスタイルを変更することはできません。複合オブジェクトのサブオブジェクトを1個ずつ修正する必要があります。方法は以下のとおりです。
①soGeoCompound.GetPartAt()メソッドで複合オブジェクトの1つのサブオブジェクトを取得します。
②このサブオブジェクトのスタイルをsoStyleオブジェクトで設定します。
③soGeoCompound.SetPartAt()メソッドで複合オブジェクトのサブオブジェクトを修正します。

注意:複合オブジェクトスタイルの変更結果を元のデータに反映させるために、以下の操作も必要です。
soRecordset.Edit() → 複合オブジェクトのスタイルを変更(上記①~③)→soRecordset.SetGeometry() → soRecordset.Update()

ポリゴンまたはラインに含まれる各ノードの座標値はどのように取得しますか?

1つのラインオブジェクトを選択している場合を例として、座標の取得方法を説明いたします。
①SuperMap.Selection()メソッドで、選択されているオブジェクトを取得します。
②soSelection.ToRecordset()メソッドで、選択セットをレコードセットに変換します。
③soRecordset.GetGeometry()メソッドで、現在のレコードに対応する幾何オブジェクトを取得します。
④soGeoLine.GetPartAt()メソッドにより、各サブオブジェクト集合soPointsを取得します。
⑤返されたsoPointsオブジェクトに対し、soPoints.Itemプロパティで対応するポイントを取得します。
⑥返されたsoGeoPointオブジェクトに対し、soGeoPoint.x、soGeoPoint.yプロパティで座標を取得します。
ポリゴンの場合は、④でsoGeoRegion.GetPartAt()メソッドを使用します。

▲ページトップへ

[クエリ]

指定した地点に存在する全てのオブジェクトを抽出して属性情報を表示することはできますか?

可能です。
QueryByDistance メソッドを使用することで、指定地点のオブジェクトを取得し、関連する属性情報も取得できます。

メソッドQueryByPoligon、QueryByLine、QueryByPointなどで行われるクエリの空間関係位置クエリモード(SpecialQueryMode)は、どのメンバー(識別子)に対応しているか教えてください。

QueryByPoint:マップポイント選択クエリ操作です。選択した場所から一定のトレランスを設定し、クエリ操作を行います。ポイントからの指定半径でのバッファのareaIntersectクエリに相当します。
QueryByLine:沿線クエリ操作です。クエリ条件は作成したラインと交差する、また作成したラインに含まれるオブジェクトです。areaIntersectクエリに相当します。
QueryByPoligon:ポリゴン選択クエリを実行します。クエリ条件は作成したポリゴンと交差する、また作成したポリゴンに含まれるオブジェクトです。areaIntersectクエリに相当します。

▲ページトップへ

[クリップ]

ベクタデータセットをポリゴンオブジェクトでクリップする方法について教えて下さい。

ベクタデータセットをポリゴンオブジェクトでクリップするためには、soOverlayAnalyst.Clip()メソッドをご使用ください。
2番目のパラメータobjClipItem(クリップオブジェクト)をポリゴンオブジェクトsoGeoRegionに設定します。

▲ページトップへ

[レイアウト、印刷]

ラスターやポリゴンの透過印刷ができません。

現在のバージョン(ver5.3.5)では透過をサポートしておりませんが、以下の方法で半透明効果を維持して印刷することが可能です。
(1) SuperMap.OutputMapEx()メソッドを使用し、マップをラスタデータセットとして保存して、このラスタデータセットを印刷します。このラスタデータセットには透過設定が維持され、正常に印刷することができます。
(2) OutputMapToBMP()メソッドを使用し、マップをBMPファイルに保存して、このBMPファイルを印刷します。 この際、解像度の設定ができますので、十分な精度を保った状態で出力する場合は、「解像度」の値を大きく調整してください。
(3) OutputMapToFile()メソッドを使用し、マップを画像ファイルに保存して、この画像ファイルを印刷します。

▲ページトップへ

[データ処理]

どのようにラインをポイントに変換しますか?

ラインオブジェクト(soGeoLine)を取得して、PartCountプロパティからラインオブジェクトのノード数を取得します(lPartCount)。soGeoLine.GetPartAt(lPartCount)を実行して、soPointsを取得することができます。

どのようにドーナツポリゴンを作成しますか?

すでに2つのポリゴンが存在するとします(一方のポリゴンがドーナツの空洞部分に相当)。
(1) Unionメソッドでユニオン結果を取得します。
(2) Intersectメソッドで交差部分を取得します。
(3) Eraseメソッドでユニオン結果から交差部分をイレース(削除)します。

UpdateFieldメソッドを実行してもSmLengthフィールドの値が更新されません。

システムフィールド、つまり名前がSmで始まるフィールド(SmUserIDを除く)に対してはユーザーが更新することはできません。SmLengthはシステムフィールドで、ラインオブジェクトの変化によりシステムが自動で更新します。

レコードセットの編集操作について教えてください。

レコードセットのあるレコードを編集する時は、soRecordset. Editメソッドを使用してレコードをロックし、編集を実行します。通常レコードセットの編集とは、幾何オブジェクトの変更(soRecordset.SetGeometry)、もしくはフィールドの変更 (soRecordset.SetFieldValue, soRecordset.SetFieldValueNull)を指します。

これらの操作の前には必ずsoRecordset. Editメソッドを使用し、また編集が終了した後はsoRecordset.Updateメソッドを使用することでレコードセットが更新されます。soRecordsetのEditとUpdateメソッドは対になっており、1つのレコードごとに実行します。

例外として、soRecordset.AddNewメソッドでsoRecordsetにレコードを1つ追加する場合、soRecordset. Editメソッドを使用しません(ロックするとレコードが追加できなくなります)。追加後はsoRecordset.Updateメソッドを使用します。

Deskproの「解析-グリッド解析-サーフェス解析-特定の等値線を抽出」と同等の機能をプログラムで作成したら、Deskproで作成した結果とプログラムで作成した結果では、出力結果に少々違いがあります。同じ結果にするにはどうしたら良いのか教えてください。

SuperMap Deskproで作成した結果とプログラムで作成した結果について、出力結果に多少の違いが生じる原因は以下のとおりです。
等値線パラメータ設定は、SuperMap Deskproでは3つありますが、SuperMap Objectsでは2つのみです。
違いは「フィルタパラメータ」で、等値線抽出時のサンプルフィルタパラメータです。推奨する値は0~1倍の解像度で、デフォルトは0.7倍です。この値が大きいほど、等値線のコントロールポイントは少なくなります。
SuperMap Objectsではフィルタパラメータを設定することができません。デフォルトではフィルタパラメータが0に設定されるため、SuperMap Deskproでフィルタパラメータを0に設定した場合に同じ結果を取得できます。

soRecordset.Closeメソッドは、どのようなタイミングで使用するのでしょうか?

レコードセットを使用後は、直ちにCloseを実行して、レコードセットのメモリを解放する必要があります。

Deskproにある【複合データセットを分解】、【複合データセットを生成】の処理を実現するには?

複合データセットの分解は、複合データセットを単一データセットへ変更することです。
方法:まず、ポイント、ライン、ポリゴン、テキストデータセットを別々に作成し、複合データセットのオブジェクトを取得し、タイプを判断します。ポイント、ライン、ポリゴン、テキストタイプの場合
soRecordset.AddNew()メソッドで対応している単一データセットに追加します。他のパラメータ化したオブジェクト(例えばsoGeoCircle)の場合、ConvertToLine()、またはConvertToRegion()メソッドで対応するライン、ポリゴンを作成して、単一データセットに追加されます。複合オブジェクトの場合soGeoCompound.GetPartAt()メソッドで複合オブジェクトのサブオブジェクトを取得し、タイプを判断して、対応する単一データセットに追加します。

複合データセットの生成は、単一データセットを複合データセットへ変更することです。
方法:複合データセットを作成し、単一データセットのオブジェクトごとにsoRecordset.AddNew()メソッドで複合データセットに追加します。

soRecordset.MoveTo()メソッドで指定するレコード・ポインターとは何でしょうか?

レコードセットのインデックス番号でレコードの行に相当します(1からカウントします)。SmIDとは同義ではありません。

座標(緯度、経度)と値を持った測定データを用いて等値線を描画する手順を教えてください。

2つの方法があります。
方法1:
①データソースを新規作成します。SuperWorkspace.CreateDataSource()
②データソースの投影系を設定します。soDataSource.PJCoordSys
③ポイントデータセットを作成します。また測定データを保存するためフィールドを作成します。soDataSource.CreateDataset()、soDatasetVector.CreateField()
④測定データを読み込みます。soRecordset.AddNew()メソッドで、1つずつ測定データをポイントデータセットに追加します。
⑤ポイントデータセットからTINデータセットに変換します。so3DAnalyst.PointToTIN()
⑥TINデータセットから等値線データセットに変換します。so3DAnalyst.TINToContour()

方法2:
①お客様のデータをMicrosoft AccessのMDBテーブルに保存します。(X, Y,Zの座標値)
②データソースを新規作成します。SuperWorkspace.CreateDataSource()
③データソースの投影系を設定します。soDataSource.PJCoordSys
④Microsoft AccessのMDBテーブルを属性テーブルデータとしてデータソースにインポートします。soDataPump.Import()
⑤X、Y座標値データが保存されている属性テーブルデータからポイントデータセットを作成します。soDataSource.CreatePoints()
⑥ポイントデータセットからTINデータセットに変換します。so3DAnalyst.PointToTIN()
⑦TINデータセットから等値線データセットに変換します。so3DAnalyst.TINToContour()

▲ページトップへ

[インポート]

インポートするときにDeskproのようにSDC/SWCのコードタイプを設定する方法は?

soImportParams.EncodedType を設定してください。対応する定数は以下の通りです。
SDC:scEncodedDWORD
SWC:scEncodedWORD

インポートするときにDeskproのようにデータセットの圧縮を設定する方法は?

soImportParams.ImportAsCompressedDataset をTrueに設定してください。
新規データセット作成時は、CreateDatasetメソッドのseDatasetOptionパラメータをscoCompressedに設定してください。
データ圧縮の設定ではデータの損失はありません(無損圧縮)が、コードタイプの設定では損失があります(有損圧縮)。

▲ページトップへ

[ラスタデータ]

SITファイルを開くには、どのエンジンタイプを使用しますか?

sceImagePluginsを使用します。

SuperMap Deskproにある「ラスタデータのモザイク化」に対応するメソッドを教えてください。

soGridAnalyst.Mosaicメソッドを使用してください。
バージョン5.3から追加したAPIです。

▲ページトップへ

[データソース]

プログラムからデータソースAを開き、同じプログラムの別のコントロールからデータソースAを開く場合、エラーとなります。

プログラムでワークスペースを使用しており、別のコントロールでデータソースを使用する場合、直接識別名を使い設定します。
Set objDS=SuperWorkspace1.Datasources("xxx")
SDBデータソースについては、読取専用設定にしてください。

▲ページトップへ

[解析]

IDW補間でDEMを生成するメソッドには、soGridAnalyst.InterPolateIDWとsoInterpolateOperator.IDWの2種類があるが、どのように使い分けますか?

SuperMapコントロールのsoGridAnalyst.InterPolateIDWメソッドは旧バージョンSuperMap Objects2003との互換性のために保留されています。
IDW補間機能を新規に採用する場合は、より完成度の高いSuperAnalystのsoInterpolateOperator.IDWメソッドを用いてください。

グリッドから座標指定で標高値を取得するため、X,Y座標からsoDatasetRasterの行と列の数を取得する方法を教えてください。

以下の方法で地理座標のX, YからsoDatasetRasterの行と列の数を取得します。
1.ラスタデータセットの最小外接矩形を取得します(soDatasetRaster.Bounds)。
2.ラスタデータセットX方向の解像度(soDatasetRaster.ResolutionX)とY方向の解像度(soDatasetRaster.ResolutionY)を取得します。
3.地理座標Xから最小外接矩形左端のX座標を引いた値をX方向の解像度で割り、列数を取得します。最小外接矩形上端のY座標から地理座標Yを引いた値をY方向の解像度で割り、行数を取得します。

以下はサンプルコードです(VB)。
Dim objDtR As soDatasetRaster
Set objDtR = SuperMap1.Layers(1).Dataset 'ラスタデータセット

Dim xx As Double
Dim yy As Double
xx = Me.SuperMap1.PixelToMapX(ScaleX(x,vbTwips,vbPixels)) 'X座標
yy = Me.SuperMap1.PixelToMapY(ScaleY(y,vbTwips,vbPixels)) 'Y座標

Dim rX As Double
DimrY As Double
rX = objDtR.ResolutionX  'X方向の解像度
rY = objDtR.ResolutionY  'Y方向の解像度

Dim objRec As soRect
Set objRec = objDtR.Bounds  ’最小外接矩形

Dim m As Integer
Dim n As Integer

m = (xx - objRec.Left) / rX   ’列数
n = (objRec.Top - yy) / rY   ’行数

ネットワーク解析を行う場合、複数のネットワークデータセットを利用して解析を行うことは可能でしょうか?

複数のネットデータセットに対し同時にネットワーク解析を行うことはできません。
ネットワーク解析パラメータの設定、soNetworkSetting.NetworkDatasetプロパティで、その都度、解析対象のネットワークデータセットを1つ設定することで、異なるネットワークデータセットの解析を実行することができます。

▲ページトップへ

[空間インデックス]

空間インデックスの作成が必要かどうかを判断するにはどのようにしますか?

SpatialIndexDirtyを以下のように使用します。

objDatasetV.Open '先に目標のデータセットをOpenします
If objDatasetV.SpatialIndexDirty = True Then '次に空間インデックス作成が必要か判断
objDatasetV.BuildSpatialIndex ’空間インデックス作成

▲ページトップへ

[投影変換]

日本測地系の座標系から3パラメータを使って世界測地系の座標系に投影変換する方法は?

以下は、緯度経度または投影座標系の日本測地系から世界測地系のUTM53に変換する場合のコードのサンプルです(VB)。
soPJTranslator投影変換オブジェクトを作成してConvertメソッドを実行します。
投影パラメータオブジェクトで3パラメータ設定します。

'変更先投影パラメータして投影変換を実行
Dim objPJTranslator As New soPJTranslator '投影変換オブジェクトを定義
Dim objPJCoordSysSrc As New soPJCoordSys '変換元の座標系オブジェクトを定義
Dim objPJCoordSysDes As New soPJCoordSys '変換先の座標系オブジェクトを定義
Dim objPjParam As New soPJParams '投影変換オブジェクトを作成
Dim objDs As soDataSource
Dim bResult As Boolean

'データソースを開く
Set objDs = SuperWorkspace1.Datasources(1)

Set objPJCoordSysSrc = objDs.PJCoordSys
If objPJCoordSysSrc.IsProjected = False
Then
MsgBox "現在、非地球座標系です。変換できません!"
Exit Sub
Else

MsgBox "現在の座標系は" & objPJCoordSysSrc.Name

objPJCoordSysDes.Type = scPCS_JAPAN_UTM_53 '世界測地系のUTM53に設定

'3パラメータを設定
objPjParam.TranslateX = -146.414
objPjParam.TranslateY = 507.337
objPjParam.TranslateZ = 680.507

If objPJCoordSysDes Is Nothing Then
MsgBox "正確に変換先投影情報を設定してください"
End If

'投影変換オブジェクトを作成
objPJTranslator.PJCoordSysSrc = objPJCoordSysSrc
objPJTranslator.PJCoordSysDes = objPJCoordSysDes
objPJTranslator.TransMethod = scMethod_GEOCENTRIC_TRANSLATION
objPJTranslator.PJParams = objPjParam
objPJTranslator.Create

'投影変換
bResult = objPJTranslator.Convert(objDs)

If bResult = False Then
MsgBox "投影変換に失敗!"
Else
MsgBox "投影変換に成功!" & objDs.PJCoordSys.Name
End If

End If

Set objDs = Nothing
Set objPJCoordSysSrc = Nothing
Set objPJCoordSysDes = Nothing
Set objPJTranslator = Nothing

X,Y座標値だけを投影変換したいですが可能でしょうか?

soPJCoordSys.ForwardメソッドやsoPJTranslator.Convertメソッドなどの投影変換を行うメソッドは、データソースだけでなく、オブジェクト単位、ポイント単位で実行することができます。既知のX,Y座標値からsoPointオブジェクトを生成して、このポイントに対して投影変換を実行することで、投影変換後のX,Y座標を取得することができます。

▲ページトップへ

[データベース]

soLongTransaction.LogIn()メソッドのユーザー名とパスワードの設定方法は?

データベースのSmUsersテーブルにロングトランザクションのユーザーを追加する必要があります。この場合、saを使用することはできません。

▲ページトップへ

[エラー情報]

soErrorオブジェクトについて

このオブジェクトはプログラムにエラーが発生した後、エラー情報を取得するのに使用します。

Dim objEr As New soError
……
……
objEr.LastErrorMsg

これで最後のエラーに関する記述情報を取得します。

▲ページトップへ

[その他]

凡例コントロールなどで使用しているスタイルの状態を表示するシンボルを画像などで取得する方法はありますか?

SuperMapのシンボルはsoSymbolLib.Export()メソッドでSuperMapのシンボルライブラリファイル*.sym 、またはシンボルライブラリ中間ファイル にエクスポートすることはできますが、画像にエクスポートすることはできません。

▲ページトップへ