Vb6 坐标转换

Vb6 坐标转换,vb6,Vb6,我正在Eye4软件的帮助下制作一个简单的坐标转换器。以下链接提供了转换器所需的Visual Basic 6代码 我已经按照链接中给出的细节遵循了上述流程 专用子表单1_加载 作为GpsProjection的私有对象项目 作为GPSDATUMSRC参数的专用objDatumSrc 作为GPSDATUMDST参数的专用objDatumDst 设置objProjection=CreateObjectEye4Software.GpsProjection 设置objDatumSrc=CreateObjec

我正在Eye4软件的帮助下制作一个简单的坐标转换器。以下链接提供了转换器所需的Visual Basic 6代码

我已经按照链接中给出的细节遵循了上述流程

专用子表单1_加载 作为GpsProjection的私有对象项目 作为GPSDATUMSRC参数的专用objDatumSrc 作为GPSDATUMDST参数的专用objDatumDst 设置objProjection=CreateObjectEye4Software.GpsProjection 设置objDatumSrc=CreateObjectEye4Software.GpsDatumParameters 设置objDatumDst=CreateObjectEye4Software.GpsDatumParameters 端接头 选项显式 作为GpsProjection的私有对象项目 作为GPSDATUMSRC参数的专用objDatumSrc 作为GPSDATUMDST参数的专用objDatumDst 私有子命令,单击 '设置震源基准WGS84 'WGS84的ID为4326,请参阅'http://www.eye4software.com/resources/datums'以获取受支持基准的完整列表 '要从另一个数据转换,只需更改EPSG代码下面的代码即可 objDatumSrc.LoadFromId 4326 '设置目的地基准NAD27 'NAD27的ID是4267,请参阅'http://www.eye4software.com/resources/datums'以获取受支持基准的完整列表 '要转换为另一个数据,只需更改EPSG代码下面的代码即可 objDatumDst.LoadFromId 4267 '设置源坐标 objProjection.Latitude=CDblTextlat1.Text objProjection.Longitude=CDblTextlon1.Text '执行基准转换 objProjection.TransformDatum objDatumSrc,objDatumDst '显示结果 Textlat2.Text=objProjection.Latitude Textlon2.Text=objProjection.Longitude 端接头 但是我得到一个代码objDatumSrc.loadfromid4326的运行时错误,表示需要对象。因为我是初学者,所以无法解决这个问题。请帮帮我。

试试:

Call objDatumSrc.LoadFromId(4326)

VB在使用参数进行方法调用时有点怪。如果不是预期的格式,某些结果可能会有所不同。

您有两个objDatumSrc变量

一个是Form_Load中的私有变量-您正在初始化该变量。 另一个是模块级别1,您没有初始化该模块。
删除Form_Load中的私有变量声明对我来说,似乎您不了解作用域,但真正的问题是非实例化变量。表单加载事件中的objDatumSrc声明将无法在表单的其余部分中看到,因为您在方法外部声明的变量没有被实例化

将当前代码替换为此

Option Explicit

Private objProjection As New GpsProjection
Private objDatumSrc As New GpsDatumParameters
Private objDatumDst As New GpsDatumParameters

Private Sub CommandTranslate_Click()
    ' Set Source Datum ( WGS84 )
    ' The ID for WGS84 is 4326, see 'http://www.eye4software.com/resources/datums' for a full list of supported datums
    ' To convert from another datum, just change the code below (EPSG code)
    objDatumSrc.LoadFromId (4326)

    ' Set Destination Datum ( NAD27 )
    ' The ID for NAD27 is 4267, see 'http://www.eye4software.com/resources/datums' for a full list of supported datums
    ' To convert to another datum, just change the code below (EPSG code)
    objDatumDst.LoadFromId (4267)

    ' Set Source coordinates
    objProjection.Latitude = CDbl(Textlat1.Text)
    objProjection.Longitude = CDbl(Textlon1.Text)

    ' Perform the datum transformation
    objProjection.TransformDatum objDatumSrc, objDatumDst

    ' Display the result
    Textlat2.Text = objProjection.Latitude
    Textlon2.Text = objProjection.Longitude
End Sub

这里的代码显然不应该编译,很明显,您没有显示真正的代码。例如,您的错误处理是什么?如果您执行了类似于On Error Resume Next的操作,那么如果以下行出现错误,则不会报告错误

Set objProjection = CreateObject("Eye4Software.GpsProjection")
Set objDatumSrc = CreateObject("Eye4Software.GpsDatumParameters")   
Set objDatumDst = CreateObject("Eye4Software.GpsDatumParameters") 
由于它们将被设置为Nothing,如果您试图在objProjection、objDatumSrc和objDatumDst上执行方法和属性,它们将引发所需的错误对象

由于这可能不是您尝试运行的代码,您能否验证所有程序ID(例如Eye4Software.GpsProject)是否正确?事实上,您是否已注册这些组件?为什么你不能用稍微干净一点的符号来实例化这些对象呢

Set objProjection = New Eye4Software.GpsProjection

在进一步审查后,我更新了我的答案,并简单地发布了您应该使用的代码。次要的一点是。这可能不是问题的原因,但它会在某个点上咬你,与你得到对象的错误相同,或者块未设置,不需要对象。
Set objProjection = New Eye4Software.GpsProjection