— Designsor

上周四下午老大让我加一个map的应用到网站里,需求也没怎么说,大概的样子让我参照大众点评网的来做。

先看看大众点评网关于map应用的这部分:

看起来比较简单的一个东西,因为之前有业余做过地图应用,打开大众的代码扫了一眼,没看太明白……还是得自己写一个。注意下面的4个功能,停车属于他们自己的一个应用,这里只是一个跳转,所以没有实现。其他的3个,查看全图,修改标注,路线查询,我后面均实现鸟。

要想做这货,先说一下我自己的背景,印象里地图应用,都是需要依靠准确的经纬度来定位marker和map的位置的,之前做过的一个chrome扩展,是用的ipcn和qq转换的ip=>经纬度,这里看起来,不能用ip什么的了,html5里的location也不行,毕竟不是定位用户位置,而是具体指定位置。

最一开始,我想到的思路是找位置转换经纬度的api,找到了。搜了一下,是这个地址:

‘http://ditu.google.cn/maps/geo?q=’+encodeURI(_cg.q)+
‘&output=json&callback=GM.widget.map.callback’+this.digit+’&oe=utf8&sensor=false&key=’+_cg.key;

我直接从历史代码里抄来了,大概看的出来,通过传入q关键字,key还有指定的callback,实现经纬度的获取,通过这个借口,可以获得关键字的一个相关jsonp格式的js。

第一个版本的代码,就是按照这个思路来做的,已经完成了90%的时候,老大告诉我,q给不了你那么全……。或者说有,但是为了防止竞争对手网站抄你得数据,不能放在源码里给我。

那么好吧。沟通了一下,写了个爬虫,对这个接口进行一次抓取,把数据库的地址批量导入再储存,获得了一批场馆的经纬度,但是问题还有,依然有一批场馆,google这个接口没有经纬度的返回,那么怎么办。

嗯,我想到的和大众点评网的那个修订标注是一个功能,模糊定位到场馆所在的区,然后让编辑或者场馆主自己修订保存具体的位置,再update到数据库,这样就ok了。

那么又改了一版代码,依旧是依赖这个接口,最后实现了,发布出去以后突然发现……

所有有经纬度的正常显示,但是没有的,这个接口返回610.

http://code.google.com/intl/zh-CN/apis/maps/documentation/geocoding/v2/#StatusCodes

从这里能看到610的意思是key不对,又找了半天,发现v2版本的google map本地是不用key的……但是上线之后我发现我引用绘制地图的api是v3的……到最后问题确定了……所有的 v2通过这个接口得到的东西,必须要用v2的maps.js来绘制,否则就认为你是非法的,那么我的实现是用v3的接口写的……彻底悲剧了。

下午又对代码进行修改,最后放弃了上面这个本地ok的破接口。找了一下v3的服务接口,发现google内置了逆转经纬度的方法:

http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/services.html#ReverseGeocoding

具体的例子看这个吧。最关键的代码是这一部分:

//不给坐标的情况下,给关键字q,自己搜索绘制
if(!that.center){
//没有坐标的时候,用内置反查询搜索q的位置,如果q还没有搜到,则不显示
if(google){
    geocoder = new google.maps.Geocoder();
    geocoder.geocode( { 'address': that.q}, function(results, status) {
	 if (status == google.maps.GeocoderStatus.OK) {
		var location=results[0].geometry.location;
		that.center=[location['Oa'],location['Na']];
		drawmap(target,that.center,that.name,that.siteNo);
	 } else {
		error(target);
	 }
 });
}
}else if(that.center){
      //给了坐标,直接根据坐标绘制地图,name为场馆名字
     drawmap(target,that.center,that.name,that.siteNo);
}

之后内部的drawmap函数就是一个初始化地图的功能了,并且绘制了下面bar部分。

bar部分我这边实现了3个,查看大图,利用自己的ovaerlay浮出一个层,再初始化一个map,就实现了。

然后查询路线,直接一个表单提交到google map,自己查去吧。。

最后是修订,修订功能也不复杂,利用marker的一个dragend时间,进行ajax保存即可:

if(that.drag){
	google.maps.event.addListener(marker,'dragend', function () {
	var center=marker.getPosition();
	if(confirm('指定这里为新的场馆坐标么?')){
	       GM.tools.overlay.close();
		$.ajax({
			url:'xxx.jsp',
			data:{
				siteNo:siteNo,
				lat:center['Na'],
				lng:center['Oa']
			},
			success:function(){
				alert('本次修改已经提交');
			},
			error:function(){
				alert('服务响应超时,请重试');
			},
			timeout:5000
		});
	}
      });
}

屎一样的代码我就不多贴了,大概就是这么个意思,全部的代码可以参见下面:

https://github.com/xiaojue/goodmedia/blob/master/src/widget/map/map.js

再然后就没有了,主要是想说,最开始思路的确没问题,恶心的是半年没看过map api了,发现改的太多,还没专下心来读,造成刚才悲剧了。特别记录一下,也分享给需要用到的兄弟们。估计这个功能很多网站都会用到的了,虽然google对map还是有访问限制,但是中小型应用还是不错选择。

最后我实现的截图:

嗯,具体应用地址先不上了= =|| 网站还没对外公测……还很简陋。。

Read More

这些话一直憋着,没有写出来,现在工作终于板上订钉了,想想是可以说出来了。

这次换工作,曲折蛮大的,直奔主题吧,真人去面过的公司大概下面几家。

新浪微博,人人,果壳,联众,还有现在我在的公司,电话一面过的,网易,百度,约了面试,没有去成的,豆瓣,360。

唔,不多,也不少了。大部分还是通过各位好心的友邻,同事,leader,朋友才获得的面试机会,如果没有你们,可能连约都约不到。无论如何,始终要感谢你们。

先说面试心得吧,前端的职位,无论是一面,还是笔试,还是和技术主管直接聊。无非就这么是几个大的点,js方面,原型链,作用域链,闭包,类的各种写法,正则,HTML5,CSS3,代码组织优化,维护性,效率性能,多人协作,简单算法,经验和兼容性方面的一些奇婬技巧。

面到后来基本也都麻木了,不过没办法,再复杂的,我也没到那个级别,比如协议级的,比如后端的一些东西,比如架构方面,数据结构,高级的一些算法,不得不说前端要问你什么,你都需要懂一点,知识面必须要广,不能害怕,淡定回答就OK。。。

有的时候问到一个没听过的名词,不要紧张,让面试你的人稍作提醒,其实那东西就是你每天都在接触的。有的时候让你写一段具体的程序,也别紧张,准备几张草稿纸,先设计,后动笔【coding】,不要慌,就可以了。

唔。其他的吧,真的就没什么了,工作经验2-3年,我这个阶段,能接触到的东西和可以做的东西,也就是这些,再深,真的可能还要再修炼2年了。

唯一庆幸的是,上面那些公司大部分技术面我还都算OK,可以说算当场就通过了,这1年在淘宝没有白锻炼。难过的是,某些公司吧,要求学历,或者要求高工作年限,造成了最后无缘。。不过也没办法,谁让咱不是本科呢嘿。

嗯。。说到最后,说说我去的那家公司吧,可能我的选择会让一些我的朋友和同事感到吃惊,最后我决定还是投身到一家创业型公司里去,公司名字呢,活跃传媒。呵,很多人没听说过,当然,我自己之前也不知道,缘分吧,具体细节不说了,在看了公司的产品,人,之后,双方也都很快做了决定。

我想法很简单,这里有大把大把的东西可以让我自己充分做主,这里的团队气氛和我的性格也很吻合,大家都有一股子拼命三郎的工作态度,然后待遇还过的去,不比那些所谓大名气公司少,甚至还多那么一点点,具体是做什么产品嘛,你们早晚会知道的。。

那还等什么啊,我这个人本来就古怪,生活么。开心就好,工作么,当然选一个自己心里所需的地方,未来的路还很长,当下觉得好,那就是好。

蛮期待下周一的新同事,新产品,新公司的,其实是蛮期待自己下个半年的表现,憋了很久的一股劲,终于可以释放了,不知道有没有人有我的感觉。总之,我现在一点不后悔这个选择。

噢,也对,我也是个从来不会后悔自己决定的怪物。。

希望以后一切顺利!借老陆一句话,路走对了,就不怕远。


from 小爝 的最新日记: http://www.douban.com/note/162794441/

Read More

哈哈,找到我了么,在离职前一周,团队组织了一次集体大头照,最后留下了这么一张颇具纪念意义的照片,现在看看,心里却有种说不出的滋味。

嗯,正如标题所说,又要一个新的开始了,在杭州为期一年的旅程即将在明天划上一个句号,看着房间里打好的大包小包行李,真的是百感交集,这一年付出的很多,获得的也很多,不管怎样,这一年的经历会随着我一路继续前行,周五的周会上大家喝了很多酒,说了许多话,有该说的有不该说的,但是大家却真的是都发自内心的,我觉得很激动,在听了几个外包同学的困扰之后,我觉得他们的问题很多也是我的问题,非常有共鸣,大家热烈的讨论之后祝我回北京一路顺风之类,我虽然表面上感觉很淡定,其实内心真的属于翻江倒海。

这是一群热爱自己工作,并不断每天想着如何提高自己的,真正的技术者,每个人都在自己的路上坚持努力,想成为一个什么样的人,也许在每个人的心里都早已做好了决定,我也是。

希望这次回北京,能尽快把工作,租房子的问题解决掉,顺利平和过渡,也希望这些兄弟们,继续前行吧。

嘿,后天启程,杭州再见。

Read More