BING geocoding& Google对网络服务或网络API进行地理编码?

时间:2014-08-06 13:51:03

标签: oracle web-services geocoding

我想从BING或Google中提取纬度和经度(对于oracle表中的某些地址)。我想从存储过程中执行此操作。我尝试使用UTL_DBWS程序包执行此操作,但由于缺少“操作'”,“输入参数请求格式”等详细信息,因此无法形成完整的调用。我无法为这两种地理编码服务找到wsdl文件。那么这些服务实际上是 web-api 还是 web-service ?从oracle stored-proc调用这些服务的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

你可以查看使用utl_http的example来了解你如何做到这一点

你需要照顾好几件事

1)您需要从数据库服务器直接连接互联网

2)您需要编辑数据库ACL策略才能使其正常工作

3)你需要逃避“&”您用于搜索的网址中的符号

4)您需要使用Oracle钱包验证SSL证书

ACL示例

BEGIN
--You need DBA to execute this function where www.xml is the ACL Name
--SCOTT is the schemaname,my.oracle.com is the host to access the webpage 
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl         => 'www.xml',
                                description => 'WWW ACL',
                                principal   => 'SCOTT',
                                is_grant    => true,
                                privilege   => 'connect');

DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl       => 'www.xml',
                                   principal => 'SCOTT',
                                   is_grant  => true,
                                   privilege => 'resolve');

 DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl  => 'www.xml',
                                host => 'my.oracle.com');
 END;
 /
COMMIT;

您可以添加其他主机名以访问ACL www.xml,如下所示

BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl  => 'www.xml',
                                host => 'www.google.co.in');
END;
/
COMMIT;

这是使用谷歌

进行纬度和经度搜索的示例
    declare
      httpuri        HttpUriType;
      x              clob;
      address        VARCHAR2(32000):='New York';
      lat_long_value VARCHAR2(4000);
    begin

      UTL_HTTP.set_transfer_timeout(60); --set timeout to 60 seconds
      httpuri        := HttpUriType('http://www.google.co.in/search?q=find+latitude+and+longitude+of+' ||address||'&'||'ie=utf-'||'8&'||'oe=utf-'||'8&'||'aq=t'||'&'||'rls=org.mozilla'||':'||'en-US'||':'||'official'||'&'||'client=firefox-a');
      x              := httpuri.getclob();
      lat_long_value := regexp_substr(x, '<div class="_Xj">(.+)</div>');
      if lat_long_value is not null then
        select regexp_replace(lat_long_value,
                              '<div class="_Xj">(.+)</div>',
                              '\1')
          into lat_long_value
          FROM dual;
      end if;
      dbms_output.put_line(lat_long_value);
    end;

如果收到错误

Ora-29024 Certification validation failure

请按照将Google徽书添加到Oracle钱包here

所需的步骤操作

最后你得到的输出是

40.7127° N, 74.0059° W