You are on page 1of 79

GeoMedia4.

Automation
GeoMedia GeoMedia

1
2
3
4
5
6
7
8
9

OLE
COM?
OLE

Excel
GeoMedia
GeoMedia

GeoMedia
GeoMedia
GeoMedia
GeoMedia

GDatabase GRecrdset GField MapView Legend


LegendEntries Style DataView

GeoMedia
Execl

GeoMedia

-1-

-2-

OLE

GeoMedia

GeoMedia

OLE
(Object Linking and Embedding)OLE
Word Excel
Excel OLE



OLE OLE
OLE OLE Excel
Visual Basic GeoMedia
(MapViews)(Pipes) Visual Basic Visual C++
OLE OLE COMOLE

GeoMedia
OLE

COM
GeoMedia
(COM) GeoMedia

OLE COM COM


COM
COM
-3-

COM
COM COM COM
COM

OLE OLE
COM COM Windows NT
COM Windows
Unix Macintosh COM
MSDN.Microsoft.com)Kraig Brockschmidt OLE 2

OLE
OLE OLE (Doument-centric)
(Application-centric)

OLE
OLE OLE
OLE
GeoMedia
OLE COM

IUnknown

COM
GeoMedia


OLE OLE OLE

VC++Visual BasicPowerBuilderDeveloper 200Delphi


OLE

-4-

OLE
VBVC
(Setting)/(Getting)

Type Library

GeoMedia DLLOCX EXE


.tlb Visual Basic DLL
GeoMedia

Property
Method(Event)

click

(member object)GeoMedia Application


-5-

Document Document Application


Dependent Object
GeoMedia GDO GField
GTableDef GField GTableDef
(Collection)

Windows Window Queries Query


GeoMedia Windows
DataViewWindow MapViewWindow Queries
Query

Count Item
Count Item
For I = 1 To objCollention.Count
ObjX = objCollention.Item(I)
Next I
1 1 0
0 0 GeoMedia GDO 0
GeoMedia 1



_NewEnum For Each

Item
objCollection.Item(I)
objCollection(I)
Text
txtControl1.Text
txtControl1

-6-

Table - 1

Application Document Document Name


Name
Application.Document.Name

With
Application.Document.Name = Automation Overview
Application.Document.Date = 7/12/97
Application.Document.Author = John Doe

Set tmpDoc = Application.Document


tmpDoc.Name = Automation Overview
tmpDoc.Date = 7/12/97
tmpDoc.Author = John Doe

With Application.Document
.Name = Automation Overview
-7-

.Date = 7/12/97
.Author = John Doe
End With


DimNewCreateObject

Visual Basic Dim Dim (Object


Variables)Dim ObjX As Object ObjX
Object
ObjX

Dim objDoc As Object


Set objDoc = Application.Document
MyApplication

Set objDoc = CreateObject(MyApplication.Document)


Visual Basic New
Dim objDoc As New Document

New
CreateObject Dim

(DLL)(EXE)
EXE EXE DLL

-8-

GeoMedia

UUIDGUIDCLSIDPROGID

(GUID: Globally Unique Identifier)GUID 128

GUID (IID)(CLSID)
IIDIID
IID
IID
CLSID CLSID CLSID
IID
ProgIDProgID
Windows ProgID CLSID API (_)
(.) ProgID GeoMedia CLSID GeoMedia
ProgID CreateObject
GeoMedia.Application GeoMedia.Connection GeoMedia.ColorSchemes ProgID
Access.GDatabase Access GDO ProgID

C++
HRESULT
IUnknownIDispatch

-9-

Excel
GeoMedia OLE

Intergraph Microsoft

Excel Excel GeoMedia

- 10 -

Application Workbooks Workbooks

Workbook

Workbook WorksheetsDialogSheetsCharts Modules .

Worksheets Worksheet

Worksheet Range

Range Areas Border

Excel
Range
Application.Workbooks(1).Worksheets(1).Range

Excel Metacollections

2 Excel

- 11 -

Excel

Excel

Visual Basic
(Workbook)

GeoMedia

GeoMedia
GeoMedia GeoMedia
GeoMedia

GeoMedia
GeoMedia

GeoMedia

GeoMedia
GeoMedia /GeoMedia

GDO Server GeoMedia


GeoMedia GDO Server

- 12 -

GeoMedia
1GDO
GDO(Geographic Data Objects) OLE
GDO Intergraph
Visual Basic OLE Intergraph Open GIS
Consortium (OGC) GDO GDO
Microsoft DAO RDO Microsoft OLE
GIS

GIS GDO GIS


GDO
GDO

2Grecordset
GRecordset GRecordset
() ()GeoMedia GRecordset
GRecordset (cursor)
GRecordset GFields

Recordset GRecordset
GRecordset GRecordset
GRecordset
GRecordset MoveNext Bookmark

GeoMedia

GDO Term

Database

Other Synonyms

GDatabase

Database

Warehouse, server

GTableDef

Table

Feature Class

GField

Column

Attribute, field

GRecordset

Cursor

Recordset

Active row (bookmark)

Current row

Feature instance, row

- 13 -

3Legend
GeoMedia Legend
GeoMedia
feature

4Pipe
Pipe GeoMedia Pipe
GRecordset GeoMedia GRecordset
Pipe
Pipe GeoMedia GeoMedia
Pipe GRecordset
GRecordset GRecordset Pipe
GRecordset Pipe

5Coordinate System
GIS

GeoMedia

GeoMedia
Projected coordinate systems X,Y,H
X Y h

Geographic coordinate systems(lon)(lat)


(h)

GeoMedia

6Feature Class
Feature class GeoMedia
feature class feature classes

7Feature
Feature
feature class feature feature class

- 14 -

GeoMedia
GeoMedia GeoMedia
GeoMedia

GeoMedia

Legend Style
GeoMedia Style

- 15 -

syy
ies Application.Document.Connections
Application.ActiveWindow.MapView.Legend.LegendEntries

Application.Document.Connections(1).ConnectionName

skip the next object as you continue through the hierarchy.


Application.Document.Windows(1).Mapview.Visible

QuerySubFolders QueryFolder QueryFolders

1Application
GeoMedia Application

Windows - Application

Active Window - DataWindow


MapWindow

PreferenceSet - GeoMedia

UnitsOfMeasure - ()

Category / Command - t GeoMedia

Menubar / MenuItem - Menubar MenuItem

Accelerator - ( F1)

Toolbar / ToolBarButton Toolbar ToolBarButton


Toolbar

DockableControl - GeoMedia ActiveX

Document

Document Application GeoMedia


(FRAMME, MGE)(Access, Oracle
SDO) Geoworkspacedocument
document document GeoMedia

- 16 -

document
document

2Document
document

Connections Connection GDO

Windows document windows (


Application.Windows)
MasterLegend legend GeoMedia recordsets

Legends legend
QueryFolder query classifications query classification
query
SelectedObjects

CoordSystemsMgr

SpatialFilters connection
PropertySet -
ColorSchemes
Windows MapWindow DataWindow .
DataWindow DataView DataView

3MapWindow
MapWindow MapViewNorthArrow ScaleBar

NorthArrow OLE
ScaleBar MapView (1
= 100 )
MapView
MapView Legend
CoordSystemsMgr
Legend MapView
LegendEntries

HighlightedObjects MapView

MapViewSelectedObjects Document MapView


SelectedObjects

- 17 -

CoordSystemsMgr MapView

4Coordinate Systems
CoordSystemsMgr CoordSystem
GIS

CoordSystem
RefSpaceMgr

UnitFormatSpec
GeogSpace RefSpaceMgr

PaperSpace -
RefSpaceMgr
ProjSpace RefSpaceMgr

AltCoordSystemPaths
AltCoordSystemPath
AltCoordSystemPath CoordSystemsMgr

LeastSquares -
DatumTransformation -

- 18 -

5Legend
legend (Legend Entry)
(GRecordset)

RecordLegendEntry
RasterLegendEntry

RecordLegendEntry

RasterLegendEntry

RangeLegendEntry

UniqueValueLegendEntry

Style

TitleFont, SubtitleFont, HeadingFont

Range

UniqueValue

DisplayedObjects - HighlightedObjects MapViewSelectedObjects

- 19 -

RecordsetObject -

RecordObject -

GeometryObject -

RasterObject -

6GDO
GeoMedia GDO
GDO

GDatabase

GTableDef

GField

GIndex

GRecordset

GError

- 20 -

GFRMAdminExtension FRAMME

GFRMSeg FRAMME

ExtendedPropertySet OriginatingPipe

Name

Notification

Errors - GErrors

CoordSystem - GRecordset

7Geometry and Styles


GIS
GIS FRAMME MGE
GeoMedia Access Oracle SDO
GDO(Blob)
BlobGeoMedia Geometry Geometry
Geometry
Geometry Blob
Style GIS Style
GeoMedia Style Style

- 21 -

GeometryCollection Geometry

PointGeometry

Origin X, Y, Z

Vector - I, J, K

Matrix - 4 x 4

OrientedPointGeometry

TextPointGeometry

LineGeometry

PolylineGeometry

RectangleGeometry

PolygonGeometry

BoundaryGeometry

Holes

RasterGeometry

ArcGeometry -

CompositePolylineGeometry - polyline geometrie

CompositePolygonGeometry - polygon geometrie

- 22 -

AreaStyle gdbAreal Style


TextStyle gdbGraphicsText Style
LinearStyle gdbLinear Style
BitmapStyle gdbPoint Style
SymbolFontStyle gdbPoint Style
HandleStyle handle Style
PointSymbolStyle - gdbPoint Style
PatternedLinearStyle - gdbLinear Style
PatternedAreaStyle - gdbAreal Style

8Service Pipes
GeoMedia Application
Application Application
Application Controls GeoMedia
Services Pipes
Pipe Service Pipes
Service

- 23 -

AttributeFilterPipe SQL

BufferZonePipe

SpatialQueryPipe

CSSTransformPipe

OriginatingPipe
NameExtendedPropertySetNotification

SortPipe

SortKey SortPipe

CenterPointPipe -

EquijoinPipe -

GraphicsTextPipe -

MovePipe -

SchemaProjectPipe -

SpatialFilterPipe -

StatisticsService

GeometryDigitizeService
- 24 -

GeometryEditService

GeometryStorageService Geometry Blob Geometry

ServerTransService

RasterPropertiesService

MeasurementService

MetadataService GDO GTableDef

TableProperty MetadataService

FieldProperty MetadataService

SmartLocateService

AutoPanService -

OutputTableService -

SnapService -

SymbolFileService - symbol Style

- 25 -

GMMapView MapView OLE


GMDataView DataView OLE
GMDefCoordSystem OLE
GMEventControl MapView OLE
GMFeatureCombobox feature OLE
GMFeatureListbox feature OLE
GMNorthArrow OLE
GMScaleBar OLE
GMWebBrowser - Internet Explorer OLE
GMPlacement - feature feature Geometry OLE

- 26 -

GMProperties - feature OLE


GMTextPlacement - OLE
GMPrecisionCoordinate - OLE
PickQuickDialog -
PageSetup - mapview
Print - mapview
GMFeatureComboboxInput - OLE
GMFeatureListboxInput - OLE
GMQueryStorage - OLE
GMTableStorage - GDO OLE
GMLegendEntryOutput - OLE
GMDataWindowOutput - OLE
GMJoinProperties - EquijoinPipe GUI OLE
GMLabelProperties - GUI OLE
EventServer
MapViewListeners MapViews
GeoMathUtilities - C

Intergraph GIS GeoMedia


GeoMedia
GeoMedia

- 27 -

GeoMedia GeoMedia

GeoMedia

- 28 -

3 GeoMedia

GeoMedia
GeoMedia GeoMedia
GeoMedia

GeoMedia
Tools > Customize (Menu
Bar)
Map
Data
None

HKEY_CURRENT_USER\Software\Intergraph\GeoMedia\02.00

- 29 -


(MenuBar/MenuItem, Accelerator,
Category/Command, ToolBar/ToolBarButton)
GeoMedia
GeoMedia

GeoMedia GeoMedia
C:\Program Files\GeoMedia\Program\Installusrcmd.exe
MyCommand.dll MyCommand.ini
dll ini ini
GeoMedia
dll

GeoMedia
PowerBuilder 5.0 dll GeoMedia
OLE PowerBuilder VB
Wrapper PowerBuilder
Application.CreateService GeoMedia

- 30 -

GeoMedia
GeoMedia GeoMedia

DLL GeoMedia DLLs

GeoMedia -0-2
-0-2
Application

Windows

ActiveWindow

Category(s)

Command(s)

MenuBar(s)

MenuItem(s)

Accelerator(s)

Document

DataWindow

MapWindow

MasterLegend

SelectedObjects

MapViewListeners

GMFeatureCombobox

GMFeatureListbox

ToolBar(s)

ToolBarButton(s)

GMFeatureComboboxInput

GMFeatureListbox Input

GMQueryStorage

GMTableStorage

GMLegendEntryOutput

GMDataWindowOutput

GeoMedia
GeoMedia
GeoMedia GeoMedia
(license) GeoMedia
Help > About MyApp... command.
Intergraph GeoMedia GeoMedia
(techtgm@ingr.com)

Object Bundles
GeoMedia

- 31 -

PowerBuilder PowerBuilder DLL

Intergraph OEM GeoMedia


GeoMedia

GeoMedia
GeoMedia GeoMedia
GeoMedia
GeoMedia GeoMedia
Visual Basic Excel
GeoMedia GeoMedia

Application.CreateService GeoMedia
CreateObject GeoMedia

GeoMedia
OLE/COM OLE

GUID, ProgID

- 32 -

Geomedia

GDO

GeoMedia
GeoMedia

1. GeoMedia
2. COM
3.
4. OLE
5. GeoMedia
6.
7. GeoMedia RecordLegendEntry
8.
9.
Dim objMD as Object
Set objMD = CreateObject(MService.MetadataService)

1. GeoMedia
2. GeoMedia :GDatabase GRecrdset GField MapView
Legend LegendEntries Style DataView

GDO

- 33 -

, GIS - GeoMedia
warehouse GDO MGE
MGE GDO Access Access GDO

Gdatabase OpenDatabase
Dim objAccessDbs As GDatabase
Set objAccessDbs = CreateObject(Access.GDatabase)
objAccessDbs.OpenDatabaseC:\wherever\myDB.mdb

CreateObject()
Dim objAccessDbs As New GDatabase

GeoMedia GDO

Access

Access

ArcInfo

AI

Oracle Spatial Cartridge

GW

MGE

MGE

FRAMME

FRAMME

MGE Segment Manager


- 34 -

MGSM

ArcView

AV

MGDM

MGDM

CAD Server

GCAD

Gdatabase GIS
Connection Connection
Connections Connection
MetadataService OriginatingPipe Connection
Connection Gdatabase
Dim objConnections As New Connections
Dim objConnection As Connection
Set objConnection
=objConnections.Add(c:\wherever\myDB.mdb)
With objConnection
.Type = "Access.GDatabase"
.Location = c:\wherever\myDB.mdb
.Connect
End With
Connection Connections

>, >,>

GeoMedia Program
Autoexec.bat path=
;C:\Program Files\GeoMedia\Program

1 Visual Basic C:\TGM\Labs\CustomApp\src\CustomApp.vbp.


Project Modules modDatabase, View
> Code
- 35 -

2 OpenDatabase
gobjConnections modGlobals.bas
3 Type Location Connect
4 CloseDatabase frmDatabase
lstDatabases
5 Project Forms mfrmMain View>Code
6 MDIForm_Unload
gobjConnections gobjConnections
Disconnect Nothing
7
8 Mode
gmcModeReadOnly

MetadataService
OriginatingPipe fields

GRecordset
Grecordset Gdatabase
OpenRecordset OriginatingPipe

GeoMedia
GDatabase
GDatabase OpenRecordSet
Dim objRS As GRecordset
Set objRS = objAccessDbs.OpenRecordset (Parcels)

Set objRS = objAccessDbs.OpenRecordset (SELECT * FROM Parcels)

- 36 -

Set objRS = objAccessDbs.OpenRecordset (SELECT * FROM


Parcels WHERE AssessedValue > 100000)

1.

GdbOpenDynaset

2.

GdbSnapshot

Set objRS = objAccessDbs.OpenRecordset (SELECT * FROM Parcels


GdbSnapshot)

OriginatingPipe
OriginatingPipe

GeoMedia

Connection CreateOriginatingPipe OriginatingPipe


OutputRecordset

Dim objOP As OriginatingPipe


gobjConnections(1).CreateOriginatingPipe objOP
objOP.Table = Oarcels

- 37 -

objOP.Filter = AssessedValue > 100000


Dim objRS As GRecordset
Set objRS = objOP.OutputRecordset

MoveMoveFirstMoveLastMoveNext
MovePrevious BookMark

Set objRS = objDB.OpenRecordset (Parcels)


If Not (objRS.EOF and objRS.BOF) Then
Do Until objRS.EOF
.
code processing the individual records
.
objRS.MoveNext
Loop
Else
MsgBox (No Parcels found.)
End If

EOF BOF True


RecordCount
MoveLast

MoveNext

(Collection)

- 38 -

Dim objField As GField


For Each objField in objRS.GFields
Print #1, objField.Name & : & CStr(objField.Value)
Next objField

GeoMedia
WWW.ingr.com GeoMedia Team of GeoMedia
GField Type Type gdbSpatial
gdbGraphic SubType

Type / SubType

Description

GdbSpatial

Classification of data such


that the coordinate
information is assumed
spatially accurate

GdbLinear

Geometry which is
comprised of a series of
points

GdbAreal

Geometry which is
comprised of a series of
points where the first and
last point are coincident.
The area may include one
or more holes.

GdbAnySpatial

Geometry which might


either contain one of
each type of geometry
(gdbPoint, gdbLinear,
gdbAreal) in a collection
or might contain any one
of these types in a given
feature class

GdbCoverage

Geometry describing an
image (raster data)

GdbPoint

Geometry defined by a
single point

- 39 -

GdbGraphic

Classification of data such


that while coordinate
information is identified
relative to the earth, the
spatial location is not
significant. This type is
usually associated with
annotative data like
labels.

GdbSpatial

Same as in gdbSpatial.

GdbLinear

Same as in gdbSpatial.

GdbAreal

Same as in gdbSpatial.

GdbAnySpatial

Same as in gdbSpatial.

GdbCoverage

Same as in gdbSpatial.

GdbGraphicsTe
xt

Geometry defined by a
point and a text string.

gdbPoint

Same as in gdbSpatial.

Geometry GeometryStorageService
Geometry

Analyze > Recordset Information

AnalyzeRecordset
1. VB C:\TGM\Labs\CustomApp\src\CustomApp.vbp.
Forms , frmSelectFeature, View > Code.
2. cboDatabases_Click, Table
lstFeatures .
GTableDef.Name
objMDSrvc
GetTables
vTableList vTableList Variant
UBound
LBound

- 40 -

3. Modules , modRecordset,
View > Code. CreateRecordset, OriginatingPipe
.
GetSelectFeatureInfo
objActiveConnection CreateOriginatingPipe
OriginatingPipe OriginatingPipe Table
GetSelectFeatureInfo . OriginatingPipe
OutputRecordset CreateRecordset (objRS).
CreateRecordset .
transformation
4. AnalyzeRecordset CreateRecordset

This is the sub procedure called when you select Analyze > Recordset
Information Recall that a subroutine calling statement does not require
parenthesis around the arguments. ObjRS is the argument to
CreateRecordset.
5.

frmRecordsetInfo txtFeature

Use the value of SourceTable on one of the recordsets fields.


6. lstFields and tally (keep a
running count) each of the types of fields.
Gfields GField Type
objField
7.

txtCount

EOF BOF
8. Analyze > Recordset Information

Choose the Start command from the toolbar or Run menu. In your
application main window, main menubar, select File > Open. In the
Common File Open dialog, choose an Access database (e.g., US Sample
Data.mdb in the Warehouses directory). Select Analyze > Recordset
Information, and choose a feature to analyze.

- 41 -

MetadataService
OriginatingPipe fields

GDO Grecordset DAO Recordset


GeoMedia
MapView

MapView

(Legend) MapView
MapView
Dim objLegend As New Legend
Set ocxMapView.Legend = objLegend
Set objLegend = Nothing
LegendEntries
RecordLegendEntry

GeoMedia
GeoMedia
ServerTransService CSSTransformPipe
CoordSystemsMgr
ocxMapView.CoordSystemsMgr =
CreateObject(CoordSystemsMgr)

- 42 -

ServerTransService
CreateSimpleTransFromCSMtoServer
CSSTransformPipe
LoadData

View > Add


Feature form MapView

1. VB C:\TGM\Labs\CustomApp\src\CustomApp.vbp.
Forms frmMap View > Object
MapView
2. MapView Project > Components
Components Controls GMMapview OLE Custom
Control module OK

GMMapView

MapView Project > Components


Components Controls Intergraph GeoMedia
Mapview Control 2.0 OK

GMMapView

GMMapView

frmMap

3. Name ocxMapView. leftright 0,


0
4. Forms frmMap View >
Code Form_Load CoordSystemsMgr
CoordSystem.RefSpaceMgr.PaperSpace
NominalMapScaleDenominator CoordSystemsMgr
ocxMapView
CoordSystem CoordSystemsMgr , map view
Cylindrical Equirectangular
On-the-fly

- 43 -

5.

Form_Load, Legend map view

GeoMedia ProgID Legend


ocxMapView Legend
6.

mnuViewLegend_Click, Legend on off.

Legend, boolean Visible legend


(Visible = True), Checked
MnuViewLegend
7. View
> Legend

: mnuDisplayFeature_Click,
You are calling CreateRecordset from the previous lab.
, GetLegendEntry Given the
RecordLegendEntry returned from that function,
DisplayTheLegendEntry map view

8. Modules modMap, View >


Code. RecordLegendEntry

9. ExtendedPropertySet
OriginatingPipe PrimaryGeometryFieldName.
Name legend entry
title
GetLegendEntry RecordLegendEntry
objExt Name legend entry Title.
Note: Similarly, the extended property GeometryType is used to get the
geometry type which is passed to the function GetStyleObject. This
function returns a style (based on the given geometry type) that is then
assigned as the Style property of the RecordLegendEntry. Style objects
will be covered in more detail in a later lab. This function will abstract that
for us during this lab.
10. As we have discussed, a transformation must be established between
each coordinate system used by your application. In the

- 44 -

CreateRecordset procedure, the ServerTransService is created to create


a transformation between the projection of the coordinate system of the
map view and the data being returned from the server. This one method
call is all that is needed to accomplish this. Now that the transformation
has been created, a CSSTransformPipe is created to take the input
recordset and give an output recordset whose geometries have been
ransformed from the server side to the client side. Take that output
recordset from the pipe object and assign it to the legend entry
Recordset property.
Using the Set keyword, assign the OutputRecordset from the
objCSSPipe to the GetLegendEntry variable.
11. In Sub DisplayTheLegendEntry, the legend entry is checked to be
sure it is a valid object, and then ValidateSource is called to ensure that
it has a recordset and proper geometry field set. Append the legend entry
to the legend LegendEntries collection, and load the data by calling the
LoadData method on the legend entry. If it is the first legend entry being
loaded on the map view, then do a fit of the data in the map view.
The Append method has a first argument of a legend entry and then two
optional arguments eforeIndex and AfterIndex. It must be called without
an index when appending the first Legend Entry. The second and
subsequent times Append is called requires using either the BeforeIndex
or the AfterIndex argument, but not both. For this exercise, append the
second and subsequent legend entries to the top of the legend (i.e., give
them a BeforeIndex of 1). The legend entry to append is stored in objLE.
If this is the first legend entry, we want to call Fit on the map view.
12. Now, test your code by running the application, and selecting View
> Add Feature from the Main Window after you have opened a
connection and activated the Map Window.

Choose the Start command from the toolbar or Run menu. In your
application main window, main menubar, select File > Open. In the
Common File Open dialog, choose an Access database (e.g., US Sample
Data.mdb in the Warehouses directory). Select Window > Activate
Map. Select View > Add Feature, and choose a feature to display.
Notice that if you view the legend now (View > Legend), you will see the
newly created legend entry.
Summary: In Lab 4, you have placed a map view control on your form.
The paper scale of the coordinate system has been adjusted to control the
thickness of the lines in the display. The legend entry was created this

- 45 -

involved finding the geometry field using ExtendedPropertySet,


creating a default style, and appending the entry to the collection. A
coordinate transformation was established between the server and the
view coordinate system. Finally, the legend entry was validated and the
data loaded into the geometry cache

Style

AnyStyle gdbAnySpatial

Color Width BackColor BackWidth


GeoMedia true type MicroStation

HKEY_CURRENT_USER\Software\Intergraph\Applications\GeoMedia\PrefSets
\Options-FileLocations\Font1, ...\Font2, and ...\Font3
GeoMedia GeoMedia
MicroStation cell AutoCad block
.FSM GeoMedia

GeoMedia

GeoMedia -

=1/72 0.0139inch
=0.353
gmsStyleUnitsPaper HIMETRIC 1
HIMETRIC=0.01
=35 HIMETRIC

- 46 -

300 GeoMedia 9
3 1/8
StyleUnits gmsStyleUnitsView
StyleUnits gmsStyleUnitsPaperAsNonscaling
gmsStyleUnitsPaper gmsStyleUnitsView
View Independent HIMETRIC
36 1/2inch

Style Object

Normally Applied To

Covered
Lab?

AreaStyle

Subtype = gdbAreal

Yes

AnyStyle

Subtype = gdbAnySpatial

Yes

BitmapStyle

Subtype = gdbPoint

No

HandleStyle

Not applicable

No

LinearStyle

Subtype = gdbLinear

No

SymbolFontStyle

Subtype = gdbPoint

Yes

TextStyle

Subtype = gdbGraphicsText

Yes

PointSymbolStyle

Subtype = gdbPoint

No

PatternedLinearStyle

Subtype = gdbLinear

No

PatternedAreaStyle

Subtype = gdbAreal

No

in

GeoMedia
NorthArrowScaleBar MapViewID
MapView

In this lab, we will add the custom controls to our map view. We will set the necessary properties
in the form load operation and turn on their display.

Section A: North Arrow


1.

Open the project, C:\TGM\Labs\CustomApp\src\customapp.vbp.

- 47 -

The project window will appear.


2.

Select frmMap from the Forms list, and select View > Object.

The Map Window form will appear.


3. Delete the existing GMNorthArrow control by selecting this control
on the form and pressing the delete key. From the toolbox, select the
GMNorthArrow control.
The cursor will change to cross or plus sign.
4. Create a rectangle by placing the cursor in the upper right corner of
the form and dragging to create a 495 x 495 box.
An arrow bitmap will appear. The name of the control will default to
GMNorthArrow1.
5. Adjust the properties of the control to set BackTransparent to True in
the Properties Window. This only applies to the printed north arrow and
not to the display.
6.

Set the BackColor to the color of your map view.

Select the Palette tab in the Properties Window to associate a particular


color.
7.

Select frmMap from the Forms list, and select View > Code.

8. Select the Form object and Load from the procedure list. Add logic to
assign the Dispatch pointer of the map view control to the MapViewID
property of the north arrow.
Both the GMNorthArrow1 and ocxMapView are properties of frmMap.
The code skeleton includes logic for adjusting the controls position within
the map view control.
9.

Save and compile the application. Test the application.

Open a database. Select Window > Activate Map. The NorthArrow


should appear at the location you placed the control. The area
surrounding the arrow should be the same color as the map view.
Summary: In Lab 6, Section A, you placed the control on the form and
established the communication through the map view. Many other
properties can be configured for the North Arrow.

- 48 -

Section B: Scale Bar


1.

Open the project, C:\TGM\Labs\CustomApp\src\customapp.vbp.

The project window will appear.


2.

Select frmMap from the Forms list, and select View > Object.

The Map Window form will appear.


3. Delete the existing GMScaleBar control by selecting this control on
the form and pressing the delete key. From the toolbox, select the
GMScaleBar control.
The cursor will change to cross or plus sign.
4. Create a rectangle by placing the cursor in the upper right corner of
the form and dragging to create a 3255 x 495 box.
A scale bar will appear. The name of the control will default to
GMScaleBar1.
5. Adjust the properties of the control to set BackTransparent to True in
the Properties Window. This only applies to the printed scale bar and not
to the display.
6.

Set the BackColor to the color of your map view.

Select the Palette tab in the Properties Window to associate a particular


color.
7.

Select frmMap from the Forms list, and select View > Code.

8. Select the Form object and Load from the procedure list. Add logic to
assign the Dispatch pointer of the map view control to the MapViewID
property of the scale bar.
Both the GMScaleBar1 and ocxMapView are properties of frmMap.
The code skeleton includes logic for adjusting the controls position within
the map view control.
9.

Save and compile the application. Test the application.

Open a database. Select Window > Activate Map. Select File > Open
to open a database. Select View > Add Feature and display the States
- 49 -

feature. The ScaleBar should appear at the location you placed the
control. The area surrounding the scale bar should be the same color as
the map view. The ScaleBar will adjust to the scale of the data.
Summary: In Lab 6, Section B, you placed the control on the form and
established the communication through the map view. Many other
properties can be configured for the ScaleBar.

GeoMedia PageSetup
PreferenceSet
UnitsOfMeasure Print

Postscript
Postscript
map Window Page SetupPrinterPropertiesDocument
Properties OptionsEncapsulated Postscript File

GeoMedia GeoMedia

GeoMedia Imagineer

<![endif]>
OPTIONAL Lab 7: Printing
For this lab, we will implement the Map > File > Print command for the map view.

Section A: PageSetup
1.

Open the project, C:\TGM\Labs\CustomApp\src\customapp.vbp.

The project window will appear.


2.

Select frmMap from the Forms list, and select View > Code.

- 50 -

3.

Select the mnuFilePrint object, and select the Click procedure.

4.

Call the PageSetup method on the objPageSetup command object.

The calling sequence for this method is: PageSetup( Dispatch,


PreferenceSet, ApplicationName, HelpFileName, UOM) as Long
where the Dispatch argument is the value of the Dispatch property from
the map view control. The PreferenceSet is the object of type
PreferenceSet. In your application, this is declared globally. The
ApplicationName is the text string used for the print queue entry name.
Any value may be used. The HelpFileName is the text string indicating
the name of the help file used if the help button is selected on one of the
dialogs. Any value may be used Finally, the UOM is an object of type
UnitsOfMeasure. The return value is always zero.
1. Save the project, and compile the executable by selecting File >
Make customapp.exe.
2.

Test the application.

Open a database. Select Window > Activate Map. Select View > Add
Feature, select a feature, and select OK. Select File > Print. The
PageSetup dialog should appear. Select OK or Cancel.
Summary: In Lab 7, Section A, you created the preference set object and
UnitsOfMeasure objects. These are used by the page setup to determine
size of the areas. You configured the command to display this dialog.

Section B: Print
1.

Return to the project.

2.

Select frmMap from the Forms list, and select View > Code.

3.

Select the mnuFilePrint object, and select the Click procedure.

4.

Add logic to call the Print method on the print command object.

The calling sequence for this method is: Print( Dispatch,


ApplicationName, PreferenceSet, HelpFileName) as Long where
Dispatch is the value of the Dispatch property from the map view control.
ApplicationName is a text string used for the print queue entry name. Any
value may be used. PreferenceSet is an object of type PreferenceSet.
Finally, HelpFileName is a text string indicating the name of the help file

- 51 -

used if the help button is selected on one of the dialogs. Any value may
be used.
5. Save the project, and compile the executable by selecting File >
Make customapp.exe
6.

Test the application.

Open a database. Select Window > Activate Map. Select View > Add
Feature, select a feature, and select OK. Select File > Print. The
PageSetup dialog should appear. Select OK or Cancel. The Print dialog
should appear. Select OK or Cancel. If a printer is available, review your
results.
Summary: In Lab 7, Section B, you initiated the print dialog. Again, the
map view dispatch is used to establish the location of the map view. This
component actually drives the print operation.

GeoMedia GeoMedia

feature class
query
GeoMedia
GeoMedia

GeoMedia query GeoMedia


GDO

OpenRecordset
OriginatingPipe SpatialQueryPipe

Dim objOP As OriginatingPipe


gobjConnections(1).CreateOriginatingPipe objOP
objOP.Table = Parcels
objOP.SpatialOperator = gdbTouches
Dim vSpatialFilter as Variant
- 52 -

vSpatialFilter = objHiwayTbl.GFields(Geometry).Value
objOP.SpatialFilter = vSpatialFilter
objOP.GeometryFieldName = Geometry
Dim objRS As GRecordset
Set objRS = objOP.OutputRecordset
SpatialQueryPipe
GeoMedia
GeoMedia

Spatial Query Pipe

Spatial Query
Pipe

Spatial Query Pipe

gmsqWithinDistance

- 53 -

gmsqMeet

gmsqOverlap

- 54 -

gmsqContains

gmsqContainedBy

gmsqEntirelyContains gmsqContains
gmsqEntirelyContainedBy gmsqContainedBy

gmsqSpatiallyEqual

- 55 -

gmsqTouches

Property

Description

DerivedGeometryFieldName

Set this property to include the


geometry object resulting from the
spatial comparison. This field name
must be unique.

Distance

Applicable
only
SpatialOperator
gmsqWithinDistance.

ErrorCount

Populated at the completion of the


spatial comparison and indicates how
many geometry values where skipped
during processing.
The spatial
analysis is completed ignoring these
geometries in its output.

FirstGeometryFieldName

Specifies the name of the geometry


field in the first recordset that will
participate in the spatial analysis.

FirstRecordset

The set of data representing the left


side of the expression. That is, for the
expression A overlap B, A is the
- 56 -

when

the
is

FirstRecordset.
OutputRecordset

The result of the spatial analysis. If


you set the ReferenceFirstRecordset
flag to true, the recordset contains the
feature instances from the first
recordset that satisfy the analysis.

ReferenceFirstRecordset

If true, indicates that the attributes of


the first recordset should be included
in the output recordset.

ReferenceSecondRecordset

If true, indicates that the attributes of


the second recordset should be
included in the output recordset.

SecondGeometryFieldName

Specifies the name of the geometry


field in the second recordset that will
participate in the spatial analysis.

SecondRecordset

The set of data representing the right


side of the expression. That is, for the
expression A overlap B, B is the
SecondRecordset.

SpatialOperator

A constant that identifies the type of


spatial analysis to perform.

spatial query pipe


CSSTransformPipe
gmsqWithinDistance
A overlap B A
B B overlap A B A

Lab 8: Spatial Query

This section of the lab will add the logic to display the list of linear measurements in the
combobox.

Section A: Populating Form


1.

Open the project, C:\TGM\Labs\CustomApp\src\customapp.vbp.

The project window will appear.


2. Select frmSpatialQuery from the Forms list, and select View >
Code.

- 57 -

3.

Select the Form object, and select the Load procedure.

4. Add logic to retrieve the list of linear measurement types from


UnitsOfMeasure object.
First create a UnitsOfMeasure object. Store the result in objUOM. Then
execute the GetUnitIDs method to retrieve the list of distance unit
identifiers and store this in the temporary variable objUnitIDs. Iterate
through the collection of unit identifiers and use the GetUnitName
method to get the name of each unit from the UnitsOfMeasure object.
Finally, put the names in the combobox.
5.

Set the default distance/unit to 1 m (one meter).

Use the constant igDistanceMeter as an argument to the GetUnitName


method on the objUOM variable.
6. Save the project, and compile the executable from File > Make
customapp.exe.
7.

Test the application.

Open a database. Select Window > Activate Map. Select Analyze >
Spatial Query. Select the within distance operator to test the display of
the list. Cancel the dialog, as the code has not been finished yet to
process OK.
Summary: In Lab 8, Section A, you retrieved the linear measurement
types from the UnitsOfMeasure object and displayed them in the
combobox control. You tested the processing of the command to display
the special within distance controls when that spatial operator is selected.

This section of the lab will create the input recordsets, set up the pipe, and retrieve the output
recordset.

Section B: Processing the Request


1.

Open the project, C:\TGM\Labs\CustomApp\src\customapp.vbp.

The project window will appear.


2. Select frmSpatialQuery from the Forms list, and select View >
Code.
3.

Select the btnOK object, and select the Click procedure.

- 58 -

4. Add a function to check that a feature has been selected in both


treeview controls on the form. Also, if the spatial operator is
gmsqWithinDistance, check that a valid distance has been entered.
Create a boolean function called ValidSpatialInput that checks both
treeview controls and returns a status of True if the user has selected a
feature in each. The function also return the names of the two selected
features in sFeature1 and sFeature2. If the result is Not true, you will
exit the subroutine.
5.

Add logic to retrieve the recordsets associated with the two selections.

Create an OriginatingPipe recordset using the feature names retrieved in


the previous step. Note: In order to get the connection that corresponds
to the selected feature each connection node in the treeview control was
assigned the correct index in its Tag property. So, get the
treeview.SelectedItem.Parent.Tag, convert it to a number and use it
as the index into the gobjConnections collection.
Populate the Table property on the pipe with the sFeature1 and
sFeature2 values and store the results in objRS1 and objRS2
respectively.
6. Add logic to check for matching coordinate systems. If the systems
are not the same, perform a transformation of one of the recordsets.
Use the GetCSGUID function to retrieve the GUID of each recordset
created in the previous step. These are stored in RS1CSGUID and
RS2CSGUID. If they are not equal call the function
TransformSpatialRS. This function returns transformed recordsets that
should be stored in the variables objTransRS1 and objTransRS2. In this
routine, a ServerTransService object is created and uses the
CreateSimpleTransFromCSMtoServer method to register the recordset
GUID as an alternate transformation. Then it creates a CSSTransformPipe
and transform the recordset to the map view coordinate system.
In the first part of this if statement, assign the transformed recordsets to
the FirstRecordset and SecondRecordset properties on the
SpatialQueryPipe (objSQPipe). In the second part of the if statement,
use the original recordsets (objRS1 and objRS2).
7. If the operator is gmsqWithinDistance, convert the units to the units
of the recordsets.
Create a UnitsOfMeasure object (objUOM). Get the distance and units
from the form. Convert the distance to meters using the

- 59 -

ConvertUnitToUnit method. The resulting distance is stored in


dblNewDist.
8.

Display the results of the spatial query in the map view.

Add code identical to that which you did in Lab 4 using the
GetLegendEntry and DisplayTheLegendEntry functions. Only create a
legend entry if there are rows in the recordset. This can be determined by
testing the EOF and BOF properties. The input to the GetLegendEntry
function is objSQRS while the output should be stored in objLE.
9. Save the project, and compile the executable from File > Make
customapp.exe.
10. Test the application.
Open a database. Select Window > Activate Map. Select Analyze >
Spatial Query. Select two features and an operator. Select OK.
Processing should complete although you wont see any displayed data.
Summary: In Lab 8, Section B, you created the OriginatingPipe recordsets for the selected
features. You compared coordinate systems through the CoordSystemGUID values. If they
were not the same, you transformed one recordset to the other coordinate system. If the
operator was Within Distance, you converted the input value to the units of the data. You
reused your existing functions for creating and displaying a legend entry.

BufferzonePipe GeoMedia

multiple stacked or multiple ringed

BufferzonePipe
OutputRecordset

Buffer Zone
BufferzonePipe
Property

Description

BufferType

:
gmbtAreaInside,
gmbtLinearButtEnd,

- 60 -

gmbtAreaOutside,

gmbtLinearRoundEnd,
gmbtLinearSquareEnd,
gmbtPoint,
gmbtPointRinged, gmbtPointStacked.
DistanceType

:
gmbdConstant, gmbdVariable.

ErrorCount

InputDistance

DistanceType
DistanceType

InputGeometryFieldName

InputRecordset

Merge

gmbmAll, gmbmNone, gmbmOverlap.

OutputGeometryFieldName

OutputRecordset

Tolerance

0.01.

Section A: Creating a Buffer Zone


In this section of the lab, the custom application will display a buffer zone form upon selecting the
Analyze > Buffer Zone map view menu item. You will select the feature to buffer, enter the
distance from the feature to measure the buffer zone, and choose the units of measure for that
distance. In order to view the buffer zone in the map view, you must also select a database and
table to store the results in. The output database must be read/write. The form will automatically
default a new output table name (e.g., BufferZone1). You can either accept or modify the name or
pick an existing table for the results. Once the OK button is selected, the application will create
the BufferzonePipe object, calculate a buffer zone, populate an output table, and display the results
in the map view.

1.

Open the project, C:\TGM\Labs\CustomApp\src\customapp.vbp.

The project window will appear.


2.

Select frmBuffer.frm from the Forms list, and select View Form.

- 61 -

The Buffer Zone form will appear. All of the controls have been placed on
the form already. You will add code to the procedure for the OK button to
perform the actual bufferzone computation.
3.

Double click on the OK button.

The code window will appear with the focus set to the btnOK_Click
function.
4.

Create the BufferzonePipe object.

Use the objBufferZoneSrvc variable for this object.


5. Select the SetupBZPipe function. Convert the distance and unit
strings from the forms unit selection to meters.
You will need to create a UnitsOfMeasure object (objUOM), and pass the
distance and unit values from the form to the ConvertUnitToUnit method
to get the distance in meters.
6. Calculate the true projected input distance and assign this to the
BufferzonePipe.
First get the scale factor from the coordinate system with the
StorageToProjectionScale method. Use this value (dblGeomFactor) as
the denominator and the value in Step 5 (dblNewDist) as the numerator
in the calculation the projected distance. Set this property on the
BufferzonePipe.
7.

Set the BufferType property on the BufferzonePipe.

This will vary based on the geometry type of the feature that is to be
buffered. Use the Object Browser to find the values for the
BufferZoneTypeConstants.
8.

Set the geometry field properties for both the input and output tables.

The input geometry field name has already been retrieved and stored in
strInputGeometryFieldName.
9.

Calculate the buffer zone.

Return to the btnOK_Click function. Set a recordset variable


(objBufferZoneRS) equal to the OutputRecordset property of the
BufferzonePipe.
10. Create a new table with the name of the bufferzone feature class.

- 62 -

Scroll down to the UpdateOutputTable function. Create a


MetadataService object (objMetadataSrvc) and set the connection
(objConn) on it. Execute the CreateTableDef method on the associated
database within the connection object.
11. Create an originating pipe object to create a recordset for the
bufferzone data.
Scroll to the AddLegendEntry function. Create an OriginatingPipe
(objOP) recordset (objRS) of the buffer zone feature class. The template
already includes the logic to create a coordinate transform for this
recordset.
12. Display the buffer zone feature on the map view.
Again, in the AddLegendEntry function, add code similar to that which
you did in Lab 4 using the GetLegendEntry and
DisplayTheLegendEntry functions. The call to GetLegendEntry will
have the input objRS and will populate the variable objLE.
13. Save and compile the application. Test the application.
Open a map view. Select the Analyze > Buffer Zone command. After
pressing the OK button, you should see the mouse pointer change to an
hourglass and after a few seconds the bufferzone feature will display in
the map view.
Summary: In Lab 9, you established the pipe input properties from the
users selections. The units specified by the user are converted to meters.
The database scale is retrieved and is used in the calculation for the pipes
input distance. Meters is the common measurement unit for all internal
operations within coordinate systems and measurement. A new database
table is created in the warehouse and metadata information added for the
table. The table is populated from the output recordset of the pipe. Once
the data is stored, you created an originating pipe recordset on the new
table. You again reused the GetLegendEntry and
DisplayTheLegendEntry functions to complete the command.

SmartLocateService

EventServer and EventControl

- 63 -

LocatedObjectsCollection

HighlightedObjects

SmartLocateService

Locate
SmartLocateService LocatedObjectsCollection

Property/Method

Description

FenceMode

locFenceInside or locFenceOverlap.

PixelTolerance

Locate

Dim objSmartLocSvrc As New SmartLocateService


objSmartLocSvrc.Locate objPointGeometry, ocxMapVw, _
objLocatedObjects
LocatedObjectsCollection Locate

EventServer and EventControl


SmartLocateService EventControl
EventControl EventControl
EventControl AddMapView
EventServer EventServer
EventControl EventServer
EventControl
Dim objEvServer As New EventServer
ocxEvCtrl.AddMapView

ocxMapVw1.Dispatch, objEvServer

ocxEvCtrl.AddMapView ocxMapVw2.Dispatch, objEvServer

- 64 -


RemoveMapView EventServer

LocatedObjectsCollection
SmartLocateService

HighlightedObjects
highlight set or select set.
LocatedObjectsCollection
ocxMapVw.HighlightedObjects.SetDisplayColor GB(255,0,0)
ocxMapVw.HighlightedObjects.Add objLocObjects.Item(1)

Property/Method

Description

Count

Number of highlighted objects in the collection.

SetDisplayColor

Set the highlight color.

Add

Add an item to the collection.

Clear

Clear the highlight set.

GetRange

Returns the corner points of the minimum


bounding rectangle that holds all highlighted
features.

IsMember

Takes as input a pointer to a feature and returns


true or false indicating if the object is in the
collection.

Remove

Remove an item from the collection

Lab 10: Locate

This lab selects a feature or features in the map view, and then iterates through the highlighted
objects. You will access the recordset corresponding to the selected feature, and finally display the
- 65 -

associated database record in a form.

Section A: Locating a Feature


In this section, the custom application will prompt you to select a feature after selecting the
Analyze > Attributes item from the map view menu. Before running this command, you must
first run the View > Add Feature command so that there are features in the map view to select.
The event control will detect when the user has clicked in the map view and then fire a click event.
You will add code in the click method of the event control to determine what feature is near the
click point using the SmartLocateService. This process will retrieve a recordset and access a
particular row. You can then iterate through the recordsets fields and display the results in a
textbox on a simple review form. You will review the results, select OK to dismiss the dialog, and
then terminate the command.

1.

Open the project, C:\TGM\Labs\CustomApp\src\customapp.vbp.

The project window will appear.


2. Select frmMap.frm. Delete the existing EventControl control by
selecting this control on the form and pressing the delete key. Place an
EventControl OCX on the map view.
Set the name property on the control to ocxEventControl.
3.

Select the Analyze > Attributes menu item.

The code window will appear with the focus set to the
mnuAnalyzeAttributes_Click function.
4.

Set the locate tolerance on the SmartLocateService to five.

The service is referenced by the variable, objSmartLocSvrc.


5.

Add the map view and EventServer to the EventControl.

Use the AddMapView method on the EventControl. The first argument is


the ocxMapView.Dispatch pointer.
6.

Set the status bar prompt to ask the end user to select a feature.

The property on the status bar is SimpleText.


7. Clear the located and highlighted collections. Populate the
LocatedObjectsCollection using the SmartLocateService.
Scroll down to the ocxEventControl_Click function. First, use the Clear
method on objLocatedObjects. Next, use the Clear method on the
ocxMapView.HighlightedObjects collection. Now, populate the
- 66 -

objPointGeometrys Origin property with the world coordinate values.


Then, you will use the Locate method on the SmartLocateService
object. Use the Object Browser to check the order of the arguments.
8.

Populate the map views HighlightedObjects.

Use the Add method.


9.

Get the recordset associated with the highlighted feature.

Remember to set the bookmark after you have assigned the recordset
from the LocatedObjectsCollection.
10. Iterate through the recordsets fields, and display the fields and values
in the form.
Scroll to the DisplayReviewDialog function. This is listed in the
(General) section. Generate a string with the field name and field value
for each field in the recordset. Add the string to the listbox on the form.
You should always check database values for Null before manipulating
them.
11. Add the code to display the form.
This action is supported by the Show method. The argument value of one
(1) indicates that the dialog is modal.
12. When the user selects the OK button, end the command.
Scroll back to the ocxEventControl_Click function. Remember to execute
the RemoveMapView method on the EventControl and then clear the
two collections. In the Wrapup section of this function release the
SmartLocateService, LocatedObjectsCollection, and EventServer
objects The variables you will reference are ocxEventControl,
ocxMapView, and objLocatedObjects.
13. Save and compile the application. Test the application.
Open a map view. Add a feature to the map view. Select the Analyze >
Attribute command. Select a feature, and you should see the review
form display with a database record that corresponds to the selected
feature.
Summary: In Lab 10, you placed the event control and established the
communication between the view and the control with the event server.
The SmartLocateService and the LocatedObjectsCollection are
instantiated to perform the Locate operation. The feature that is found

- 67 -

first is highlighted and its field names and values are displayed in the
dialog.

data view control


,

OriginatingPipe

Mode

Key Sequence

Result

Cell

Left Mouse Click

Select a cell

Left Mouse Click Drag

Select multiple contiguous


cells

Control Left Mouse Click

Selects a hypertext cell


without activating the value

Left / Right Arrow

Select the next cell

Shift Left / Right Arrow

Select a contiguous block of


cells

- 68 -

Column

Row

Control Left / Right Arrow

Select a cell one page left or


right

Up / Down Arrow

Select the next cell

Shift Up / Down Arrow

Select a contiguous block of


cells

Control Up / Down Arrow

Select a cell one page up or


down

Home

Select the first cell

Shift Home

Select all cells between the


current cell and the first cell

End

Select the last cell

Shift End

Select all cells between the


current cell and the last cell

Left Mouse Click

Select a single column

Shift Left Mouse Click

Unselect all columns and


select contiguous columns

Control Left Mouse Click

Select
or
unselect
discontiguous columns

Left / Right Arrow

Unselect all active columns


and select the next column

Shift Left / Right Arrow

Unselect all active columns


and
select
contiguous
columns

Control Left / Right Arrow

Adds column selections to


the current set of selected
columns

Left Mouse Click

Single select a row

Shift Left Mouse Click

Select contiguous rows

Control Left Mouse Click

Select
or
unselect
discontiguous rows

Up / Down Arrow

Unselect all active rows and


select the next row

Shift Up / Down Arrow

Unselect all active rows and


select contiguous rows

Page Up / Down

Unselect all active rows and


select the first row in the
next page (rows visible
within the data view)

Shift Page Up / Down

Unselect all active rows and

- 69 -

select a page of rows


Control Page Up / Down

Add rows between the


current row and one page up
or down to the currently
selected rows

Home / End

Unselect all active rows and


select the top or bottom row

Shift Home / End

Unselect all active rows and


select all rows between the
current row and the top or
bottom

Control Home / End

Add rows between the


current row and the top or
bottom to the currently
selected rows

Event

Description

DeleteRows

Not currently fired. The application should include a


command to delete a selected row.

GotFocus

Standard control behavior.

LostFocus

Standard control behavior. Lost focus is usually


used to complete any pending action.

NewCell

Not currently fired.

SelectCell

Fired when one or more cells is selected by the user.


You may control the enabling of menu options when
this event is fired.

SelectColumn

Fired when one or more columns is selected by the


user. Also fired when a cell is selected. You may
control the enabling of menu options when this event
is fired.

SelectRow

Fired when one or more rows is selected by the user


or when the pointer is set to a particular row. You
may control the enabling of menu options when this
event is fired.

UpdateCell

Fired after the data content of a row is modified.


The dataview will update the active row in the
database when the focus changes to a different row
or view. Multiple cells (fields) within the row may
be modified for each UpdateCell event.

- 70 -

OPTIONAL Lab 11: Data View Construction

This lab covers the basic operation of the data view. You will place the control on your form and
allow the user to select a table to display.

Section A: Placing the Control


1.

Open the project, C:\TGM\Labs\CustomApp\src\customapp.vbp.

The project window will appear.


2.

Select frmData.frm, and select View Object.

The Data Window form will appear.


3. Delete the existing GMDataView control by selecting this control on
the form and pressing the delete key. From the toolbox, select the
GMDataview control.
The cursor will change to cross or plus sign.
4. Create a rectangle by placing the cursor in the upper left corner of the
form and dragging to the lower right corner.
A white box will appear. The name of the control will default to
GMDataview1.
5. Adjust the position of the control to set Top = 0 and Left = 0 in the
Properties Window.
6. Select frmData in the Project Window, and select View Code. Select
the Form object and the Resize procedure. Add logic to adjust the size
of the data view when the form resizes.
Use the ScaleHeight and ScaleWidth properties of the form and assign
them to the controls properties.
7.

Save and compile the application. Test the application.

Open a database. Select Window > Activate Data. Select a feature and
select OK. The form should appear with the data view as a white square.
Test resizing the form and notice the adjustment of the data view control.

- 71 -

Summary: In Lab 11, Section A, you placed the data view control,
adjusted its position, and added the logic to automatically resize it.

In this section of the lab, you will display a recordset in the data view.

Section B: Associating the Recordset


1. Return to the Visual Basic project. Select mfrmMain in the Project
Window, and select View Code. Select the mnuWindowData object,
and select the Click procedure.
2.

Add logic to associate the recordset with the data view.

Use the SetRecordset method on the control. The inputs to this function
are a database pointer, a caption, and, a recordset. The database pointer
need not be initialized. Use objDB which is defined in the function. Use
the name of the table as the caption. The name of the table can be found
by looking at the SourceTable property on the first field of the recordset.
Finally, the recordset, objRS is returned from the CreateRecordset
function.
3.

Save and compile the application. Test the application

Open a database. Select Window > Activate Data. Select a feature and
select OK. The form should appear displaying the contents of the selected
feature.
Summary: In Lab 11, Section B, you created a recordset and associated
it with the data view.

In this section of the lab, you will change the recordset displayed in the data view.

Section C: Changing the Recordset


1. Return to the Visual Basic project. Select frmData in the Project
Window, and select View Code. Select the mnuToolsChange object,
and select the Click procedure.
2.

Add logic to change the recordset associated with the data view.

Again, use the SetRecordset method on the control. The inputs are the
same as in the previous section of the exercise.

- 72 -

3. Select frmMap in the Project Window, and select View Code. Select
the mnuWindowData object, and select the Click procedure.
4. Add logic to make sure a recordset is active before showing the data
window from the active map view.
Again, this is the same logic as implemented in step 2.
5.

Save and compile the application. Test the application

Open a database. Select Window > Activate Data. Select a feature and
select OK. The form should appear displaying the contents of the selected
feature. Select Tools > Change Contents. Select a feature and select
OK. The contents of the view should change to reflect the new feature
class.
Summary: In Lab 11, Section C, you again used the SetRecordset method to implement the
Change Contents command.

A:
B:
C:

OPTIONAL Lab 12: Multiple Key Sort

This lab involves a common operation on tabular data sorting. The GeoMedia product supports
a single key sort operation. The SortPipe object is used to perform the sorting. The pipe object
actually supports a multiple key sort.

Section A: Setting up the Form


1.

Open the project, C:\TGM\Labs\CustomApp\src\customapp.vbp.

The project window will appear.


2. Select frmData.frm, and select View Code. Select mnuToolsSort
from the object list, and select the Click procedure.
The command, Tools > Sort is enabled when the data view is active. The
function simply calls SortRecordset.
3.

Select modSort.bas from the project window, and select View Code.

- 73 -

The file contains the function SortRecordset. The function is fully


defined to display the fields associated with the recordset displayed in the
data window.
4. Review the code for retrieving the recordset and adding the fields to
the form.
5.

Test the application.

Open a database and display the data window. Select Tools > Sort.
Verify that the list of attributes is populated on the left.
Summary: In Lab 12, Section A, you reviewed the logic for populating the
form with the recordset fields available for sorting.

The remaining section of the lab will create a sort key


for each field chosen from the left list and moved to
the right list. As fields are dropped from the right, the
sort key will be removed. Finally, when the OK button
is selected, the data view will be updated with the
output of the sort pipe.
Section B: Setting up the Pipe
1. Return to the Visual Basic project. Select frmSort in the Project
Window, and select View Code. Select the btnAdd object, and select the
Click procedure.
2. Add logic to set the name of the field for one of the sort keys and the
ascending flag value. Append the key to the collection on the SortPipe
object.
The pipe has been created in the Form_Load subroutine. objSortPipe is
available globally within the file. You will need to populate the objKey
variable, setting the SortFieldName to the currently selected attribute
lstAvailable.List(lstAvailable.ListIndex). Use the value of
optFlag(0).Value to set the SortAscendingFlag. Finally, append
objKey to the SortKeys collection on objSortPipe.
3.

Select the btnClear object and the Click procedure.

4. Add logic to remove the fields selected in the right list from the
collection of keys.

- 74 -

Simply re-create the SortKeys collection on objSortPipe to clear the list


of entries. The SortPipe keys collection does not support a remove
method. An alternative implementation is to manage your own collection
of SortKey objects and delete them from this list.
5.

Save the project, compile, and test the application.

Open the database, activate the data window, and select Tools > Sort.
Test your work by adding several attributes and clearing the sort list.
Summary: In Lab 12, Section B, you created a SortKey for each selected
field and set the SortAscendingFlag appropriately. You added logic to
clear the collection of keys in case the user selected them in the wrong
order.

Finally, you will see the sorted recordset. The sort is controlled by the order that the keys are
added to the collection. For instance, if you want an alphabetic list of employees by their last
name, you would first add the LastName field to the collection. Follow this by FirstName and
MiddleInitial to get a list sorted first by last name. Within the same last name, the list is sorted by
first names. Finally, when both last and first name are the same, the data is ordered by the middle
initial.

Section C: Updating the Data View


1. Return to the Visual Basic project. Select frmSort in the Project
Window, and select View Code. Select the btnOK object, and select the
Click procedure.
2. Add logic to retrieve the recordset from the data view. Use it as input
to objSortPipe.
Use the GetRecordset method on the data view control to populate
objRS. Assign this to objSortPipe.InputRecordset. Use the temporary
variable, objRS, to pass to GetRecordset on the data view control.
3. Retrieve the output recordset from the pipe, and associate it with the
data view.
Use the SetRecordset method on the data view control. Again, objDB is
nothing (no active object assigned to the variable) and the caption can be
derived from the SourceTable of one of the recordsets fields. To
distinguish the sorted recordset, you should concatenate Sorted to the
table name. Use objSortPipe.OutputRecordset as the final argument.
4.

Save the project, compile, and test the application.


- 75 -

Open the database, activate the data window, and select Tools > Sort.
Test your work by adding several attributes and selecting OK.
Summary: In Lab 12, Section C, you established the recordset associated
with data view as the InputRecordset for the SortPipe. You then
retrieved the OutputRecordset from the pipe and assigned it to the data
view.

GeoMedia

GeoMedia

GeoMedia
GeoMedia
application

GeoMedia
geoworkspace

- 76 -

Visual Basic Visual C++

GeoMedia
GeoMedia

GeoMedia

GDO

GeoMedia

originating pipe
Connection.BroadcastDatabase
GDO GDO refresh
requery

GeoMedia

- 77 -

Command GeoMedia Command


Command

Intergraph GeoMedia
DLL,TypeLib,OCX GeoMedia

uninstall

Intergraph GeoMedia
DLL GeoMedia
GeoMedia

GeoMedia

1 GDO
2
3 MapView
4
5
6
7 data view
GeoMedia

Connections, Connection

GDatabase

GRecordset, OriginatingPipe

GFields, GField

GMMapView

Legend

LegendEntries

- 78 -

RecordLegendEntry

Styles

GMNorthArrow

GMScaleBar

MetadataService

SpatialQueryPipe

BufferZonePipe

SmartLocateService
EventServer and
EventControl

LocatedObjectsCollecti
on

HighlightedObjects

GMDataView

SortPipe

- 79 -

You might also like