【Python】基于Flask与百度地图的位置搜索应用技术解析

查看 51|回复 6
作者:Cristy   
基于Flask与百度地图的位置搜索应用技术解析
项目背景:原来暑期兼职了一个地推的任务,让我搜集周边商铺的电话用于电销。我懒得跑,于是搜罗了高德、百度的两个api做了个小程序爬了我们当时周边的商铺电话,躲在空调房里爽了几天。最近翻找到,并整理成falsk网页服务版本发布,以供学习交流。
以下内容包含大部分AI读取代码后整理的内容。仅供学习参考
一、项目概述
这是一个整合了Flask后端框架和百度地图API的位置搜索应用,实现了以下核心功能:
  • 可视化地图位置选择
  • 地址与经纬度互转(地理编码)
  • 附近兴趣点搜索(POI搜索)
  • 搜索结果表格展示
  • 数据导出功能

    二、使用说明
    1. 环境配置与启动
    [ol]

  • 安装依赖
    pip install flask requests

  • 获取API密钥
  • 访问百度地图开放平台
  • 创建应用,获取AK(API密钥)

  • 配置密钥
    # 在app.py中添加你的API密钥
    BAIDU_MAP_API_KEY = '你的百度地图API密钥'

  • 文件目录
    [/ol]
    /app.py
    /templates/index.html
  • 启动应用
    python app.py
  • 应用将在 http://localhost:8989 启动

    [/ol]
    2. 基本操作流程
    [ol]

  • 位置选择
  • 方式一:直接点击地图获取位置
  • 方式二:在搜索框输入地址 → 点击"地图内部搜索"
  • 经纬度和地址将自动填充

  • 搜索设置
  • 在"搜索关键词"输入兴趣点类型(如:餐厅、酒店、学校)
  • 设置搜索半径(默认1000米)

  • 执行搜索
  • 点击"搜索"按钮获取附近地点
  • 搜索结果将显示在下方表格中

  • 结果导出
  • 点击"导出表格"按钮
  • 系统将下载CSV格式的搜索结果文件

    [/ol]
    3. 功能演示

    三、技术实现详解
    1. 后端架构(Python Flask)
    核心路由
  • /:渲染前端页面
  • /geocode:地址→经纬度转换
  • /search_nearby:附近兴趣点搜索

    百度API集成
    # 地理编码API调用
    def geocode():
        address = request.args.get('address', '')
        url = 'http://api.map.baidu.com/geocoding/v3/'
        params = {'address': address, 'ak': BAIDU_MAP_API_KEY}
        response = requests.get(url, params=params)
        return jsonify(response.json())
    2. 前端交互设计
    地图功能
    // 地图初始化
    var map = new BMap.Map("mapContainer");
    map.centerAndZoom(new BMap.Point(116.404, 39.915), 15);
    // 点击事件处理
    map.addEventListener("click", function(e) {
        marker.setPosition(e.point);
        geoc.getLocation(e.point, updateAddress);
    });
    搜索功能
    function searchNearby() {
        const location = `${lat},${lng}`;
        fetch(`/search_nearby?location=${location}&query=${query}&radius=${radius}`)
            .then(response => response.json())
            .then(showResults);
    }
    3. 数据展示与导出
    表格渲染
    function showResults(data) {
        const tableBody = document.querySelector("#resultsTable tbody");
        data.results.forEach(item => {
            let row = tableBody.insertRow();
            row.insertCell(0).textContent = item.name || "";
            // ...其他字段
        });
    }
    CSV导出
    function exportTable() {
        const rows = document.querySelectorAll("#resultsTable tr");
        let csvContent = "名称,地址,区域,城市,省份,电话,纬度,经度\n";
        rows.forEach(row => {
            let cols = row.querySelectorAll("td, th");
            let line = Array.from(cols).map(cell =>
                `"${cell.textContent.replace(/"/g, '""')}"`).join(",");
            csvContent += line + "\n";
        });
        // 创建下载链接
        const blob = new Blob(["\uFEFF" + csvContent], {type: "text/csv;charset=utf-8;"});
        const link = document.createElement("a");
        link.href = URL.createObjectURL(blob);
        link.download = "位置搜索结果.csv";
        link.click();
    }
    四、关键技术亮点
    [ol]

  • 安全数据访问
    function getNestedProperty(obj, path, defaultValue = "") {
       return path.split('.').reduce((o, p) =>
           (o && o

    ? o

    : defaultValue), obj);
    }


  • 中文编码处理
  • 添加UTF-8 BOM(\uFEFF)确保Excel正确打开中文CSV
  • 引号转义处理:text.replace(/"/g, '""')

  • 地图交互优化
  • 支持点击选点
  • 支持地址搜索
  • 实时坐标显示

    [/ol]
    五、使用场景示例
    [ol]

  • 商业分析
  • 搜索某区域内的竞争店铺分布
  • 导出结果进行竞品分析

  • 旅行规划
  • 查找酒店附近的餐厅和景点
  • 评估住宿位置的便利性

  • 市场调研
  • 统计特定区域内某类商铺的数量
  • 分析不同区域的商业密度

    [/ol]
    六、使用步骤截图
    [ol]
  • 修改代码中的key
  • 安装依赖并启动脚本
    pip install flask
    python app.py
  • 使用浏览器打开网址 http://127.0.0.1:8989
  • 搜索区域并在地图选择具体的点位
  • 输入关键词和半径范围,点击搜索
  • 下拉至最后,查看结果和导出

    [/ol]
    七、下载地址
    https://wwcy.lanzouq.com/b01yo9lzne
    密码:52pj

    地图, 位置

  • 1331233   

    研究一会,在研究研究
    chenning1425   

    感谢分享,思路挺好,让代码服务于人
    shengnan719   

    感谢分享,学习学习
    sunson1097   

    感谢分享,研究一下
    sdwlzjj   

    感谢分享
    94MJ   

    感谢分享,用得上
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部