konto usunięte

Temat: kod VBA w kalkulatorze pól ArcMap

Witam, próbuję wykorzystać w kalkulatorze pól gotowe kody pozyskane ze strony http://www.ian-ko.com/free/free_arcgis.htm
Przypisuję pole (np. [WGS_N]), które chce wykorzystać do kalkulacji, jako zmienną sField , Przy próbie uruchomienia kodu, wyskakuje mi tekst: "Error running VBA code : user interrupt"
Nie wiem, czy coś jeszcze muszę w kodzie zmienić. Będę wdzięczny za pomoc.
Przykładowy kod, który chciałbym użyć:
'=========================
'field_dd2dms_lat.cal
'Author: Ianko Tchoukanski
'http://www.ian-ko.com
'=========================
Dim sField
Dim dY As Double
Dim dD As Double, dM As Double, dS As Double
Dim dM1 As Double, dS1 As Double
Dim sD As String, sM As String, sS As String
Dim sSuf As String
Dim sType As String
Dim sDMS As String
Dim sDeg As String, sMin As String, sSec As String
Dim iNumDec As Integer
'=================================================
'Adjust the variables below
sField = [y]
sDeg = "d" 'Character after degrees
sMin = Chr(39) 'Character after minutes
sSec = Chr(34) 'Character after seconds
iNumDec = 2 'number of decimal places for the seconds (minutes)
sType = "dms" 'result type "dms" - Degrees-Minutes-Seconds, "dm" - Degrees-Minutes
'=====================================================
dY = sField
If dY >= 0 Then
sSuf = "N"
Else
sSuf = "S"
End If
dY = Abs(dY)
dD = Int(dY)
sD = CStr(dD)
dM = (dY - dD) * 60
dM1 = Int(dM)
If (sType = "dms") Then
If (Len(CStr(dM1)) = 1) Then
sM = "0" & CStr(dM1)
Else
sM = CStr(dM1)
End If
dS = FormatNumber(((dM - dM1) * 60), iNumDec)
dS1 = Int(dS)
If (Len(CStr(dS1)) = 1) Then
sS = "0" & CStr(dS)
Else
sS = CStr(dS)
End If
sDMS = sD & sDeg & sM & sMin & sS & sSec & sSuf
Else
sM = CStr(FormatNumber(dM, iNumDec))
sDMS = sD & sDeg & sM & sMin & sSuf
End If
Karol Stachura

Karol Stachura Nie ma na świecie
rzeczy niemożliwych
- są tylko mało
pra...

Temat: kod VBA w kalkulatorze pól ArcMap

http://support.esri.com/en/technical-article/000002953
Błędy w kodzie.
Chociażby brak typu zmiennej dla sField na początku

konto usunięte

Temat: kod VBA w kalkulatorze pól ArcMap

Dziękuję za naprowadzenie. Dopisałem: "Dim sField As Double" i spróbowałem sprawdzić kod w edytorze VB. Jedyne, co mi wyskoczyło, to "External name not defined"przy wierszu "sField = [Y]". Ale rozumiem, że tu ma być wpisana nazwa pola już w kalkulatorze pól. Po wykasowaniu tego wiersza, żaden inny błąd składniowy nie zostaje wyróżniony. Bardzo proszę o podpowiedź, co jeszcze może być nie tak, lub co robię źle.

konto usunięte

Temat: kod VBA w kalkulatorze pól ArcMap

Czy ktokolwiek byłby tak uprzejmy i wskazał mi, gdzie są błędy w kodzie lub czy coś należałoby jeszcze w nim podmienić?
Jarosław S.

Jarosław S. mgr inż. ochrony
środowiska,
specjalista GIS

Temat: kod VBA w kalkulatorze pól ArcMap

W kodzie ni e pomogę, bo nie szprecham w VBA, ale ja konwersje z DD do DMS robiłem Excelem zazwyczaj, np. https://www.fieldmuseum.org/science/blog/converting-dd-...

Są też skrypty VBaAdo tego https://www.extendoffice.com/documents/excel/1497-excel...

konto usunięte

Temat: kod VBA w kalkulatorze pól ArcMap

Dziękuję za zainteresowanie tematem. Chciałem właśnie uniknąć excela i zrobić to bezpośrednio w ArcMap w tabeli atrybutów. Ale pewnie skończy się właśnie na excelu ;)

Temat: kod VBA w kalkulatorze pól ArcMap

To może Python?

Pierwsze z brzegu inspiracje:
http://anothergisblog.blogspot.com/2011/11/convert-dec...
https://glenbambrick.com/2015/06/24/dd-to-dms/


import math
def dd2dms_lat(latitude):
split_degy = math.modf(latitude)
degrees_y = int(split_degy[1])
minutes_y = abs(int(math.modf(split_degy[0] * 60)[1]))
seconds_y = abs(round(math.modf(split_degy[0] * 60)[0] * 60, 2))
if degrees_y < 0: NorS = "S"
else: NorS = "N"
return '''{0}* {1}' {2}" {3}'''.format(abs(degrees_y), minutes_y, seconds_y, NorS)


Sprawdzenie:

coords = [["Dublin", -6.2597, 53.3478], ["Paris", 2.3508, 48.8567], ["Sydney", 151.2094, -33.8650]]
for city, x, y in coords:
print city, dd2dms_lat(y)


Wynik:
Dublin 53* 20' 52.08" N
Paris 48* 51' 24.12" N
Sydney 33* 51' 54.0" S

Następna dyskusja:

Orto z internetu w ArcMap




Wyślij zaproszenie do