概述

这篇报告是对一个结对编程项目的总结。我(林萌)和李亚韬同学共同完成了这个项目。

项目的目标是在用户访问Academic Map的时候通过用户的IP来获得用户的地理位置信息,以重新定位地图,将用户所在的地点设为当前显示的中心。这个功能在许多网络地图上都有,比如Bing Map,Google Map等等。经过长时间的调研我们最终找到了两种解决办法。

Method 1

使用W3C Geolocation API, 这个API是由World Wide Web Consortium (W3C)提供的一个标准接口,用于获得用户的地理位置信息(geographical location information)。这个API被广泛的接受,Firefox从version 3.5版开始支持, Google Chrome, Opera 10.6, Internet Explorer 9.0, and Safari 5也都支持这个API。而且他的使用相对简单,只需要嵌入一段JavaScript就行了。

WBS Construction

image

 

Method 2

使用免费的IP-Location数据库。并不是所有的浏览器都支持W3C GeoLocation API, 所以我们希望再增加一套备用方案,当Method 1失败的时候自动启用。我们从MaxMind网站上找到了这么一个免费的IP-Location数据库,实验结果表面数据库精度也还可以,但与W3C的比起来还是有一定差距的。

WBS Construction

image

Method2 所需要的部件与1基本相同,我们用一个自己写的WCF Service来代替W3C Geolocation API,Silverlight的部分基本可以复用。

Cost

Method 1

这个方法最大的困难在于整合JavaScript 和 Silverlight, Cost列表如下:

  Estimate Actual
JavaScript 0.5 hour of Search

Just wiki page is OK

It took 10 minutes to rewrite something similar to the wiki example.

Silverlight 0.5 hour to understand how to work with JS 1 hour for the Buttons and Map 1 hour about using JS, mysterious bugs 1 hour about Buttons and Map, even a Storyboard showing a fading message when failure.

Method 2

这个方法的困难在于快速查找IP-Location表格,Cost列表如下:

  Estimate Actual
IP GeoLocation Service

1 hour to learn how to use service

1 hour to prepare database

1 hour to implement a fast algorithm for database lookup

Fast, WCF service is easy to learn Half a hour for a binary search in database
Silverlight 0.5 hour to re-use buttons and map controller of Method 1 0.5 hour Failure handler and access to server nearly all reuse,fast
 

总的来看,最大的时间开销还是在调研上面,我们花了接近两天的时间来找一个合法的,稳定的,快速的解决方案。

 

结果

从以下几个方面来分析结果:

1.稳定性

程序运行稳定,明确的处理了异常情况。

2.准确性

W3C Geolocation API的准确性无需质疑。免费的IP-Location数据库准确性难以估计,官方的claim是有97%的准确性。

3.可维护性

对于W3C的接口,代码一旦完成就不需要维护了,数据有远程的服务提供。

免费的IP-Location数据库是静态的,需要更新。

4.效率

W3C标准接口飞快无比,一旦失效将启动静态数据库方案。我们使用的Binary Search可以保证时间和空间消耗的平衡。

运行截图(中间五角星的就是用户的坐标,公司的IP出口在Redmond附近)

image

工作截图

image

我对结对编程的看法:

有利有弊。两个人同时工作提高了我们克服困难的勇气。开始的时候苦于找不到合适的IP服务,非常纠结。但后来喝喝茶,扯扯淡突然一下子也就解决了。技术上的困难花点时间都可以解决。不好的地方在于两个人都要挤出时间来,而且中间最好不要插入个人的工作。有个地方亚涛自己加入了代码,我当时不在,结果后来我Merge代码的时候出了些问题,多花了不少时间。

 

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"