我想阅读Freebase API http://smartsearch.kd.io。我设法做了一个部分,但现在我想检索地理位置坐标并创建一个地图,但它似乎不起作用。
这是我的JS代码:
$.getJSON("https://www.googleapis.com/freebase/v1/topic/en/paris?filter=/location/location/geolocation&key=AIzaSyAMWOvyMSupZsOHordVo1EawZbSkEySNVA&callback=?", function(data) {
var card = $("<div>").attr({"class":"card"});
var latlon=data.property["/location/location/geolocation"].values[0].text.split(" - ")[0] +","+data.property["/location/location/geolocation"].values[0].text.split(" - ")[1];
var img_url="http://maps.googleapis.com/maps/api/staticmap?center="+latlon+"&zoom=14&size=400x300&sensor=false";
var imgel = $("<img>").attr("src",img_url);
imgel.appendTo(card);
card.appendTo("body");
});
您可能需要的其他信息:
- 请注意,在smartsearch中,我使用的是$(“#searchinput”)。val()而不是paris,但这并没有改变任何东西,因为它甚至不能用于巴黎。
- 我认为谷歌地图不会造成这种情况
- 交叉原始请求不是问题,因为我设法从网站上获取其他数据
- JSON文件(由Jquery解析的删除的回调参数):https://www.googleapis.com/freebase/v1/topic/en/paris?filter=/location/location/geolocation&key=AIzaSyAMWOvyMSupZsOHordVo1EawZbSkEySNVA
- 如果您需要完整的JS代码,请访问smartsearch.kd.io/js/script.js
- 如果网站处于离线状态,那可能是koding限制(网站在退出koding后15分钟关闭)
答案 0 :(得分:0)
您似乎多次进行此类测试:
if(data.property['/people/person/parents'].values.length) {
if(data.property['/people/person/children'].values.length) {
if(data.property['/people/person/sibling_s'].values.length) {
if(data.property["/location/location/geolocation"].values.length) {
这就是您的代码失败的地方。您应该使此测试更可靠和稳定,同时还要删除重复的代码。
这是辅助函数
function dataHasProperty(data, property) {
if (!data.hasOwnProperty(property)) return false;
if (!data[property].hasOwnProperty('values')) return false;
return data[property].values.length;
}
这是改进的测试:
if(dataHasProperty(data, '/people/person/parents')) {
if(dataHasProperty(data, '/people/person/children')) {
if(dataHasProperty(data, '/people/person/sibling_s')) {
if(dataHasProperty(data, '/location/location/geolocation')) {