作者william01044 (阿玮)
看板Ajax
标题[问题] 请问关於Google map经纬度取得问题
时间Fri Apr 17 16:58:00 2015
各位版友大家好
小弟我是javascript的初学者
我想请问各位关於Google取得经纬度的函式问题
我参考google api的范例写出来的函式如下:
function addressGps(add) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode({address:add},function geoResults(results, status){
//回应函数 状态ok说明有结果
if (status == google.maps.GeocoderStatus.OK) {
var ans = results[0].geometry.location;
//document.write(ans);
return (ans);
}else{
alert(":error " + status);
}
});
}
其中传入的add变数是中文地址,我希望得到此地址转出来的经纬度数字
但是用return传出来ans变数,在外头印出来却是undefined
如果直接在此函式里头印,会印出全部搜寻过的地址的经纬度结果
我想请问各位版友,有没有办法单独一个地址一个地址对应的方式去取得其经纬度的数值
而不是像现在这样用return拿不到数值,或是一次印出一堆数值
谢谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.211.91.17
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1429261082.A.212.html
※ 编辑: william01044 (218.211.91.17), 04/17/2015 16:58:29
※ 编辑: william01044 (218.211.91.17), 04/17/2015 16:59:27
1F:推 Peruheru: 你何不在return前把内容指定给外围的变数? 04/17 17:23
2F:→ Peruheru: 而且我想你应该没有真的接到return的值,你注意到它有 04/17 17:25
3F:→ Peruheru: 两层function吗?里面那层只是回呼函数 04/17 17:25
4F:→ Peruheru: 我猜你是用类似var result = addressGps(add);的方式跑 04/17 17:26
5F:→ william01044: 感谢P大的回应 我想请问指定给外围的变数是指什麽? 04/17 17:27
6F:→ Peruheru: 但addressGps本身没有回传值(至少你没写),所以收不到 04/17 17:27
7F:→ william01044: 是在function输入参数中再多加一个当回传参数吗? 04/17 17:27
8F:→ Peruheru: 不是,是比较新手的写法 04/17 17:28
9F:→ william01044: 两层function我是知道的...但是我试过几种方式 04/17 17:28
10F:→ Peruheru: 在函式外面宣告比如var glocation; 04/17 17:29
11F:→ william01044: 我拆不开这两个function 拆开来就没办法正常执行... 04/17 17:29
12F:→ william01044: 可能我功力还太弱T_T 04/17 17:29
13F:→ Peruheru: 然後在return前写glocation = ans; 04/17 17:29
14F:→ Peruheru: 这样就可以硬把结果拉出来,不过这种写法很糟XD 04/17 17:30
15F:→ Peruheru: 理论上你要的值存在geocoder里面,但function结束就没了 04/17 17:31
16F:→ Peruheru: 如果你要拉出来,正规方式是要回传两次 04/17 17:31
17F:→ william01044: 我刚刚试过P大您说的方法 但是直ans的值还是没出来 04/17 17:32
18F:→ Peruheru: 但我不熟geocoder的组成,所以没办法回答你如何回传XD 04/17 17:32
19F:→ william01044: 我是在这个函式结尾前面加上var A = ans; return(A) 04/17 17:33
20F:→ william01044: 但是结果是空值 没有办法印出来 04/17 17:34
21F:推 Peruheru: 不是不是,宣告要在函式宣告之前 04/17 17:43
22F:→ Peruheru: 之後存取A就不要再写var了 04/17 17:44
23F:→ Peruheru: 把var a;写在你贴的程式"之前" 04/17 17:44
24F:→ Peruheru: 然後里面return前写 a = ans; 04/17 17:45
25F:→ Peruheru: 这才是我想表达的方法(虽然很烂) 04/17 17:45
26F:→ william01044: 状况一样耶 还是没有值T_T 04/17 17:46
27F:→ william01044: 而且我明明是用for回圈去传地址 04/17 17:46
28F:→ william01044: 但是在这个函式里头印出来的经纬度却都连在一起 04/17 17:47
29F:→ Peruheru: 基本上你的问题在於不了解"变数存活周期" 04/17 17:47
30F:→ william01044: 并不是一个地址印一个经纬度... 04/17 17:47
31F:→ william01044: 所以我在猜是不是这个geocoder函式是全部蒐集好再传 04/17 17:48
32F:→ Peruheru: 如果你打算好好学习程式,建议先去了解一下变数存活周期 04/17 17:48
33F:→ william01044: 因为看google api范例的时候 里头有说非同步 04/17 17:48
34F:→ william01044: 我觉得不是变数周期的问题 因为我试过放在任何地方 04/17 17:49
35F:→ william01044: 都没有数值 04/17 17:49
36F:→ william01044: 不是因为那个变数在函数内被结束的关系... 04/17 17:50
37F:推 Peruheru: 你方便贴完整一点的程式吗?老实说我连你用回圈也不知道 04/17 17:51
38F:推 Peruheru: 如果你外面还有包回圈,就会多很多种可能 04/17 17:54
39F:→ william01044: 全文在另一篇 04/17 17:58