Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Getting the geocode

Former Member
0 Likes
2,312

Does any know if there is any class for getting the latitude and longitude values by an address in ABAP? thanks a lot~!

14 REPLIES 14
Read only

Former Member
0 Likes
1,646

check this table SGEOCITY

Read only

0 Likes
1,646

Any Demo Program shows how to use it? I am new to ABAP. more detail would be helpful. thanks.

Read only

0 Likes
1,646
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

Read only

0 Likes
1,646

Thanks, but what I want is the lat/lon values for a specific address. I wanna something the Geocoder.US provides.

Read only

0 Likes
1,646

Check out the above link and see the help ..

Kindly also award the point . If its give you some help or guide line ..

Thanks

Read only

0 Likes
1,646

Do you mind to point me to the exact location or examples? I can't find it in these articles. thanks.

Read only

0 Likes
1,646

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

Read only

0 Likes
1,646

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.

Read only

0 Likes
1,646

goto SE37 transaction and give the fuction module name

Class name is cl_address_enhancer

Read only

0 Likes
1,646

Pls reward points if ur problem is solved and close the thread

Read only

0 Likes
1,646

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!

Read only

0 Likes
1,646
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.
Read only

0 Likes
1,646
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.