This example shows how to find records using an SQL-like expression:
Dim oLayer, oSearchDef, rs ' get layer oLayer = map.getLayers().getLayerByName("Cities") oSearchDef = new SearchDef ' select locations by the expression (see Appendix A) oSearchDef.setExpression( "Capital = ""Y""") ' specify the fields you want to retrieve (all fields by default) oSearchDef.setFields( "Area Name, State, County") ' returns Recordset object rs = oLayer.search(oSearchDef)
The following example will display only the selected records on the map:
Dim oLayer, oRenderer, oFont, oSymbol, oSymbol2, RItem, RItem2, oColor oLayer = map.getLayers().getLayerByName("Cities") oRenderer = oLayer.getRenderer() ' add new oRendererItem RItem = oRenderer.addItem() ' select locations by the expression (see Appendix A) RItem.setExpr( "Capital = ""Y""") ' set oFont attributes oFont = RItem.getFont() oColor = (new Utils).createColor(0, 0, 255) ' blue oFont.setColor( oColor) oFont.setSize( 10) oFont.setBold( True) RItem.setFont( oFont) RItem.setFontMask( RendererItemAttribute.rmFontColor OR _ RendererItemAttribute.rmFontSize OR _ RendererItemAttribute.rmFontBold) ' set symbol attributes oSymbol = RItem.getSymbol() oSymbol.setSymbolStyle("std:circle") ' see Appendix D oColor = (new Utils).createColor(255, 0, 0) ' red oSymbol.setColor( Symbol.rmSymbolColor, oColor) oSymbol.setSize( 16) RItem.setSymbol( oSymbol) RItem.setSymbolMask( RendererItemAttribute.rmSymbolColor_1 OR _ RendererItemAttribute.rmSymbolStyle OR _ RendererItemAttribute.rmSymbolSize) RItem.setMinMaxZoomLevel( RendererItemAttribute.rmMinZoomLevel, _ RendererItemAttribute.rmMaxZoomLevel) ' add new oRendererItem RItem2 = oRenderer.addItem() ' select all records except the records specified above RItem2.setExpr( "Capital <> ""Y""") ' see Appendix A ' hide symbols and labels oSymbol2 = RItem2.getSymbol() oSymbol2.setSymbolStyle( "std:null") ' see Appendix D RItem2.setLabelVisible( false) RItem2.setSymbolMask( RendererItemAttribute.rmSymbolStyle) RItem2.setMinMaxZoomLevel( RendererItemAttribute.rmMinZoomLevel, _ RendererItemAttribute.rmMaxZoomLevel)
This example shows another way to do the same thing.
1) Make all the symbols of the layer invisible: start Map Author, open map, select layer,
then Edit -> Layer Properties -> Multiple -> Select -> All -> Symbol/Line/Fill ->
uncheck Visible;
2) Use this code to display the specified locations:
Dim oLayer, oRenderer, oFont, oSymbol, RItem, oColor ' get layer oLayer = map.getLayers().getLayerByName("Cities") oRenderer = oLayer.getRenderer() ' add new RendererItem RItem = oRenderer.addItem() ' select locations by the expression (see Appendix A) RItem.setExpr( "Capital = ""Y""") ' set font attributes oFont = RItem.getFont() oColor = (new Utils).createColor(0, 0, 255) ' blue oFont.setColor( oColor) oFont.setSize( 10) oFont.setBold( True) RItem.setFont( oFont) RItem.setFontMask( RendererItemAttribute.rmFontColor OR _ RendererItemAttribute.rmFontSize OR _ RendererItemAttribute.rmFontBold) ' set symbol attributes oSymbol = RItem.getSymbol() oSymbol.setSymbolStyle("std:circle") ' see Appendix D oColor = (new Utils).createColor(255, 0, 0) ' red oSymbol.setColor( Symbol.rmSymbolColor, oColor) oSymbol.setSize( 16) RItem.setSymbol (oSymbol) RItem.setSymbolMask( RendererItemAttribute.rmSymbolColor_1 OR _ RendererItemAttribute.rmSymbolStyle OR _ RendererItemAttribute.rmSymbolSize) RItem.setMinMaxZoomLevel( RendererItemAttribute.rmMinZoomLevel, _ RendererItemAttribute.rmMaxZoomLevel)
The result should look like this:
Here is a brief explanation of how to use the external data source feature. The RouteMAP IMS 3.0 supports the following external databases: dBASE, Microsoft Access, SQL Server, and Oracle.
A) Installation Instructions:
[Data Source Name] DsDllPath=ExtDS.dll
B) Usage
Dim pl = new ParameterList() ds.add("DataSource", "Data Source Name" ) ' Select the Fields from your database that you would like displayed during a ' Find Nearest. The Label/Name, Lat, Long fields are required. The rest are optional. Dim strSQL = "select Name, latitude, longitude,Address,City,State,Zip from tableName"
' Note: the actual name of the dbf file is in the SQL Query ' IE. If you have the file "c:\my_database\database.dbf" Your ' SQL Query would look like "select name, latitude, longitude from database" ' and the "FilePath" would be "c:\\my_database\\" ds.add("DataSourceType","File") ds.add("ODBCDriver","Microsoft dBASE Driver (*.dbf)") ds.add("FilePath","d:\\my_database\\")
ds.add("DataSourceType","File") ds.add("ODBCDriver","Microsoft Access Driver (*.mdb)") ds.add("FilePath","c:\\my_database\\database.mdb")
ds.add("DataSourceType","SQL") ds.add("ODBCDSN","Your ODBC Data Source Name") ds.add("ODBCUsername","Username") ds.add("ODBCPassword","")
ds.add("SQLStatement",strSQL) ds.add("IconFile","c:\\my_icons\\icon1.bmp") ds.add("LabelField","Name") ds.add("LatField","latitude") ds.add("LonField","longitude")
ds.add("UrlField","") ds.add("IconSize","8") ' Default is 10
map.getLayers().addDynamicLayer(ds)