当前位置:文档之家› gis二次开发能实现那些功能

gis二次开发能实现那些功能

第一题:GIS二次开发能实现那些功能?符号化显示全要素地图对图层的的管理和操作支持地图放大,缩小漫游等各种操作可以对地图进行标注可以实现几何参数查询,空间定位查询等功能空间分析功能空间数据库访问功能地图打印功能GPS导航功能第二题,MO做专题地图有哪几种?标注渲染,按值渲染,点密度渲染,分类渲染,图表渲染,z值渲染,组渲染建立缓冲区查找缓冲区的城市代码:Dim dc As New MapObjects2.DataConnection '定义一个数据连接对象Dim lyr As New MapObjects2.MapLayer '定义一个数据图层对象Dim fname As StringDim fnames() As String '定义了一个字符数组Dim rectline As MapObjects2.Recordset '定义一个数据集对象Dim resutstate As MapObjects2.RecordsetDim resultshape As MapObjects2.PolygonDim flag As IntegerDim fname2 As StringDim max As IntegerDim flagitem As IntegerDim intersetj As MapObjects2.PolygonDim k As MapObjects2.PolygonDim setflash(100) As MapObjects2.Polygon '足条件的记录,用于后面的闪烁Dim freset(100) As String '记录满足条件的记录州名Dim jilu As Integer '统计满足条件的记录个数Private Sub Combo1_Click()fname2 = Combo1.Text '在组合框的单机事件中完成的任务为:For i = 0 To max '用户选中组合框中的图层名,通过循环使其与fnames(i)保存的If fnames(i) = fname2 Then '图层名进行对比查找,如果找到就将图层索引保存到flagitem中flagitem = max - i '通过变量flagitem将地图索引传给函数yers(flagitem).SearchByDistance(p, Map1.ToMapDistance(100), "") Exit For '目的是在用户选择的图层中找到用户选中的图形End IfEnd SubPrivate Sub Command1_Click() '该过程用于像MAP1控件中加载图层On Error GoTo outdlg.Filter = "*.shp|*.shp|*.dbf|*.dbf" '为通用对话框设置过滤器dlg.Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer '使对话框可以多选dlg.ShowOpen '显示文件打开对话框dlg.InitDir = CurDir '将当前选择的驱动器路径赋值给对话框当前路径dc.Database = dlg.InitDir '数据连接对象与文件的数据建立连接If Not dc.Connect Then Exit Subfname = dlg.FileNamefnames() = Split(fname, Chr(0)) '将所得到的路径进行分离得到数据文件名max = UBound(fnames()) '找到字符数组的上限If max > 0 ThenFor i = 1 To maxSet lyr.GeoDataset = dc.FindGeoDataset(fnames(i))yers.Add lyrCombo1.AddItem '将图层名加载到组合框中Set lyr = NothingNext iElseIf max = 0 Thenfname = dlg.FileTitleSet lyr.GeoDataset = dc.FindGeoDataset(fname)Combo1.AddItem yers.Add lyrSet lyr = NothingEnd Ifout:End SubPrivate Sub Command2_Click() '该过程用于建立缓冲区,并通过Map1.TrackingLayer.Refresh True触发On Error GoTo out ' Map1_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE)Dim obselect As Object '并把缓冲区画出来Set object1 = rectline.Fields("shape").Value '通过记录集返回图形对象Set resultshape = object1.Buffer(1) '建立缓冲区后的图形对象Map1.TrackingLayer.Refresh Trueout:End SubPrivate Sub Command3_Click() '该过程用于将0层所有的州面域取出来与建立的缓冲区求交On Error GoTo out '如果有交集就取出州名保存在freset(100)数组中flag = 2Set layerc = yers(0)Set resutstate = layerc.Recordsresutstate.MoveFirstDo While Not resutstate.EOFSet k = resutstate.Fields("shape").ValueSet intersetj = k.Intersect(resultshape)If Not intersetj Is Nothing Thenfreset(jilu) = resutstate.Fields("NAME").ValueSet setflash(jilu) = kjilu = jilu + 1End Ifresutstate.MoveNextLoopConnect = "在缓冲区内总共查找到" & jilu & "州" & "它们是:" & vbCrLfFor i = 0 To jilu - 1Connect = Connect & freset(i) & vbCrLfNext iActionj = MsgBox(Connect, , "查询结果") '显示查询结果If Actionj = vbOK Thenflag = 2Map1.TrackingLayer.Refresh tureEnd Ifout:End SubPrivate Sub Form_Load()flag = -1 '做标记用于用于选择的按钮flagitem = 0 '图层索引jilu = 0Set rectline = NothingEnd SubPrivate Sub Map1_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE)On Error GoTo outDim sym1 As New MapObjects2.SymbolDim sym2 As New MapObjects2.SymbolIf Not rectline Is Nothing Then '把选到的对象显示出来sym1.Color = moYellowsym1.Size = 3Map1.DrawShape rectline, sym1End IfIf flag = 1 Thensym2.Color = moRedMap1.DrawShape resultshape, sym2End IfIf flag = 2 ThenFor i = 0 To jilu - 1Map1.FlashShape setflash(i), 5Next iEnd Ifout:End SubPrivate Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)' On Error GoTo outDim p As MapObjects2.Point '定义一个点对象Set p = Map1.ToMapPoint(X, Y)If max <> 0 ThenSet rectline = yers(flagitem).SearchByDistance(p, Map1.ToMapDistance(30), "") '找到你选择的对象If rectline.EOF ThenMsgBox "没找到对象", , "提示"ElseMap1.TrackingLayer.Refresh True'End IfEnd IfIf max = 0 ThenSet rectline = yers(0).SearchByDistance(p, Map1.ToMapDistance(100), "") '找到你选择的对象If rectline.EOF ThenMsgBox "没找到对象", , "提示"ElseMap1.TrackingLayer.Refresh TrueEnd IfEnd If'out:End Sub。

相关主题