よ
くある質問と回答(FAQ) |
|
| 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メソッドを使用することでレコードセットが更新されます。soRecordsetのEditとUpdateメソッドは対になっており、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.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. |