Преобразование координат - PullRequest
0 голосов
/ 10 декабря 2011

Я делаю простой преобразователь координат с помощью 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)) говоря, что требуется объект.Так как я новичок, я не смог решить это.пожалуйста, помогите мне.

Ответы [ 4 ]

1 голос
/ 10 декабря 2011

У вас есть две objDatumSrc переменные.

  • Одна из них является частной переменной внутри Form_Load - вы инициализируете эту.
  • Другая является модульной, и вы ее не инициализируете.

Удалите объявления переменных Private внутри Form_Load

0 голосов
/ 12 декабря 2011

Код здесь, очевидно, не должен компилироваться, очевидно, что вы не показываете свой реальный код. Например, какова ваша обработка ошибок? Если вы сделали что-то вроде On Error Resume Next, то если в следующих строках появятся ошибки, об ошибках не будет сообщено.

Set objProjection = CreateObject("Eye4Software.GpsProjection")
Set objDatumSrc = CreateObject("Eye4Software.GpsDatumParameters")   
Set objDatumDst = CreateObject("Eye4Software.GpsDatumParameters") 

Поскольку для них задано значение Nothing, если вы попытаетесь выполнить методы и свойства для objProjection, objDatumSrc и objDatumDst, они вызовут ошибку «Требуется объект».

И поскольку это, вероятно, не тот код, который вы пытались запустить, можете ли вы проверить, что все идентификаторы программ, например, "Eye4Software.GpsProject" правильный? На самом деле - вы зарегистрировали эти компоненты? И почему вы не можете создать экземпляр этих объектов, используя немного более чистую запись, например,

Set objProjection = New Eye4Software.GpsProjection

0 голосов
/ 11 декабря 2011

Мне кажется, вы не понимаете сферу, но настоящая проблема - неинстанцированная переменная.Ваше объявление 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 голосов
/ 10 декабря 2011

Попробуйте либо:

Call objDatumSrc.LoadFromId(4326)

или

objDatumSrc.LoadFromId  4326

VB получает немного прикольных вызовов методов с параметрами.Если он не в ожидаемом формате, некоторые результаты могут отличаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...