免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 3682|回复: 2
收起左侧

Mapx常见问题解答(2)

[复制链接]

2072

主题

100000万

铜板

363

好友

地信专家组

每一次的分离都是为了下一次的相聚

Rank: 14Rank: 14Rank: 14Rank: 14

积分
17622

精华勋章宣传勋章爱心勋章组织勋章地信元老灌水勋章荣誉会员勋章活跃勋章贡献勋章

发表于 2009-11-15 16:30 | 显示全部楼层 |阅读模式
Mapx常见问题解答(2)
9.如何实现测距
a.//创建测距工具
     global const calculatedistance=1
     Private Sub Form_Load()
       map1.CreateCustomTool(calcilatedistance,miToolTypepoly ,microsscursor)
     End Sub
     Private Sub Distances_Click()
       map1.currenttool=calculatetool
     End Sub
b.//在mapx的PolyToolUsed事件中,
   用Distance( x1,y1,x2,y2 )计算距离,由状态条中或label显示。
Private Sub Map1_PolyToolUsed(ByVal ToolNum As Integer, ByVal Flags As Long, ByVal points As Object, ByVal bShift As Boolean, ByVal bCtrl As Boolean, EnableDefault As Boolean)
   
    Dim DisSum As Double
    Dim Dis As Double
    Dim n As Integer
    Dim pts As New MapXLib.points
    Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double
        
   Set pts = points
   
    DisSum = 0
    MDIForm1.StatusBar1.Panels.Item(3).Text= Format(Str(DisSum), "#,##0.000000")
    Select Case Flags
        Case miPolyToolBegin
        Case miPolyToolInProgress
          If ToolNum = CalculateDistance Then
               For i = 1 To pts.Count - 1
                 x1 = pts.Item(i).X
                 y1 = pts.Item(i).Y
                 x2 = pts.Item(i + 1).X
                 y3 = pts.Item(i + 1).Y
                 Dis = Map1.Distance(x1, y1, x2, y2)
                 DisSum = DisSum + Dis
                 MDIForm1.StatusBar1.Panels.Item(3).Text = Format(Str(DisSum), "#,##0.000000")
               Next i
             End If
        Case miPolyToolEnd
End Select

10. printmap方法中w,h,x,y的单位:himetric unit代表什么意思
在mapx 的 printmap方法:PrintMap (hDC x, y, w, h)之中,w,h,x,y的单位为himetric,1 himetric=0.01毫米。所以,
  Private Sub Command4_Click()
ScaleMode = 6  `设成毫米坐标系。
Printer.CurrentX = 0
Printer.CurrentY = 0
Printer.Print " "
Map1.PrintMap Printer.hDC, 0, 0, Map1.Width * 100, Map1.Height * 100  ‘ 1毫米=100 himetric
Printer.NewPage ` Send new page.
Printer.EndDoc  ` Printing is finished.
Exit Sub
11.关于UserDrawLayer.
UserDrawLayer允许用户画自定义格式的图形。如用户自定义的比例尺,图例,或标注。
改变时,使用Refresh刷新
12.使用MapX40 时如果遇到以下的问题:
1. 在GeoSet Manager 中加入表时,会产生错误如 “The .ind already rigistered”
2. 当把在 Pro中建立的表加入到GeoSet Manager中时,会出现异常退出。
3. 当用MapX40创建临时图层出现汉字问题。
4. 当文本旋转出现问题。
解决方法:升级到Mapx4.01.51(中文版)
13.mapx3.5下,非地球坐标系出现的问题。
1。定义图层的视野范围时,因为系统默认单位为英里。
        所以如果拥护定义单位为米,视野范围定为0-500。因为1英里=1609米 ,那么,
                layer.ZoomMin=0
                layer.ZoomMax=500*1609
                layer.Zoom值的设置仍在0-500之间。
        MapX4.0已经解决该问题。
2. 在投影为非地球坐标系的图层上编辑时,如增加图元,要首先设置一下坐标系的范围即CoordSys.Bounds。
程序如下:坐标系的单位为毫米:
Dim csys As New MapXLib.CoordSys
  csys.Set 0, , 5, , , , , , , , , , Formmain.Map1.Layers.Bounds
  Set Formmain.Map1.NumericCoordSys = csys
14.连接Oracle8I ,若数据分存在两个表中,可用以下语句来实现连接:
注意:在Select选择语句中要写上需要的字段。
Dim LayerInfoObject As New LayerInfo
Dim i, j As Integer
LayerInfoObject.Type = miLayerInfoTypeServer
LayerInfoObject.AddParameter "name", "cancaps"
LayerInfoObject.AddParameter "ConnectString", "SRVR=SUPERIOR;UID=miproWD=mipro"
LayerInfoObject.AddParameter "Query", "select ""CITY_125"".""TOT_POP"",""STATES"".* from ""MIPRO"".""STATES"",""MIPRO"".""CITY_125"" where
""CITY_125"".""STATE""=""STATES"".""STATE"""
LayerInfoObject.AddParameter "toolkit", "ORAINET"
LayerInfoObject.AddParameter "AutoCreateDataset", 1
LayerInfoObject.AddParameter "DatasetName", "Uscty"
Map1.Layers.Add LayerInfoObject
j = Map1.Datasets.Item(1).Fields.Count
MsgBox Str(j)
For i = 1 To j
    MsgBox Map1.Datasets.Item(1).Fields.Item(i).Name
    Next
    Map1.Datasets.Item(1).Themes.Add miThemeRanged, "TOT_POP"
15.连接远程数据库时日期作为选择条件时:
对于Acess数据库,日期要用# 作为边界,例如:#2/2/2000#
            s1 = "02/04/2000 01:00:40"
            s = "select * from db1 where dt=#" + s1 + "#"
            Set ds = db.OpenRecordset(s)
     对于Sybase数据库,如下:
         dim d_begin,d_end as string
         d_begin=20000101
         d_end =20000212
         select STCD,YMDHM,DYRN From ST_RNFL_R Where YMDHM >='"+d_begin+"'"
16.ACESS数据库存在点位数据,在PRO中地图化后,生成TAB表,加入MAPX,能否当数据库数据增加后反映到地图点位的刷新。
1。不要使用在PRO中下载的表文件,而使用Layerinfo对象的miLayerInfoTypeServer为数据创建点位。 程序如下:
      Private Sub LinkODBC_Click()
       Dim LayerInfo As New MapXLib.LayerInfo
       LayerInfo.Type = miLayerInfoTypeServer
       LayerInfo.AddParameter "name", “ODBCLayer”
  ’ Mapstats为Mapstats.mdb的ODBC数据源
       LayerInfo.AddParameter”connectstring",“Mapstats”
       LayerInfo.AddParameter "query",”Select * from Us_cust”
       LayerInfo.AddParameter "cache", “on”
       LayerInfo.AddParameter "MBRSearch", “on”
       LayerInfo.AddParameter "toolkit", "ODBC"   
       layerinfo.AddParameter "AutoCreateDataset", 1
       layerinfo.AddParameter "datasetname", “us_cust”
       Set lyr = Formmain.Map1.Layers.Add(LayerInfo, 1)
     End Sub
     要求:mapstats的数据已经地图化,并加入DATASETS。
      2。当数据库数据改变(增加,删除),使用Dataset的refresh方法完成点位的刷新。
17.使用ADO,RDO,BDE数据源进行数据绑定时,会出现没有注册的错误提示。
在安装MapX选择component/data drivers/ADO data driver等数据源驱动程序。
18.使用MAPXTREME开发,查找的结果如何高亮显示。
程序如下:
      sub locateobj()
  dim k,lay
dim layer,findds,foundobj,bResult
k=trim(session("key"))  ‘session("key")为要查的ID
lay=session("layer")    'session("layer")为当前层
set layer=Session(SESN_MAPPER).Layers(lay)
set findds=Session(SESN_MAPPER).DataSets.Add(6,layer)
set layer.find.finddataset=findds
set layer.find.findfield=findds.fields("ID")
set foundobj=layer.find.search(k)
if (foundobj.findRC mod 10=1) then
   bResult = SetMapAutoRedraw(False)
   if Session(SESN_MAPNAME)="hb" then
                Session(SESN_MAPPER).zoom=20
             else
                Session(SESN_MAPPER).zoom=1
             end if
            Session(SESN_MAPPER).centerX=foundobj.centerX
            Session(SESN_MAPPER).centerY=foundobj.centerY    ‘可将foundobj 定位在中心
            layer.Selection.add foundobj '着亮显示
            Session(SESN_MAPPER). ExportSelection=True ‘输出选择的高亮显示
            bResult = SetMapAutoRedraw(true)
else
  Response.Write "地图上未找到该目标。"
end if
       end sub
19.提高圆,椭圆,弧,缓冲区的分辨率。
设置Map.DefaultConversionResolution值(最大为32763),这样画圆等,或者编辑从ProFessional中作好的图层中的圆等后,不会出现圆显示成为多边形的状况。
     另外,若使用CreateArc, CreateCircularRegion, CreateEllipticalRegion, BufferFeatures创建对象时,可以设置resolution参数。
20.有关紧缩。
mapx4.5,mapx4.0不提供紧缩的功能,所以只能创建一相同结构的表,然后将数据从原表中读出,再加入到新表中,以消除黑条。(这只能在mapx4.5中完成)
21.有关Annotation.
文本类型的注释Annotation不能旋转。
22.执行程序:
features.item(1).keyvalue=’XXX’
      features.item(1).update
      feature没有得到改变。
  *** 将程序修改为:
      feature=features.item(1)
      feature.keyvalue=’XXX’
      feature.update
      执行无误。
23.c++下variant类型的参数若不添则该参数位置用COptionalVariant()来替代,其定义如下
class COptionalVariant;
class COptionalVariant: public COleVariant
COptionalVariant() { vt = VT_ERROR; scode = DISP_E_PARAMNOTFOUND; }
24.用户自定义工具创建点时,若为非地球坐标系,Toolused事件中获取的值不对
使用用户自定义工具创建图元(点线面)时,若坐标系为非地球坐标系,则要满足:
      1。在调入geoset 或 layer后,将map1.numericcoordsys=map1.displaycoordsys
      2.设置
        Dim csys As New mapxlib.CoordSys
        csys.Set 0, , 7, , , , , , , , , , Formmain.Map1.Layers.Bounds
        Set Formmain.Map1.NumericCoordSys = csys
        Set Formmain.Map1.DisplayCoordSys = csys
25.SymbolFont.Name与SymbolCharacter
二者皆用来定义Trutype字符集,但最好使用SymbolFont.Name。
Private Sub Command1_Click()
Dim pt As New Point ' Point object passed to the CreateSymbol method of the FFeatureFactory
Dim sty As New Style ' Style object passed to the CreateSymbol method, determines what symboltype/style...etc.
x1 = Map1.CenterX
y1 = Map1.CenterY
pt.Set x1, y1 ' Set the point for where the user clicked...
sty.SymbolFont.Name = "MapInfo Arrows"
sty.SymbolFont.Size = 48 ' set the size of the symbol to be 48...
sty.SymbolFontColor = 255 ' set color of the symbol to be red...
sty.SymbolFontHalo = True ' turn Halo effect on...
sty.SymbolFontBackColor = miColorBlue ' change the Halo color to blue
Set ftr = lyr.AddFeature(FF.CreateSymbol(pt, sty))
End Sub
另一种用来选择字符集的方法:sty.PickSymbol
26.MapX40与Pro 的兼容性问题
mapx40生成的表在Pro 调用时,需要在pro中重新为此表创建索引
27.什么时候需要为表中字段创建索引。
1.若该字段参与自动绑定时。
2.若该字段的值用Find对象的Search方法来查找时。
28.关于自定义鼠标。
在mapx4.0中允许用户自定义鼠标。程序如下:
Map1.MousePointer = miCustomCursor
Map1.MouseIcon = "c:\windows\cursors\globe.ani"  
MapInfo MapX4.0 License Key 申请流程
一、    如何获得硬件ID号(HardwareID)?
    1.    安装MapX4.0。
    2.    打开Vb,Vc,Delphi,PowerBuild等开发环境,添加MapX OCX控件。
    3.    在控件底部可以看到使用期限以及ID号码。
二、    如何申请License Key?
    1.    代理商及开发商在购买了若干License后,请将产品包装盒内的’黄页’始终保存在您的手中(请勿丢失),当直接用户需要申请License时,应直接与代理商或开发商联系,告知所产生的ID号。
    2.    代理商及开发商应认真填好黄页内的相关信息及ID号码,将黄页传真至方正数码电子有限公司MapInfo事业部。
    3.    在没有任何问题的情况下,我们将在2个工作日内给您回复。
三、    申请License Key以后……
请将申请到的*MapX40.LIC文件改名为MapX40.LIC,并放在C:\Program Files\Common Files\MapInfo Shared\MapX Common\目录下,覆盖原来的License文件。
几点重要提示:
    1.    请不要轻易更改硬盘及格式化
    2.    黄页上的信息应为代理或开发商的信息
    3.    请妥善保存好黄页(请将产品内不干胶上的SN#贴在黄页上)
::mad::cool:;):)
------------------------------------------------------------------------------------------
希望能对大家有点帮助!!!

0

主题

2632

铜板

0

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1542
发表于 2025-1-9 16:07 | 显示全部楼层
探矿者软件可以提高矿体的命中率,减少找矿的成本和难度,主要功能:数据管理、二维制图、三维建模、储量估算、三维立体预测等,有需要免费试用可以联系负责人邓帅15377311476(微信同号),软件针对单位或者企业试用,不面向个人试用
回复 支持 反对

使用道具 举报

0

主题

2632

铜板

0

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1542
发表于 2025-1-9 16:07 | 显示全部楼层
探矿者软件可以提高矿体的命中率,减少找矿的成本和难度,主要功能:数据管理、二维制图、三维建模、储量估算、三维立体预测等,有需要免费试用可以联系负责人邓帅15377311476(微信同号),软件针对单位或者企业试用,不面向个人试用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表