空间数据库初试

来源:互联网 发布:网站群管理系统 源码 编辑:程序博客网 时间:2024/04/28 17:05

上传图纸

直接通过MapinfoEasyLoader上传,比较简单,这里不详细说明,具体说一下会产生以下的这些问题

问题一、在一些资料中看到,点线面上传后样式会丢失,但在我的实验当中未出现该问题,可能是Ora版本,或是EasyLoader的老版本问题,建议使用Oracle 9iMapinfo8.5的版本进行上传

问题二、无法向Oracle Spatial中上载文本对象

解决办法:利用Easyloader上载Mapinfo表之前,先在表中增加几个属性字段,将文本对象的信息(如:文本对象的内容、文本样式等)当作对象的属性值保存到表中,并连同表的其它属性一起上载到Oracle数据库中。当用户通过程序将该表从Oracle Spatial中下载到Mapinfo中后,再根据保存在表中的文本对象的信息,利用程序为每个记录再重新创建一具文本对象。(可以参考转帖的<<MapInfo注记的数据库存放解决方案>>

 

图纸的显示

一、上传到空间数据库的图纸可通过Mapinfo自带的DBMS进行连接查看

      

       二、在MapX中通过程序连接,来完成空间数据库的展示,如下程序代码:

 

'*************************************************************************

'**功能描述:加载空间图纸

'*************************************************************************

Public Sub addLayer(Map1 As MapXLib.Map, ByVal TableName As String)

 Dim lyr As MapXLib.Layer

  Dim LayerInfo As New MapXLib.LayerInfo

  LayerInfo.Type = miLayerInfoTypeServer

  LayerInfo.AddParameter "NAME", TableName

  LayerInfo.AddParameter "connectstring", "uid=java_test;pwd=1111;srvr=serv"

  LayerInfo.AddParameter "query", "select * from " + TableName

  LayerInfo.AddParameter "cache", "on"

  LayerInfo.AddParameter "MBRSearch", "on"

  LayerInfo.AddParameter "toolkit", "ORAINET"

  LayerInfo.AddParameter "AutoCreateDataset", 1

  LayerInfo.AddParameter "datasetname", TableName

 

  Set lyr = Map1.Layers.Add(LayerInfo, 1)

  lyr.Selectable = True

  lyr.Editable = True

  Set lyr = Nothing

  Set LayerInfo = Nothing

 

End Sub

 

'*************************************************************************

'**功能描述:显示数据库中的文本标注

'** Map1_MapViewChanged事件中调用此函数

'*************************************************************************

Public Sub drawAutoText(actMap As MapXLib.Map, lyrIn As Layer, lyrView As MapXLib.Layer)

    lyrView.BeginAccess miAccessReadWrite

    Dim obj As MapXLib.Feature

    For Each obj In lyrView.AllFeatures

        lyrView.DeleteFeature obj

    Next

    lyrView.EndAccess

   

    Dim Ftrs As Features, newObj_Text As New MapXLib.Feature

    Dim str As String, dblfangle As Double, dbldangle As Double, dblFontSize As Double, dblFontBaseSize As Double

    Set Ftrs = lyrIn.SearchWithinRectangle(actMap.Bounds, miSearchTypePartiallyWithin)

   

    newObj_Text.Attach actMap

    newObj_Text.Type = miFeatureTypeText

   

    lyrView.BeginAccess miAccessReadWrite

    For Each obj In Ftrs

        lyrIn.KeyField = "txt"

        str = obj.KeyValue

        lyrIn.KeyField = "FANGLE"

        dblfangle = obj.KeyValue

        lyrIn.KeyField = "FONTPOINTSIZE"

        dblFontSize = obj.KeyValue

        dblFontSize = IIf(dblFontSize <= 0, 12, dblFontSize)

        newObj_Text.Style.TextFont.Size = dblFontSize

       

        With newObj_Text.Style

            lyrIn.KeyField = "fontname"

            .TextFont.Name = obj.KeyValue       '字体

            .TextFontRotation = dblfangle       '角度

            lyrIn.KeyField = "fontforecolor"    '字体颜色

            .TextFontColor = obj.KeyValue

            lyrIn.KeyField = "fontbackcolor"

            .TextFontBackColor = obj.KeyValue

        End With

       

        dbldangle = dblfangle * pi / 180

        dblFontBaseSize = LenB(str) * dblFontSize / 32      '字体大小

       

        newObj_Text.Point.Set obj.Point.X - dblFontBaseSize * Cos(dbldangle) - dblFontSize * Sin(dbldangle) / 8, _

                              obj.Point.Y - dblFontBaseSize * Sin(dbldangle) + dblFontSize * Cos(dbldangle) / 8

        newObj_Text.Caption = str

 

        Call lyrView.Addfeature(newObj_Text)

    Next

    lyrView.EndAccess

 

End Sub