项目中需要进行geo_code
刚开始用的是geokit的gem, 支持多个api, google和yahoo 但是没有bing的, 客户又要求使用bing的
没办法, 搜, geocoder(
https://github.com/alexreisner/geocoder)中支持bing的, 但是从rails3良好支持, rails2 的分支中好像没提到,无奈项目又是rails2.3.8的, 所以我把geo_coder源码中的bing部分抠了下来
注: 先去bing申请api key
www.bingmapsportal.com
require 'net/http'
require 'uri'
require 'rubygems'
require 'json'
class Address
def geocode(address)
results(address)
end
def results(query)
return [] unless doc = fetch_data(query)
if doc['statusDescription'] == "OK"
return doc['resourceSets'].first['estimatedTotal'] > 0 ? doc['resourceSets'].first['resources'] : []
else
warn "Bing Geocoding API error: #{doc['statusCode']} (#{doc['statusDescription']})."
return []
end
end
def query_url(query)
params = {:key => "API-Key"}
params[:query] = query
base_url = "http://dev.virtualearth.net/REST/v1/Locations"
url_tail = "?"
base_url + url_tail + hash_to_query(params)
end
def hash_to_query(hash)
require 'cgi' unless defined?(CGI) && defined?(CGI.escape)
hash.collect{ |p|
p[1].nil? ? nil : p.map{ |i| CGI.escape i.to_s } * '='
}.compact.sort * '&'
end
def fetch_data(query)
begin
parse_raw_data fetch_raw_data(query)
rescue SocketError => err
raise_error(err) or warn "Geocoding API connection cannot be established."
rescue TimeoutError => err
raise_error(err) or warn "Geocoding API not responding fast enough " +
"(see Geocoder::Configuration.timeout to set limit)."
end
end
##
# Fetches a raw search result (JSON string).
#
def fetch_raw_data(query)
timeout(30) do
url = query_url(query)
uri = URI.parse(url)
client = http_client.new(uri.host, uri.port)
response = client.get(uri.request_uri).body
response
end
end
##
# Parses a raw search result (returns hash or array).
#
def parse_raw_data(raw_data)
if defined?(ActiveSupport::JSON)
ActiveSupport::JSON.decode(raw_data)
else
begin
JSON.parse(raw_data)
rescue
warn "Geocoding API's response was not valid JSON."
end
end
end
##
# Object used to make HTTP requests.
#
def http_client
Net::HTTP
end
end
address = Address.new
address.geocode("25 Main St, Cooperstown, NY")
分享到:
相关推荐
这是博客“http://blog.csdn.net/vaecer/article/details/8834976”的配套工程。
GeoCode支架式可视化编程平台 关于 GeoCode的目标是通过编程实践让学生探索地质威胁。 在这种情况下,我们使用Blockly生成运行简单的tephra分发模型的代码。 学生使用更改喷发参数。 链接和分支 master :最新作品...
基于Arcgis server 做的一个geocode的例子
Laravel开发-geocode Google geocoding api for laravel 4(fork jcf/geocode with updated guzzle)
matlab开发-GeoCode。使用不同的地理编码服务查找地址的纬度和经度
Laravel开发-geocode .zip.zip
Google Maps Geocode API Google Maps Geocode API的简单PHP包装器 安装及要求 首先,您需要使用Composer来打包: $ composer require marcoboom/google-maps-geocode-api 该软件包需要PHP 5.4和 用法 $ geo =...
离线安装包,亲测可用
一个React组件,用于为geocode.earth构建自定义的UI 使您能够轻松构建由提供支持的自定义自动完成下拉列表。 完全控制渲染,以便与其他库(例如Redux-Form)很好地集成。 基本上是的geocode.earth版本。 安装 ...
>> > import reverse_geocode >> > coordinates = ( - 37.81 , 144.96 ), ( 31.76 , 35.21 ) >> > reverse_geocode . search ( coordinates ) [{ 'city' : 'Melbourne' , 'country_code' : 'AU' , 'country' : '...
运行以下命令: python geocode.py -i example/countries.txt -k YOUR_API_KEY_HERE请注意,较长的国家/地区列表将需要一些时间来处理。 完成后,国家/地区将打印到控制台,并将JSON结果写入输出文件。例子使用在...
GeocodeJSON GeocodeJSON软件包是一个小型实用程序的集合,可与地理编码API(例如Google Geocoding API , HERE Geocoding API , Opencage等)以及自托管解决方案(如。 这些程序包提供了一个简单的... geocode :使
资源来自pypi官网。 资源全名:appel_geocode-0.1.1-py3-none-any.whl
bangladesh-geocode, 分区,区域,Upazila和联合级别完全映射的MySQL数据库 GeoCode分,区,Upazila,联合级完全映射MySQL数据库。 导入数据库中的所有文件并使 Join 查询( 可能是) 获得所需的地理信息。所有的信息...
npm install geocode-wifi 用法 此模块需要网络访问权限才能与Google通信,以便可以对提供的访问点进行三角剖分。 var geocodeWifi = require ( 'geocode-wifi' ) var towers = [ { mac : '0e:1d:41:0c:22:d4' ,...
自己写的工具程序,独创,自动根据地名(Excel中海量数据)提取地物地理坐标(海量),并实现多结果输出(Kml文件、Excel坐标、敏感词清单),并数据结果正确性评价。