よ くある質問と回答(FAQ)

ホーム

 

サポート>FAQ







 




 
FAQカテゴリー

SuperMap製品全般
デスクトップ製品

SuperMap IS.NET
eSuperMap

FAQ --- SuperMap Objects


SuperMapコントロールのPrintMapメソッドで印刷を行った場合、トラッキングレイヤーは印刷されないのですか?
現在のマップの縮尺表示を1:**** のように表示するにはどうしたらいいですか?
指定した地点に存在する全てのオブジェクトを抽出して属性情報を表示することはできますか?
空間インデックスの作成が必要かどうかを判断するにはどのようにしますか?
日本測地系の座標系から3パラメータを使って世界測地系の座標系に投影変換する方法は?
SuperMap Deskproにある「前のビュー」、「次のビュー」に対応するプロパティかメソッドは存在しますか?
.NETでのオブジェクトの解放について。
マップ上の図形を選択後、プログラムで選択状態を解除する方法はありますか?
SuperMap Deskproにある「ラスタデータのモザイク化」に対応するメソッドを教えて下さい。
VisualStudio.NET 2003の開発環境で、SuperMapの一部のコントロールがFormに追加できません。
グリッドから座標指定で標高値を取得するため、X,Y座標からsoDatasetRasterの行と列の数を取得する方法を教えてください。
プログラムからデータソースAを開き、同じプログラムの別のコントロールからデータソースAを開く場合、エラーとなります。
レコードセットの編集操作について教えてください。
どのような状況でTrackingLayerを使う必要がありますか?
トラッキングレイヤーを更新する場合のRefreshExメソッドとRefreshメソッドはどのような違いがありますか?
ポイント、ライン、ポリゴンなどの幾何オブジェクトとテキストオブジェクトのスタイル設定の違いは何ですか?
soLayer.Editableプロパティは読取専用ですが、どのようにレイヤーを編集可能に設定しますか?
soSelection.FromRecordsetメソッドもしくはsoSelection.Addメソッドを使っても選択セットに追加されません。
ある2つの地点の緯度、経度が分かっている場合、この2点間の距離はどのように求めますか?
既存のファイルを完全にアンインストールできておらず、再度インストールが行えません。
soRecordsetについて―――性能向上の秘訣。
マップの左上に「Unregistered SuperMap Objects 5 …」と表示されているのは何ですか?
IDW補間でDEMを生成するメソッドには、soGridAnalyst.InterPolateIDWとsoInterpolateOperator.IDWの2種類があるが、どのように使い分けますか?
選択状態を反転させるには?
どのようにドーナツポリゴンを作成しますか?
トラッキングレイヤーに描画するライン幅などスタイル変更したい。
UpdateFieldメソッドを実行してもSmLengthフィールドの値が更新されません。
インポートするときにDeskproのようにSDC/SWCのコードタイプを設定する方法は?
インポートするときにDeskproのようにデータセットの圧縮を設定する方法は?
どのようにラインをポイントに変換しますか?
soErrorオブジェクトについて
グリッドデータセットの段階区分主題図で使うオブジェクトは?
マウスホイールでのマップの拡大縮小機能を実装する方法は?
SuperMap Objects5.2.1のVS C#のプロジェクトをSuperMap Objects2008にアップグレードする方法


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

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


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

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


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

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


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

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


もどる↑


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

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


.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;
もどる↑


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

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


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

直接対応するインターフェースは用意されていません(Deskproでは独自に開発されています)。
soDatasetRaster.Appendメソッドを利用して、1つのラスタデータに複数のラスタデータを追加していくことができます。ただし、追加先のラスタデータ範囲内にのみ追加できるため、全てのデータを含むような範囲の仮のラスタデータを用意する必要があります。
もどる↑


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

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


グリッドから座標指定で標高値を取得するため、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
Dim rY 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
   行数


もどる↑


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

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

SDBデータソースについては、読取専用設定にしてください。

もどる↑


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

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

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

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


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

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

もどる↑


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

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


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

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


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

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


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

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

   Set objDataset=SuperMap1.Layers.Item(1)
     
SuperMap1.Selection.Dataset=objDataset
   SuperMap1.Selection.Add

      もしくは、

   SuperMap1.Selection.FromRecordest

もどる↑


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

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


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

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

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


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

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

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

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


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

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


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

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


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

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


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

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


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

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

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

もどる↑


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

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


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

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


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

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


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

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


soErrorオブジェクトについて

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

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

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


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

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


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

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

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


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フォームを削除します。
もどる↑


 

このページに関するお問合わせは、ユーザー登録を行っていただいた上、support@supermap-japan.com 宛にご連絡ください。

(c)2000-2008 SuperMap Japan Co., Ltd. All Rights Reserved. 
Last Update 2008-5-8