Nowadays, geodata play an increasingly important role. If you want to exploit the full potential of your data, you have to put them into a spatial context. In this article I will show you how to use the Google API to enrich data with geo information in SAP with ABAP.
Enriching your data with geo-information opens up many new application possibilities. For example, you can create dashboards with geo-information and make cartographic evaluations. In doing so, you can recognize important connections at a glance and thus gain new insights that cannot be easily derived from tables.
You can also use geodata in machine learning, for example to cluster your customers by location. Furthermore, geo points serve as a basis for calculating distances, which can also be an important criterion. In addition, you can also create personalized marketing campaigns based on geospatial information.
In this article, you'll learn how to use the Google Maps API to retrieve geo-information, such as latitude and longitude, based on address data. This allows you to create a consolidated database of geodata for all applications. The central availability of geo-information reduces the required data entry effort. In addition, double processing is avoided.
So how does it work in practice? First of all, it should be noted that the Google Maps API is subject to payment. To use it, you need a billing account and at least one enabled Google Maps Platform API or SDK. The API key can be requested in the Google Cloud Platform Console. You must provide an API key with each Maps JavaScript API request.
For example:
https://maps.googleapis.com/maps/api/geocode/json?address=kepellenstrasse37 hofheim&key=YOURAPIKEY
The result is returned in JSON format and could look like this:
Google also recognizes minor spelling mistakes (e.g. kepellenstr. vs. Kapellenstr.) and corrects them automatically.
SAP BW, HANA Native and Data Warehouse Cloud - Download the comparison
This query can also be executed in ABAP directly from a SAP system such as a Business Warehouse (SAP BW). To do this, we must first create an HTTP client:
cl_http_client=>create(
EXPORTING
host = 'maps.googleapis.com' " Logical destination (is specified when the function is called)
service = '443' " Port number
proxy_host = '' " Logical destination (is specified when the function is called)
proxy_service = '' " Port number
scheme = '2' "HTTPS = 2 ; HTTP = 1
ssl_id = 'ANONYM' " SSL Identity
sap_username = '' " R/3-System, User login name
sap_client = '' " R/3-System, Client number from login
IMPORTING
client = DATA(lo_client) " HTTP Client Abstraction
EXCEPTIONS
argument_not_found = 1 " Connection parameter (host or service) not available
plugin_not_active = 2 " HTTP/HTTPS-Communikation is not available
internal_error = 3 " Internal error (e.g. name too large)
OTHERS = 4
) .
Afterwards, the requested address and the API key is passed to this client:
l_uri = '/maps/api/geocode/json?address=' && cl_http_utility=>escape_url(
unescaped = i_address ) &&'&key=' && l_api_key.
The result is a JSON string:
Finally, it is necessary to convert the JSON string and provide the results in ABAP format:
/ui2/cl_json=>deserialize( EXPORTING json = l_body pretty_name = /ui2/cl_json=>pretty_mode-camel_case CHANGING data = ls_root ).
The functionality of the JSON Converter is explained in the SCN Wiki.
You can then easily write the data from ABAP to BW using the new ADSO APIs. You can also use process chains to plan loading processes.
Would you like to learn more about how you can connect other applications to SAP? Please do not hesitate to contact us.