调用一个 Google 的 服务 是比较简单的
下面代码比较乱 是个沙盘测试
controller:
require 'net/http'
require 'soap/wsdlDriver'
def test
end
def lookup_who
who = [{:login => 'webservice',:pwd =>'123456'}]
who.each_with_index do |wh,index|
authentication = get_code_by_soap(wh)
end
end
def lookup_geocodes
# your list of places. In a real app, this would come from the database,
# and have more robust descriptions
places = [
{:address=>'555 Irving, San Francisco, CA',:description=>'Irving'},
{:address=>'1401 Valencia St, San Francisco, CA',:description=>'Valencia'},
{:address=>'501 Cole St, San Francisco, CA',:description=>'Cole'},
{:address=>'150 Church st, San Francisco, CA',:description=>'Church'}
]
# this loop will do the geo lookup for each place
places.each_with_index do |place,index|
# get the geocode by calling our own get_geocode(address) method
geocode = get_geocode place[:address]
# geo_code is now a hash with keys :latitude and :longitude
# place these values back into our "database" (array of hashes)
place[:latitude]=geocode[:latitude]
place[:longitude]=geocode[:longitude]
end
#place the result in the session so we can use it for display
session[:places] = places
#let the user know the lookup went ok
render :text=> 'Looked up the geocodes for '+places.length.to_s+
' address and stored the result in the session . . .'
end
def show_google_map
# all we're going to do is loop through the @places array on the page
@places=session[:places]
end
def testclient
Net::HTTP.start('192.168.1.2', 80) { |http|
response = http.post('/WebService2/Service1.asmx/authentication',
'login=webservice&pwd=123456')
puts response.body
}
render :text => "ok"
end
private
def get_code_by_soap(who)
x=ActionWebService::Client::Soap.new('authentication',"http://192.168.1.2/WebService2/Service1.asmx")
x
puts "OK"
#puts @results
end
def get_code(auth)
login = auth[:login].to_s
pass = auth[:pwd].to_s
puts "start call service"
# this is where we call the geocoding web service
server = XMLRPC::Client.new2('http://192.168.1.2/WebService2/Service1.asmx')
result = server.call2('authentication', 'webservice','123456')
#logger.debug "Geocode call: "+result.inspect
#return {:success=> true, :latitude=> result[1][0]['lat'],
# :longitude=> result[1][0]['long']}
puts "OK"
puts result
end
def get_geocode(address)
logger.debug 'starting geocoder call for address: '+address
puts address
# this is where we call the geocoding web service
server = XMLRPC::Client.new2('http://rpc.geocoder.us/service/xmlrpc')
result = server.call2('geocode', address)
logger.debug "Geocode call: "+result.inspect
return {:success=> true, :latitude=> result[1][0]['lat'],
:longitude=> result[1][0]['long']}
end
-------------------------------------------------------------------
view 中的内容
<html>
<head>
<title>Google maps example</title>
<!-- This includes the google maps API code.
You need to put your own key here -->
<script src="http://maps.google.com/maps?file=api&v=1&key=ABQIAAAAi4uuuQwsNrtFZiZKtsFk4BRoI9foflBXlzG4CGuVNeDA3TFtZBR9hGWDO8Mngn2R4HHEHJWe_OgKSw" type="text/javascript"></script>
<script type="text/javascript">
// helper function to create markers
function createMarker(point,html) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
// this is called when the page loads.
// it initializes the map, and creates each marker
function initialize() {
var map = new GMap(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.centerAndZoom(new GPoint(-122.443882, 37.769079), 5);
<%@places.each do |place|%>
var point = new GPoint(<%=place[:longitude]%>,<%=place[:latitude]%>);
var marker = createMarker(point,'<div><%=h place[:description]%></div>')
map.addOverlay(marker);
<%end%>
}
</script>
</head>
<body οnlοad="initialize()">
fdafdsafdsfffffffffffffffffffffffdfsdfdf:
<!-- This is the element in which the map will be displayed. -->
<div id="map" style="width: 450px; height: 350px"></div>
</body>
</html>
上面是客户端 RUBYONRAILS 获取GOOGLE MAP 的服务
下面代码比较乱 是个沙盘测试
controller:
require 'net/http'
require 'soap/wsdlDriver'
def test
end
def lookup_who
who = [{:login => 'webservice',:pwd =>'123456'}]
who.each_with_index do |wh,index|
authentication = get_code_by_soap(wh)
end
end
def lookup_geocodes
# your list of places. In a real app, this would come from the database,
# and have more robust descriptions
places = [
{:address=>'555 Irving, San Francisco, CA',:description=>'Irving'},
{:address=>'1401 Valencia St, San Francisco, CA',:description=>'Valencia'},
{:address=>'501 Cole St, San Francisco, CA',:description=>'Cole'},
{:address=>'150 Church st, San Francisco, CA',:description=>'Church'}
]
# this loop will do the geo lookup for each place
places.each_with_index do |place,index|
# get the geocode by calling our own get_geocode(address) method
geocode = get_geocode place[:address]
# geo_code is now a hash with keys :latitude and :longitude
# place these values back into our "database" (array of hashes)
place[:latitude]=geocode[:latitude]
place[:longitude]=geocode[:longitude]
end
#place the result in the session so we can use it for display
session[:places] = places
#let the user know the lookup went ok
render :text=> 'Looked up the geocodes for '+places.length.to_s+
' address and stored the result in the session . . .'
end
def show_google_map
# all we're going to do is loop through the @places array on the page
@places=session[:places]
end
def testclient
Net::HTTP.start('192.168.1.2', 80) { |http|
response = http.post('/WebService2/Service1.asmx/authentication',
'login=webservice&pwd=123456')
puts response.body
}
render :text => "ok"
end
private
def get_code_by_soap(who)
x=ActionWebService::Client::Soap.new('authentication',"http://192.168.1.2/WebService2/Service1.asmx")
x
puts "OK"
#puts @results
end
def get_code(auth)
login = auth[:login].to_s
pass = auth[:pwd].to_s
puts "start call service"
# this is where we call the geocoding web service
server = XMLRPC::Client.new2('http://192.168.1.2/WebService2/Service1.asmx')
result = server.call2('authentication', 'webservice','123456')
#logger.debug "Geocode call: "+result.inspect
#return {:success=> true, :latitude=> result[1][0]['lat'],
# :longitude=> result[1][0]['long']}
puts "OK"
puts result
end
def get_geocode(address)
logger.debug 'starting geocoder call for address: '+address
puts address
# this is where we call the geocoding web service
server = XMLRPC::Client.new2('http://rpc.geocoder.us/service/xmlrpc')
result = server.call2('geocode', address)
logger.debug "Geocode call: "+result.inspect
return {:success=> true, :latitude=> result[1][0]['lat'],
:longitude=> result[1][0]['long']}
end
-------------------------------------------------------------------
view 中的内容
<html>
<head>
<title>Google maps example</title>
<!-- This includes the google maps API code.
You need to put your own key here -->
<script src="http://maps.google.com/maps?file=api&v=1&key=ABQIAAAAi4uuuQwsNrtFZiZKtsFk4BRoI9foflBXlzG4CGuVNeDA3TFtZBR9hGWDO8Mngn2R4HHEHJWe_OgKSw" type="text/javascript"></script>
<script type="text/javascript">
// helper function to create markers
function createMarker(point,html) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
// this is called when the page loads.
// it initializes the map, and creates each marker
function initialize() {
var map = new GMap(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.centerAndZoom(new GPoint(-122.443882, 37.769079), 5);
<%@places.each do |place|%>
var point = new GPoint(<%=place[:longitude]%>,<%=place[:latitude]%>);
var marker = createMarker(point,'<div><%=h place[:description]%></div>')
map.addOverlay(marker);
<%end%>
}
</script>
</head>
<body οnlοad="initialize()">
fdafdsafdsfffffffffffffffffffffffdfsdfdf:
<!-- This is the element in which the map will be displayed. -->
<div id="map" style="width: 450px; height: 350px"></div>
</body>
</html>
上面是客户端 RUBYONRAILS 获取GOOGLE MAP 的服务