一个网站的诞生08-- 在Web App嵌入地图

LBS-Location Based Service,基于位置的服务。如果要在Web App嵌入地图,差不多可以做成LBS了。zuijiancanting.com的设计理念,是把Top餐厅放在地图上,那么当你到某个地方逛逛,或者有约会,拖拉一下地图就可以找到合适的餐厅。

提供地图API服务的公司很多,国外有GoogleMap,OpenStreetMap,国内有百度地图,腾讯地图,高德地图。GoogleMap由于某些原因不能正常使用,不在选择之列。我最先考虑的是OpenStreetMap,因为除了GoogleMap之外它最有美感,www.zillow.com也是用它,地图效果很赞,在这个一切看脸的年代,外观太重要了,支持OpenSteetMap的开发库也很多,但在试验后放弃了,OpenStreetMap更适合国外的城市,中国的地图不够详细。国内的三家,百度地图,腾讯地图,高德地图,在美感上都差不多。前两家体量大,不担心产品有政策性的突变。百度地图的第三方API比较多,一些预想中的功能在第三方API都找到了,更有优势。美感,持久可用性,第三方API丰富程度,从这三个方面看,百度地图是国内最好的。第三方API和开发者的数量,是有复利效果的,一旦过了门槛其他家很难赶上。

前文说了,zuijiacanting.com的后端是tornado。百度地图嵌入页面,它的代码是javascript的,写在前端的html里。

先在一个web页面里嵌入百度地图。创建文件x.html,内容如下:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>

<title>Hello</title>

<style type="text/css">

body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}

</style>

</head>

<body>

<div id="allmap"></div>

</body>

</html>

<script type="text/javascript">

/** 百度地图API功能 **/

var map = new BMap.Map("allmap");            // 创建Map实例

var point = new BMap.Point(116.404, 39.915); // 创建点坐标

map.centerAndZoom(point,15);                 // 初始化地图,设置中心点坐标和地图级别。

var marker1 = new BMap.Marker(new BMap.Point(116.384, 39.925));  // 创建标注

map.addOverlay(marker1);              // 将标注添加到地图中

</script>

这个例子是百度Demo里小改来的。使用百度API之前,需要先在它家的官网注册一下,注册后会得到一个24位字符串的密钥,用它替换上文的"您的密钥"。在这个html里,先定义一个名字是"allmap"的div元素,然后在javascript创建Map,创建坐标,设置map的中心和缩放等级,然后在地图上创建一个标注Marker,所谓标注就是一个指示地点的尖底圆头图标。

在zuijiacanting.com,假如拖动地图的话,前端将计算出新地图所在矩形经纬度,然后根据经纬度的数值,用ajax调用tornado后端,获取矩形经纬度之内的Top餐厅的信息,包括餐厅的经纬度,餐厅的名字,餐厅地址等等,把餐厅绘制到当前地图上。当鼠标悬停在餐厅上的时候,地图会弹出一个小框显示餐厅名,点击餐厅,浏览器会打开大众点评网上的餐厅页面。如果鼠标悬停在右侧的餐厅名,那么左侧的地图会在餐厅的地理位置上弹出小框,显示餐厅名。

至于用ajax调用tornado后端,用jquery就行。比如,在tornado后端创建一个url路由"/getshopmarkers",然后实现一个post方法,这个方法根据矩形经纬度从数据库查询餐厅信息,然后用json返回查询结果,那么,前端用ajax调用的方式就是:

var posting = $.post("/getshopmarkers",

{"lng_min":bssw.lng,"lng_max":bsne.lng,"lat_min":bssw.lat, "lat_max":bsne.lat,

"_xsrf":get_cookie("_xsrf")});

posting.done(function(data){

var dataObj = eval("("+data+")");

var allshopnum = dataObj[0]["allshopnum"];

dataObj.shift();

//生成marker

for(var x in dataObj){

lng = parseFloat(dataObj[x]["lng"]);

lat = parseFloat(dataObj[x]["lat"]);

var p = new BMap.Point(lng, lat);

...

}

$("#mp_content").html(newcontent);

});

posting.fail(function(){

alert("Error: can not update markers.");

});

百度地图的用法简化到最基本的东东就是这两段代码,通常来说前端同学使用百度地图没太大难度,主要是花时间熟悉API,然后设计如何用这些API构造出足够好用的特效,官方API只能保证功能可用,但不能保证美感和酷炫。在非常罕见的情况下,会遇到官方API的bug,在百度地图不提供源代码,只能绕过去或者改设计。对前端来说,设计无止境,美工无止境,速度优化无止境,浏览器兼容性无止境。千里执行,始于足下。

一个网站的诞生08-- 在Web App嵌入地图,布布扣,bubuko.com

时间: 2024-08-05 11:15:17

一个网站的诞生08-- 在Web App嵌入地图的相关文章

一个网站的诞生07-- Tornado Web Server

用Spider抓取数据,然后再做各种处理,然后放到web页面供大家使用. 那么,就需要一个Web Server. 几乎每种语言都有一大堆Web Server开发框架,Python也不例外,比如这里http://www.zhihu.com/question/20706333.廖雪峰同学还有个python的教程http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0014023080708

一个网站的诞生09--自动监控

部署Web App,需要买一个域名,我推荐http://www.namecheap.com/,用信用卡或者paypal付款,一年10刀. 如果需要VPS,买Linode.com的,它家新推出每月10刀的主机,性能绝佳,如果选择东京的机房,从大陆访问很快,用海外的主机不需要备案,这是最大的卖点. 网站的tornado代码运行了,网站可以访问了.有时候网站会因为各种原因崩溃,比如被攻击,代码bug,流量太大等等. 这时候就需要一个自动监控脚本.这个脚本监控网站的tornado进程,每隔几秒检测一次进

一个网站的诞生05--如何把网站做到估值过亿

网站的意义,在于创造对用户有价值的东西,估值是网站意义的一个衡量指标,提升估值的手段,也就等价于把网站做得更有用. 如何计算一个网站的估值?国际标准是每个活跃用户的价值是40刀左右,Whatsapp卖了190亿刀,它有4.5亿活跃用户.中国略有差别,微信的估值是40亿~50亿刀,有3亿用户,但中国的用户商业价值不够高,人均GDP太低,所以每个活跃用户的价值是10-15刀,也就是RMB60-90元.如果网站(包括同名App)要想估值过亿,要有一百万的活跃用户.另一种估算方式是,行业第二名的估值是第

一个网站的诞生01--缘由

大概在半年前,我觉得需要做一个网站,寻找新奇有趣的餐厅. 喜欢美食的人,在中意餐厅吃久了,总想找新餐厅换换口味,试试新菜和新的食材. 寻找新餐厅并不容易,甚至是艰难.由于众所周知的原因,网上流传的餐厅文,美食文,常常不可信,编排越精美,越可能是软广---大家天天都很忙,很少有闲心做这么精美的文宣.我跟这些美食文找过,失望大于希望,成功率不到一半.而且,魔都太大,打听到的餐厅,总要去试吃一下,来来回回总跑上几个小时吧?时间很宝贵,这么做太不划算了! 上海的餐厅大众点评网收集的最齐全,如果我把它上面

一个网站的诞生02--用Scrapy抓取数据

如果想抓数据,就需要有爬虫程序,业内叫crawler或者spider. 有各种语言版本的开源爬虫,c++, Java,  php,在github上搜一下,以"spider c++"为关键字,有245个开源爬虫,以"spider java"为关键字,有48个.那python呢?156个. 爬虫技术在业界已经很成熟了,有很多开源框架,在它们的帮助下写爬虫可以很快,几个小时就能写一个不错的东东用.爬虫技术也会很复杂,如果要做分布式抓取和全文检索,一般使用Nutch. 最有

一个网站的诞生10--自动化部署

所谓自动部署就是说,如果用10台机器跑tornado程序提供Web服务,它们上面的代码都是一样的,这也叫生产环境.在公司写新代码,写好了,测试通过,这叫开发环境.然后执行自动部署程序,它把新代码提交到版本管理服务器,然后连上生产环境的10台服务器,让它们更新代码,再重启tornado程序,新代码就上线了,用户看到的就是新发布的网站. 自动部署的关键是两个东西,一个是版本服务器,一个是远程操作. 推荐用git版本服务器,推荐寥雪峰的git教程,写得非常清晰,是目前为止我见到的最容易入手的,链接在这

一个网站的诞生06-- ORM

网站上的数据,存在数据库里.一般用Mysql,也有用sqlite,Postgre.操作数据库要会SQL语言,这个有点麻烦,常常需要查手册.此外,每家数据库在实现SQL语言的时候,常常会加料,增加一些自己独有的东西.而且,SQL语言不是面向对象/基于对象,很多抽象更高的东西不能使用. 于是,ORM就出现了. ORM是Object Relation Model,也就是 对象关系映射.简而言之,ORM将将数据库的记录表示成对象.选择一个好的ORM,由它的层面解决数据库和SQL语言问题,可以很开心.程序

一个网站的诞生04--抓取一个餐厅的某个月的全部评论

第一个Spider是抓上海的城市id,顺带抓它的下一级行政区id. 第二个Spider是抓上海的Top一万家餐厅的Shopid. 本文是第三个Spider,根据一个餐厅的Shopid,抓取它在某个月内的全部评论. 三个Spider的累加效果,就是抓取任意一个城市的TopN家餐厅的全部评论.第三个Spider修改一下,还可以做到只抓取某天的评论,只抓取某人的评论,从抓取的角度看就全齐了. 经过前两次的spider热身,这次做个复杂点的. URLhttp://www.dianping.com/sho

一个网站的诞生03--抓取评论数最多的一万家餐厅

在大众点评网上,有很多种方式对餐厅进行排序,比如http://www.dianping.com/search/category/1/10/o10,是上海全市按照评论总数最多对餐厅进行排序,下面有50个分页,也就是上海历年累计评论综述最多的750家餐厅.但只有750家,少了点.上海有18个区,逐区点击的话,每区都会显示前750家餐厅,比如这个http://www.dianping.com/search/category/1/10/r802o10,是浦东新区八佰伴地段的前750家.上海现在有十万家餐