Python Web开发:嵌入百度地图

来自CloudWiki
跳转至: 导航搜索

背景

本章主要构建应用contactApp

分为两个子页面:

  • 欢迎咨询
  • 加入恒达


实训步骤

配置路由

contactApp/urls.py:

from django.urls import path
from . import views

app_name = 'contactApp'

urlpatterns = [
    path('contact/', views.contact, name='contact'),  # 欢迎咨询
    path('recruit/', views.recruit, name='recruit'),    # 加入恒达
]

编写视图函数

contactApp/views.py:

from django.shortcuts import render
from django.shortcuts import HttpResponse


# Create your views here.
def contact(request):
    return render(request, 'contact.html', {
        'active_menu': 'employ',
        'sub_menu': 'contact',
    })

编写网页模板

在contactApp下新建文件夹templates,新建contact.html。

contact内容分为两列,左列为联系信息,又列用于放置地图。


{% extends "base.html" %}
{% load staticfiles %}

{% block title %}
人才招聘
{% endblock %}

{% block content %}
<link href="{% static 'css/contact.css' %}" rel="stylesheet">

<!-- 广告横幅 -->
<div class="container-fluid">
    <div class="row">
        <img class="img-responsive model-img" src="{% static 'img/contact.jpg' %}">
    </div>
</div>
<!-- 主体内容 -->
<div class="container">
    <div class="row row-3">
        <!-- 侧边导航栏 -->
        <div class="col-md-3">
            <div class="model-title">
                人才招聘
            </div>
            <div class="model-list">
                <ul class="list-group">
                    <li class="list-group-item" id="contact">
                        <a href="{% url 'contactApp:contact' %}">欢迎咨询</a>
                    </li>
                    <li class="list-group-item" id="recruit">
                        <a href="{% url 'contactApp:recruit' %}">加入云协</a>
                    </li>
                </ul>
            </div>
        </div>
        <!-- 说明文字和图片 -->
        <div class="col-md-9">
            <div class="model-details-title">
                欢迎咨询
            </div>
            <div class="col-md-4">
                <div class="contact-left">
                    <h1>
                        <strong>云计算科技与艺术协会</strong>
                        <span>Cloud computing technology and Arts Association </span>
                    </h1>
                    <ul>
                        <li><span>纳新咨询一(qq):</span>111-111111</li>
                        <li><span>纳新咨询二(qq):</span>222-222222</li>
                        <li><span>纳新qq群:</span>0111-1111111</li>
                        <li><span>纳新微信群:</span>0222-2222222</li>
                        <li><span>地址:</span>济南市旅游路4516号</li>
                        <li><span>邮编:</span>250000</li>
                        <li><span>网址:</span>
                            <a href="http:www.openbrains.net">http:www.openbrains.net</a>
                        </li>
                    </ul>
                </div>
            </div>

            <div class="col-md-8" style="margin-top: 20px;">
                
               
            </div>
        </div>
    </div>
    
</div>

{% endblock %}

css文件夹中新建contact.css的样式文件:

/* 欢迎咨询页面样式 */
.contact-left h1 strong {
	display: block;
	color: #777;
	font-size: 1.6rem;
  }
  .contact-left h1 span {
	display: block;
	font-size: 1.2rem;
	font-weight: 500;
	margin-top: 10px;
  }
  .contact-left ul {
	padding: 0;
  }
  .contact-left li {
	display: block;
	width: 100%;
	padding: 0.5rem;
	color: #777;
	margin-top: 17px;
  }
  .contact-left li a {
	color: #777;
  }

创建地图

打开网页:http://api.map.baidu.com/lbsapi/createmap/index.html

按照提示 创建社团地图:

Python21052401.png

地图代码获取

创建地图后,点击“获取代码”以后就会自动生成地图调用代码。

地图生成工具基于百度地图JS api v2.0版本开发,为了正常使用百度地图API服务,请按照网站提示在此段代码中加入您的密匙。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="keywords" content="百度地图,百度地图API,百度地图自定义工具,百度地图所见即所得工具" />
    <meta name="description" content="百度地图API自定义地图,帮助用户在可视化操作下生成百度地图" />
    <title>百度地图API自定义地图</title>
    <!--引用百度地图API-->
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密匙"></script>
  </head>
  
  <body>
    <!--百度地图容器-->
    <div style="width:700px;height:550px;border:#ccc solid 1px;font-size:12px" id="map"></div>
    <p style="color:red;font-weight:600">地图生成工具基于百度地图JS api v2.0版本开发,使用请申请密匙。
      <a href="http://developer.baidu.com/map/index.php?title=jspopular/guide/introduction" style="color:#2f83c7" target="_blank">了解如何申请密匙</a>
      <a href="http://lbsyun.baidu.com/apiconsole/key?application=key" style="color:#2f83c7" target="_blank">申请密匙</a>
    </p>
  </body>
  <script type="text/javascript">
    //创建和初始化地图函数:
    function initMap(){
      createMap();//创建地图
      setMapEvent();//设置地图事件
      addMapControl();//向地图添加控件
      addMapOverlay();//向地图添加覆盖物
    }
    function createMap(){ 
      map = new BMap.Map("map"); 
      map.centerAndZoom(new BMap.Point(117.276901,36.639282),17);
    }
    function setMapEvent(){
      map.enableScrollWheelZoom();
      map.enableKeyboard();
      map.enableDragging();
      map.enableDoubleClickZoom()
    }
    function addClickHandler(target,window){
      target.addEventListener("click",function(){
        target.openInfoWindow(window);
      });
    }
    function addMapOverlay(){
      var markers = [
        {content:"山东商职云计算协会",title:"山东商职云计算协会",imageOffset: {width:0,height:3},position:{lat:36.639199,lng:117.277372}}
      ];
      for(var index = 0; index < markers.length; index++ ){
        var point = new BMap.Point(markers[index].position.lng,markers[index].position.lat);
        var marker = new BMap.Marker(point,{icon:new BMap.Icon("http://api.map.baidu.com/lbsapi/createmap/images/icon.png",new BMap.Size(20,25),{
          imageOffset: new BMap.Size(markers[index].imageOffset.width,markers[index].imageOffset.height)
        })});
        var label = new BMap.Label(markers[index].title,{offset: new BMap.Size(25,5)});
        var opts = {
          width: 200,
          title: markers[index].title,
          enableMessage: false
        };
        var infoWindow = new BMap.InfoWindow(markers[index].content,opts);
        marker.setLabel(label);
        addClickHandler(marker,infoWindow);
        map.addOverlay(marker);
      };
    }
    //向地图添加控件
    function addMapControl(){
      var scaleControl = new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT});
      scaleControl.setUnit(BMAP_UNIT_IMPERIAL);
      map.addControl(scaleControl);
      var navControl = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE});
      map.addControl(navControl);
      var overviewControl = new BMap.OverviewMapControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,isOpen:true});
      map.addControl(overviewControl);
    }
    var map;
      initMap();
  </script>
</html>

地图代码集成

将如下代码插入网页模板contact.html中(link标签后面)

   <!--引用百度地图API-->
   <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密匙"></script>

将如下代码加入右侧的盒子容器中:


                
                <!--百度地图容器-->
                <div style="width:500px;height:400px;border:#ccc solid 1px;font-size:12px" id="map"></div>
            

最后将百度代码中的<script>脚本文件全部复制到contact.html文件中:

<script type="text/javascript">
    //创建和初始化地图函数:
    function initMap(){
      createMap();//创建地图
      setMapEvent();//设置地图事件
      addMapControl();//向地图添加控件
      addMapOverlay();//向地图添加覆盖物
    }
    function createMap(){ 
      map = new BMap.Map("map"); 
      map.centerAndZoom(new BMap.Point(117.276901,36.639282),17);
    }
    function setMapEvent(){
      map.enableScrollWheelZoom();
      map.enableKeyboard();
      map.enableDragging();
      map.enableDoubleClickZoom()
    }
    function addClickHandler(target,window){
      target.addEventListener("click",function(){
        target.openInfoWindow(window);
      });
    }
    function addMapOverlay(){
      var markers = [
        {content:"山东商职云计算协会",title:"山东商职云计算协会",imageOffset: {width:0,height:3},position:{lat:36.639199,lng:117.277372}}
      ];
      for(var index = 0; index < markers.length; index++ ){
        var point = new BMap.Point(markers[index].position.lng,markers[index].position.lat);
        var marker = new BMap.Marker(point,{icon:new BMap.Icon("http://api.map.baidu.com/lbsapi/createmap/images/icon.png",new BMap.Size(20,25),{
          imageOffset: new BMap.Size(markers[index].imageOffset.width,markers[index].imageOffset.height)
        })});
        var label = new BMap.Label(markers[index].title,{offset: new BMap.Size(25,5)});
        var opts = {
          width: 200,
          title: markers[index].title,
          enableMessage: false
        };
        var infoWindow = new BMap.InfoWindow(markers[index].content,opts);
        marker.setLabel(label);
        addClickHandler(marker,infoWindow);
        map.addOverlay(marker);
      };
    }
    //向地图添加控件
    function addMapControl(){
      var scaleControl = new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT});
      scaleControl.setUnit(BMAP_UNIT_IMPERIAL);
      map.addControl(scaleControl);
      var navControl = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE});
      map.addControl(navControl);
      var overviewControl = new BMap.OverviewMapControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,isOpen:true});
      map.addControl(overviewControl);
    }
    var map;
      initMap();
  </script>

效果图

重启服务器 python manage.py runserver

查看效果:

Python21052402.png