‎2006 Feb 10 9:48 PM
Does any know if there is any class for getting the latitude and longitude values by an address in ABAP? thanks a lot~!
‎2006 Feb 10 9:51 PM
‎2006 Feb 10 9:53 PM
Any Demo Program shows how to use it? I am new to ABAP. more detail would be helpful. thanks.
‎2006 Feb 10 9:55 PM
DATA: CARR_ID TYPE SPFLI-CARRID VALUE 'LH',
CONN_ID TYPE SPFLI-CONNID VALUE '0400'.
DATA: CITY TYPE SGEOCITY-CITY,
LATI TYPE P DECIMALS 2,
LONGI TYPE P DECIMALS 2.
SELECT SINGLE CITY LATITUDE LONGITUDE
INTO (CITY, LATI, LONGI)
FROM SGEOCITY
WHERE CITY IN ( SELECT CITYFROM
FROM SPFLI
WHERE CARRID = CARR_ID AND
CONNID = CONN_ID ).
WRITE: CITY, LATI, LONGI.Message was edited by: chandrasekhar jagarlamudi
‎2006 Feb 10 9:57 PM
Thanks, but what I want is the lat/lon values for a specific address. I wanna something the Geocoder.US provides.
‎2006 Feb 10 10:01 PM
Check out the above link and see the help ..
Kindly also award the point . If its give you some help or guide line ..
Thanks
‎2006 Feb 10 9:53 PM
‎2006 Feb 10 10:00 PM
Do you mind to point me to the exact location or examples? I can't find it in these articles. thanks.
‎2006 Feb 10 10:23 PM
check out this function module
/DSD/VC_GEOCODE , in this check out this
CALL METHOD lo_address_enhancer->enhance_addresses
EXPORTING
addresses = lt_addresses
interaction_allowed = ''
IMPORTING
corrected_addresses = lt_corrected_addresses
CHANGING
aes_containers = lt_containers
messages = lt_messages.by giving the address , it gives the latitude and longitude values into table it_container
check out the loop statement
Pls reward points for helpful answers
‎2006 Feb 10 10:34 PM
Would you mind to tell me how to check out this function module /DSD/VC_GEOCODE ? I am unable to find it. what is the class name for lo_address_enhancer? I may look it up. thanks.
‎2006 Feb 10 10:36 PM
goto SE37 transaction and give the fuction module name
Class name is cl_address_enhancer
‎2006 Feb 10 11:27 PM
Pls reward points if ur problem is solved and close the thread
‎2006 Feb 10 11:30 PM
Sorry, but I am still can't figure it out. Do you have a really simple example to show me how to which class/function that I can use to obtain the lat/lon by inputting a US address? thanks a lot!
‎2006 Feb 11 12:03 AM
If i had understood ur question correctly , try this by giving address no , it gives u the custoner no , latitude and longitude as output
create one program in SE38 and paste the code and execute by giving one address no
*&---------------------------------------------------------------------*
*& Report YCHATEST *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT YCHATEST.
DATA:
LO_ADDRESS_ENHANCER TYPE REF TO CL_ADDRESS_ENHANCER,
LO_GEOCODER TYPE REF TO IF_ADDRESS_ENHANCEMENT_SERVICE,
LT_SERVICES TYPE AESI_TABLE,
LV_AES_ADDR TYPE AES_ADDR,
LT_ADDRESSES TYPE AES_ADDR_TABLE,
LT_CORRECTED_ADDRESSES TYPE AES_ADDR_TABLE,
LT_CONTAINERS TYPE AESC_TABLE,
LT_MESSAGES TYPE AES_MSG_TABLE,
LS_MESSAGE LIKE LINE OF LT_MESSAGES,
LV_AESC_TABS TYPE AESC_TABS,
LV_AESC TYPE AESC,
LV_AESC_LINE TYPE AESC_STRUC,
LS_ADDRESS_SELECTION TYPE ADDR1_SEL,
* lv_adrnr TYPE kna1-adrnr,
* lt_adrnr LIKE TABLE OF lv_adrnr,
LS_ADDRESS_VALUE TYPE ADDR1_VAL,
LS_AESC_GEOCODING TYPE GEOCODING,
X TYPE /DSD/RP_DEBGEOCODE_TY,
LS_DEBGEO LIKE LINE OF X,
LT_MSG LIKE LS_DEBGEO-MSGTAB.
DATA: BEGIN OF LV_ADRNR,
KUNNR TYPE KNA1-KUNNR,
ADRNR TYPE KNA1-ADRNR,
END OF LV_ADRNR.
DATA: LT_ADRNR LIKE TABLE OF LV_ADRNR.
DATA: BEGIN OF LV_KUNNRGUID,
KUNNR TYPE KNA1-KUNNR,
GUID LIKE LV_AES_ADDR-ID,
END OF LV_KUNNRGUID.
DATA: LT_KUNNRGUID LIKE TABLE OF LV_KUNNRGUID.
selection-screen begin of block b1 with frame title address.
parameters: p_addnr like KNA1-ADRNR.
selection-screen end of block b1.
SELECT KUNNR ADRNR FROM KNA1 INTO TABLE LT_ADRNR
WHERE adrnr = p_addnr.
LOOP AT LT_ADRNR INTO LV_ADRNR.
CLEAR: LS_ADDRESS_VALUE, LV_AES_ADDR.
IF LV_ADRNR-ADRNR IS INITIAL.
CONTINUE. "loop
ENDIF.
LS_ADDRESS_SELECTION-ADDRNUMBER = LV_ADRNR-ADRNR.
* get address-values
CALL FUNCTION 'ADDR_GET'
EXPORTING
ADDRESS_SELECTION = LS_ADDRESS_SELECTION
IMPORTING
ADDRESS_VALUE = LS_ADDRESS_VALUE
EXCEPTIONS
PARAMETER_ERROR = 1
ADDRESS_NOT_EXIST = 2
VERSION_NOT_EXIST = 3
INTERNAL_ERROR = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
EV_GUID_16 = LV_AES_ADDR-ID.
MOVE-CORRESPONDING LS_ADDRESS_VALUE TO LV_AES_ADDR-ADDRESS.
APPEND LV_AES_ADDR TO LT_ADDRESSES.
LV_KUNNRGUID-KUNNR = LV_ADRNR-KUNNR.
LV_KUNNRGUID-GUID = LV_AES_ADDR-ID.
APPEND LV_KUNNRGUID TO LT_KUNNRGUID.
ENDLOOP.
* create and register geocoding service
CREATE OBJECT LO_GEOCODER TYPE CL_GEOCODER.
INSERT LO_GEOCODER INTO TABLE LT_SERVICES.
CREATE OBJECT LO_ADDRESS_ENHANCER.
CALL METHOD LO_ADDRESS_ENHANCER->REGISTER_SERVICES
EXPORTING
SERVICES = LT_SERVICES.
* geocode address
CALL METHOD LO_ADDRESS_ENHANCER->ENHANCE_ADDRESSES
EXPORTING
ADDRESSES = LT_ADDRESSES
INTERACTION_ALLOWED = ''
IMPORTING
CORRECTED_ADDRESSES = LT_CORRECTED_ADDRESSES
CHANGING
AES_CONTAINERS = LT_CONTAINERS
MESSAGES = LT_MESSAGES.
* read result
LOOP AT LT_CONTAINERS INTO LV_AESC_TABS.
IF NOT LV_AESC_TABS-CANCELLED IS INITIAL.
RAISE GEOCODING_CANCELLED.
ELSE.
LV_AESC = LV_AESC_TABS-CONTAINER.
LOOP AT LV_AESC INTO LV_AESC_LINE.
CASE LV_AESC_LINE-FIELD.
WHEN 'LONGITUDE'.
LS_AESC_GEOCODING-LONGITUDE = LV_AESC_LINE-VALUE.
WHEN 'LATITUDE'.
LS_AESC_GEOCODING-LATITUDE = LV_AESC_LINE-VALUE.
WHEN 'ALTITUDE'.
LS_AESC_GEOCODING-ALTITUDE = LV_AESC_LINE-VALUE.
ENDCASE.
ENDLOOP.
ENDIF.
MOVE-CORRESPONDING LS_AESC_GEOCODING TO LS_DEBGEO.
READ TABLE LT_KUNNRGUID INTO LV_KUNNRGUID
WITH KEY GUID = LV_AESC_TABS-ID.
LS_DEBGEO-KUNNR = LV_KUNNRGUID-KUNNR.
WRITE :/ LS_DEBGEO-KUNNR , LS_DEBGEO-LATITUDE , LS_DEBGEO-LONGITUDE.
ENDLOOP.
‎2006 Feb 11 12:17 AM
this may match ur exact req
*&---------------------------------------------------------------------*
*& Report YCHATEST *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT YCHATEST.
DATA:
LO_ADDRESS_ENHANCER TYPE REF TO CL_ADDRESS_ENHANCER,
LO_GEOCODER TYPE REF TO IF_ADDRESS_ENHANCEMENT_SERVICE,
LT_SERVICES TYPE AESI_TABLE,
LV_AES_ADDR TYPE AES_ADDR,
LT_ADDRESSES TYPE AES_ADDR_TABLE,
LT_CORRECTED_ADDRESSES TYPE AES_ADDR_TABLE,
LT_CONTAINERS TYPE AESC_TABLE ,
LT_MESSAGES TYPE AES_MSG_TABLE,
LS_MESSAGE LIKE LINE OF LT_MESSAGES,
LV_AESC_TABS TYPE AESC_TABS,
LV_AESC TYPE AESC,
LV_AESC_LINE TYPE AESC_STRUC,
LS_ADDRESS_SELECTION TYPE ADDR1_SEL,
* lt_containers type lt_containers1 occurs 0 with header line,
* lv_adrnr TYPE kna1-adrnr,
* lt_adrnr LIKE TABLE OF lv_adrnr,
LS_ADDRESS_VALUE TYPE ADDR1_VAL,
LS_AESC_GEOCODING TYPE GEOCODING,
X TYPE /DSD/RP_DEBGEOCODE_TY,
LS_DEBGEO LIKE LINE OF X,
LT_MSG LIKE LS_DEBGEO-MSGTAB.
DATA: BEGIN OF LV_ADRNR,
* KUNNR TYPE KNA1-KUNNR,
ADRNR TYPE KNA1-ADRNR,
END OF LV_ADRNR.
DATA: LT_ADRNR LIKE TABLE OF LV_ADRNR.
DATA: BEGIN OF LV_KUNNRGUID,
KUNNR TYPE KNA1-KUNNR,
GUID LIKE LV_AES_ADDR-ID,
END OF LV_KUNNRGUID.
DATA: LT_KUNNRGUID LIKE TABLE OF LV_KUNNRGUID.
selection-screen begin of block b1 with frame title address.
parameters: p_addnr like KNA1-ADRNR.
selection-screen end of block b1.
SELECT single ADRNR FROM KNA1 INTO Lv_ADRNR
WHERE adrnr = p_addnr.
*LOOP AT LT_ADRNR INTO LV_ADRNR.
* CLEAR: LS_ADDRESS_VALUE, LV_AES_ADDR.
*
* IF LV_ADRNR-ADRNR IS INITIAL.
* CONTINUE. "loop
* ENDIF.
LS_ADDRESS_SELECTION-ADDRNUMBER = LV_ADRNR-ADRNR.
* get address-values
CALL FUNCTION 'ADDR_GET'
EXPORTING
ADDRESS_SELECTION = LS_ADDRESS_SELECTION
IMPORTING
ADDRESS_VALUE = LS_ADDRESS_VALUE
EXCEPTIONS
PARAMETER_ERROR = 1
ADDRESS_NOT_EXIST = 2
VERSION_NOT_EXIST = 3
INTERNAL_ERROR = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
EV_GUID_16 = LV_AES_ADDR-ID.
MOVE-CORRESPONDING LS_ADDRESS_VALUE TO LV_AES_ADDR-ADDRESS.
APPEND LV_AES_ADDR TO LT_ADDRESSES.
* LV_KUNNRGUID-KUNNR = LV_ADRNR-KUNNR.
LV_KUNNRGUID-GUID = LV_AES_ADDR-ID.
* APPEND LV_KUNNRGUID TO LT_KUNNRGUID.
*ENDLOOP.
* create and register geocoding service
CREATE OBJECT LO_GEOCODER TYPE CL_GEOCODER.
INSERT LO_GEOCODER INTO TABLE LT_SERVICES.
CREATE OBJECT LO_ADDRESS_ENHANCER.
CALL METHOD LO_ADDRESS_ENHANCER->REGISTER_SERVICES
EXPORTING
SERVICES = LT_SERVICES.
* geocode address
CALL METHOD LO_ADDRESS_ENHANCER->ENHANCE_ADDRESSES
EXPORTING
ADDRESSES = LT_ADDRESSES
INTERACTION_ALLOWED = ''
IMPORTING
CORRECTED_ADDRESSES = LT_CORRECTED_ADDRESSES
CHANGING
AES_CONTAINERS = LT_CONTAINERS
MESSAGES = LT_MESSAGES.
* read result
loop at LT_CONTAINERS INTO LV_AESC_TABS.
IF NOT LV_AESC_TABS-CANCELLED IS INITIAL.
RAISE GEOCODING_CANCELLED.
ELSE.
LV_AESC = LV_AESC_TABS-CONTAINER.
LOOP AT LV_AESC INTO LV_AESC_LINE.
CASE LV_AESC_LINE-FIELD.
WHEN 'LONGITUDE'.
LS_AESC_GEOCODING-LONGITUDE = LV_AESC_LINE-VALUE.
WHEN 'LATITUDE'.
LS_AESC_GEOCODING-LATITUDE = LV_AESC_LINE-VALUE.
WHEN 'ALTITUDE'.
LS_AESC_GEOCODING-ALTITUDE = LV_AESC_LINE-VALUE.
ENDCASE.
ENDLOOP.
ENDIF.
MOVE-CORRESPONDING ls_aesc_geocoding TO ls_debgeo.
APPEND ls_debgeo TO x.
WRITE :/ LS_DEBGEO-LATITUDE , LS_DEBGEO-LONGITUDE.
ENDLOOP.