Javascript 谷歌地理编码通过HTTP回调函数?
我想通过HTTP使用google geocode功能将城市名称转换为我的AJAX web应用程序中的经度和纬度 但是,似乎不存在HTTP地理编码器功能的回调函数 这是真的吗,不存在回调函数 因为如果这是真的,那么它本质上意味着当与AJAX一起使用时,通过HTTP api的Google地理代码是无用的,因为JavaScript将抛出一个跨域异常错误 关于如何在JavaScript的AJAX web应用程序中通过HTTP api使用地理代码,有什么想法吗 注意:我不想使用完整的Google Maps API,该API下载量约为200kb(即GClientGeocoder)。我想使用HTTP api b/c,它具有超快速的响应能力,并且不需要我的web用户下载庞大的完整交互式google maps api 例如。 {API_KEY}&q={城市,州}&CALLBACK=Javascript 谷歌地理编码通过HTTP回调函数?,javascript,ajax,callback,geocoding,Javascript,Ajax,Callback,Geocoding,我想通过HTTP使用google geocode功能将城市名称转换为我的AJAX web应用程序中的经度和纬度 但是,似乎不存在HTTP地理编码器功能的回调函数 这是真的吗,不存在回调函数 因为如果这是真的,那么它本质上意味着当与AJAX一起使用时,通过HTTP api的Google地理代码是无用的,因为JavaScript将抛出一个跨域异常错误 关于如何在JavaScript的AJAX web应用程序中通过HTTP api使用地理代码,有什么想法吗 注意:我不想使用完整的Google Map
谢谢嗯……我想你必须让你的AJAX呼叫回你自己的服务器,然后从你的服务器上呼叫谷歌的地理代码 这就是我如何进行AJAX地理编码的方法,它全部通过我的ASP.NET代码完成 编辑: 在ASP.NET webforms环境中,我可能会将其实现为一个轻量级ASHX文件,但为了简单起见,下面是一个ASPX示例:
public partial class GoogleHandler : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {
Response.Write(GetGoogleXML("http://pseudo_googlegeocode?parameter=" + parametersFromQuerystring);
}
}
在上面的示例中,.NET页面只传递请求
但在实际环境中,我宁愿我的.NET代码做更多的事情,而不仅仅是传递数据。这样,在将数据发送到客户端之前,我可以在服务器上执行错误处理、过滤、验证、业务逻辑等操作
此外,这允许更大的抽象。i、 我可能会从谷歌改为雅虎地理编码。这样,我只需要更改我的服务逻辑,让客户端只接收一组通用的坐标/位置数据
此外,使用这种抽象,我实际上可以聚合来自各种地理编码数据源的多个数据。同样,服务器负责聚合,客户端只接收并显示过滤后的数据。看看谷歌地图API。它有一些回调函数,这些回调函数使用它的地理编码服务
下面是一个使用谷歌地图地理编码器的示例。geocoder函数getLocation将回调函数作为第二个参数
function findAddress(street, city, state, zip) {
var address = [
street,
city.toLowerCase(),
state.toLowerCase(),
zip
].join(', ');
if (!geocoder) {
geocoder = new GClientGeocoder();
}
if (geocoder) {
geocoder.getLocations(
address,
function(result) {
var dialog, len, point;
if (result.Status.code != G_GEO_SUCCESS) {
alert("Error: "+result.Status.code)
} else {
len = result.Placemark.length;
if (len > 1) {
alert("Multiple matches were found. I'll leave it as an exercise to handle this condition");
} else {
point = new GLatLng(
result.Placemark[0].Point.coordinates[1],
result.Placemark[0].Point.coordinates[0]
);
}
}
}
);
}
}
正如其他人指出的,你没有阅读整页。你想要那个页面所说的 这是我不久前写的一个脚本的简化版本。它还使用了谷歌地图控件,但可以忽略这一点。延迟函数黑客是因为当我太快点击他们的服务器时,谷歌似乎偶尔返回空值。我不知道这是否仍然是一个问题,所以除非必须,否则不要把它放进去
<script type="text/javascript">
//<![CDATA[
var freezeLocations;
var coder;
var map;
function load() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(38.479395, -98.349609), 4);
map.addControl(new GLargeMapControl());
}
coder = new GClientGeocoder();
missionLocations = new Array();
missionLocationsDelayed = new Array();
addMissionLocation("Atlanta, Georgia", "http://improveverywhere.ning.com/group/atlanta");
//etc.
}
function addMissionLocation(newLocation, url)
{
var successful = false;
var counter = 0;
while(!successful && counter < 3)
{
coder.getLatLng(
newLocation,
function(point) {
if (!point) {
//alert(newLocation + " not found");
successful = false;
} else {
missionLocations.push(new GMarker(point, { title:newLocation}));
//alert(missionLocations.length);
map.addOverlay(missionLocations[missionLocations.length - 1]);
missionLocations[missionLocations.length - 1].bindInfoWindowHtml("<a href='" + url + "'>" + newLocation + "</a>");
successful = true;
}
}
);
if(!successful)
{
delayGeocode();
}
counter++;
}
}
function delayGeocode()
{
for(var i = 0; i < 2000000; i++)
{
}
}
//]]>
</script>
//
您可以使用我博客文章中概述的雅虎查询语言
您可以使用yql语句,如:select*fromJSON,其中
select * from json where
url="http://maps.google.com/maps/geo?output=json&sensor=false&q=Indianapolis,In"
url=”http://maps.google.com/maps/geo?output=json&sensor=false&q=Indianapolis,在“
然后,您可以使用src{your yql here}&format=json&callback={your function here}将脚本标记添加到html(可以使用document.createElement('script'))中,其中{your yql here}替换为yql语句的URI编码版本 我支持创建服务器端页面以访问地理编码器的建议。我也在做类似的事情,效果很好。有一篇关于在PHP中使用geocoder的好文章 另外请注意,从技术上讲,除非你将数据显示在谷歌地图上,否则使用谷歌地理编码器是不可能的,但我不知道他们是否真的会检查你 如果你看过 文档,但未找到它,以及 安德鲁和迈克都没有说 “是的”,并告诉你怎么做,我 怀疑你有答案 哈哈 并让所有人阅读该服务的文档: 10.13从谷歌隐藏或屏蔽您的服务使用时的身份 服务,包括未能 遵循身份确认惯例 在Maps API文档中列出; 或 10.14违反地图API文档中的任何政策或违反谷歌的 软件原理(…) 也 此服务旨在对静态(已知)地址进行地理编码 使用REST接口,用于放置 地图上的应用程序内容。对于 用户自定义的动态地理编码 地址(例如,在用户内) 接口元素),请参阅 JavaScript的文档 客户端地理编码器或地图API Flash客户端地理编码器。地理编码是一种 时间和资源密集型任务。 只要有可能,前地理编码是已知的 地址(使用地理编码服务) 此处描述或其他地理编码 服务),并将结果存储在 您自己设计的临时缓存
但是你也可以试试我也遇到了你上面描述的挑战。正如您所指出的,Google阻止跨域HTTP访问地理编码API URL:
谢谢,但我不想使用完整的谷歌地图API。我想使用HTTP地理编码器。谢谢,但我不想使用完整的谷歌地图API。我想使用HTTP地理编码器。谢谢,但我不想使用完整的谷歌地图API。我想使用HTTP地理编码器。没有原始JSONP。您可以使用RESTAPI(如果需要,可以使用代理),也可以使用GClientGeocoder。如果这是真的,那么JSONP不存在于HTTP中,并且只存在于GClientGeocoder中。。。那将是非常悲哀的,这不是一个