2011-12-10 182 views
0

我正在用eye4software制作一个简单的坐标转换器。以下链接为转换器提供了所需的Visual Basic 6代码。坐标转换

http://www.eye4software.com/products/gpstoolkit/source/vb/datumtransformation/

我按照根据链接所提供的资料说的过程。

Private Sub Form1_Load() 

    Private objProjection As GpsProjection 

    Private objDatumSrc As GpsDatumParameters 

    Private objDatumDst As GpsDatumParameters 

    Set objProjection = CreateObject("Eye4Software.GpsProjection") 

    Set objDatumSrc = CreateObject("Eye4Software.GpsDatumParameters") 

    Set objDatumDst = CreateObject("Eye4Software.GpsDatumParameters") 

End Sub 

Option Explicit 


Private objProjection As GpsProjection 

Private objDatumSrc As GpsDatumParameters 

Private objDatumDst As 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 

但我得到一个运行时错误此代码(objDatumSrc.LoadFromId(4326))说所需的对象。由于我是初学者,我无法解决这个问题。请帮帮我。

+0

小问题,但[不要在程序参数中放置括号](http://hashvb.earlsoft.co.uk/Brackets_around_procedure_parameters)。这可能不是问题的原因,但它会在某些时候咬你(同样的错误) – Deanna

回答

-1

尝试之一:

Call objDatumSrc.LoadFromId(4326) 

objDatumSrc.LoadFromId 4326 

VB变得有点古怪做方法与参数调用。如果它不符合预期格式,则某些结果可能会有所不同。

+0

- 谢谢你的答案但仍然有相同的错误。 – user1047784

1

你有两个objDatumSrc变量。

  • 其中一个是中的私有变量 - 您正在初始化该变量。
  • 另一个是模块级别,你不是初始化那一个。

删除Private变量声明中

+0

谢谢,但错误保持不变。 – user1047784

0

对我来说,它看起来像你不理解的范围,但真正的问题是一个非实例变量。您在表单加载事件中的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 
+0

我也尝试过这个.error也是一样。谢谢。 – user1047784

+0

我已经更新我的答案后进一步审查,只是发布你应该使用的代码。 – UnhandledExcepSean

0

的代码,这样显然不应该编译,很明显,你是不是显示你真正的代码。例如,你的错误处理是什么?如果你已经完成了类似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 

+0

你会得到“对象或未设置块”,而不是“对象需要”。 – Deanna