一个PHP脚本,通过curl先获取百度地图api生成的经纬度,然后改数据库内的数据。

今天写一个PHP脚本,目的是让先从数据库拿取响应的地区名  然后通过幼儿园的名字来查询准确的经纬度。此间每次生成的经纬度进入数据库内的更改。

7万多条数据用时一个小时执行完毕。 不得不说 用curl结果还是比file_getcoents快的多。话不多说直接上代码

<?php
date_default_timezone_set(‘Asia/Chongqing‘);
header(‘content-type:text/html; charset=utf-8‘);
ini_set(‘display_errors‘, 1);
error_reporting(E_ALL);
set_time_limit(0);

/**
 * @author  gf
 * 获取经纬度修改数据
 * Class Importkindgarten
 */
class Importkindgarten
{

    private $dbhost = ‘127.0.0.1‘;
    private $dbuser = ‘root‘;
    private $dbpw = ‘123‘;
    private $dbname = ‘mypolyguide‘;

    private $dbcharset = ‘utf8‘;
    private $write_db = null;

    public function __construct()
    {
        $this->db_write_link();
    }

    /**
     * 连接数据库
     * @return null|resource
     */
    public function db_write_link()
    {
        $this->write_db = mysql_connect($this->dbhost, $this->dbuser, $this->dbpw);
        if (!$this->write_db) {
            die(‘Could not connect: ‘ . mysql_error());
        }
        mysql_query(‘SET character_set_connection=‘ . $this->dbcharset . ‘, character_set_results=‘ . $this->dbcharset . ‘, character_set_client=binary‘, $this->write_db);
        mysql_query(‘SET names utf8‘, $this->write_db);
        mysql_select_db($this->dbname, $this->write_db);

        return $this->write_db;
    }

    /**
     * 执行死循环进行查询修改
     */
    public function roundKgList()
    {
        $i = 0;
        while(true)
        {
            $res = $this->getKgList();
            if(empty($res[‘kgdata‘]))
            {
                break;
            }
            else
            {
                if(!empty($res[‘kgdata‘])) foreach($res[‘kgdata‘] as $k1=>$v1)
                {
                    $info = $this->getAreanameById($v1[‘provinceId‘]);
                    $area = $info[0];
                    $address=$v1[‘kgName‘];
                    $returnArr = $this->curlGetWeb($area,$address);
                    $kgPosition = implode(‘,‘,$returnArr);
                    $updatesql = "UPDATE kindgartenbak SET lng=‘{$returnArr[‘lng‘]}‘, lat=‘{$returnArr[‘lat‘]}‘, kgPosition=‘{$kgPosition}‘,runflag=‘1‘ WHERE kgId={$v1[‘kgId‘]}";
                    mysql_query($updatesql, $this->write_db);
                    $i++;
                }
                else
                {
                    break;
                }
            }
        }
    }

    /**
     * 获取列表
     * @return mixed
     */
    public function getKgList()
    {
        $sql = ‘SELECT kgId,provinceId,kgName FROM kindgartenbak WHERE deleteFlag = 1 AND status = 2 AND runflag = 0 ORDER BY kgId DESC LIMIT 100‘;
        $query = mysql_query($sql, $this->write_db);
        while($result = mysql_fetch_array($query,MYSQL_ASSOC))
        {
            $res[‘kgdata‘][] = $result;
        }
        return $res;
    }

    /**
     * 拿取城市
     * @return mixed
     */
    public function getAreanameById($provinceId)
    {
        $sql = ‘SELECT areaname FROM area WHERE id =‘.$provinceId;
        $query = mysql_query($sql, $this->write_db);
        $info = mysql_fetch_row($query);
        if(!empty($info))
        {
            return $info;
        }
        else
        {
            return false;
        }
    }

    /**
     * 从百度地图api以curl获取经纬度
     * 数组形式返回
     */
    public function curlGetWeb($area,$address)
    {
        $Url="http://api.map.baidu.com/geocoder?address=".trim($area).trim($address)."&output=json&key=96980ac7cf166499cbbcc946687fb414";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $Url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出
        $result=curl_exec($ch);
        curl_close($ch);
        $infolist=json_decode($result);
        $array=array();
        if(isset($infolist->result->location) && !empty($infolist->result->location)){
            $array=array(
                ‘lng‘=>$infolist->result->location->lng,
                ‘lat‘=>$infolist->result->location->lat,
            );
            return $array;
        }
        else
        {
            return false;
        }
    }
}

$start_date = date(‘Y-m-d H:i:s‘);
$start = microtime(true);
$db = new Importkindgarten();
$i = $db->roundKgList();
$end = microtime(true);
echo ‘重置经纬度:‘.$start_date.‘----用时--‘.($end-$start).‘----共更新(‘.$i.‘)条‘;
?>
时间: 2024-08-02 02:45:40

一个PHP脚本,通过curl先获取百度地图api生成的经纬度,然后改数据库内的数据。的相关文章

百度地图API,根据经纬度实现车辆移动轨迹绘制

百度地图,实现车辆轨迹绘制 实现思路: 1.根据经纬度实现车辆轨迹绘制 2.使用百度地图API的两个覆盖物实现,Polyline(折线)绘制轨迹,Marker(图标)绘制小车图标 3.将每两个坐标间连线起来,形成连贯的轨迹线路 4.生成下一个图标后删除上一个绘制的图标,形成小车移动动画感 5.本例使用的是临近的随机坐标点 6.初学者,欢迎大家交流学习 7.查看实例 代码: [html] view plain copy <!DOCTYPE html> <html> <head&

vue 调用百度地图API生成地图

1.项目根目录下下载百度地图插件 npm install vue-baidu-map –save 2.在首页index.html中引入百度地图: <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=秘钥"></script> 申请密钥地址  :http://api.map.baidu.com/lbsapi/createmap/index.html 3

JAVA地址通过百度地图API转化为经纬度

public static Map getLngAndLat(String address) { Map map = new HashMap(); String url = "http://api.map.baidu.com/geocoder/v2/?address=" + address + "&output=json&ak=你的ak"; //这里需要自己申请百度ak try { String json = loadJSON(url); JSONO

百度地图API使用

1.引用js脚本 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=1510247b4244370cbac3851e4f029d31"></script> 2.html控件 <input type="text" id="suggestId" size="20" data-b

.Net调用百度地图API和LBS API的办法

用webclient来实现POST跟GET获取百度地图API的数据,然后用Newtonsoft.Json来对json处理,得到想要的值. 返回的json结构参考百度地图API官方文档. 代码如下: 1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.SqlClient; 5 using System.Linq; 6 using System.Net; 7 usin

获取百度地图POI数据二(准备搜索关键词)

上篇讲到  想要获取尽可能多的POI数据 需要准备尽可能多的搜索关键字   那么这些关键字如何得来呢?   本人使用的方法是通过一些网站来获取这些关键词   http://poi.mapbar.com/这个网站有全国各地的POI数据  对各个城市的POI数据都有归类  我便是从这个网站上面获取了上海市的各个类别的关键词  比如上海市所有的门牌号码  公路名称  地铁名称等等  下面介绍如何获取这些信息 和获取百度POI数据所用的方法一样,都是通过分析这个网站的url然后替换其中的参数获取不同的数

利用百度地图API,获取经纬度坐标

利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代码下载:http://files.cnblogs.com/zjfree/select_map.rar 利用百度地图API,获取经纬度坐标,布布扣,bubuko.com

从百度地图API接口批量获取地点的经纬度

今天我同事要做一个规划,需要获取Excel中的2000多个地址的经纬度.问我有没有办法,正好我这段时间学习 Python,想了一下,觉得可以.于是就写了一个以下的代码.刚开始觉得差不多两个小时可以搞定,结果花费了半天多,汗...主要是在卡从百度地图 API获取的是坐标总是不对.后来网上查资料才明白,原来从百度API获取的是墨卡托坐标,而实际使用的是WGS84坐标. 1 #!/usr/bin/python 2 #coding:utf-8 3 4 import xlrd 5 import xlwt

根据城市名获取百度地图坐标API

最近项目中百度地图的相关操作当没有坐标的时候默认通过城市名称获取中心点,不过感觉有点慢到网上搜索了一下也没类似的城市对应的价格的数据库.所以自己就建了一个.现公开出来供大家使用接口调用方法 http://2.ibtf.sinaapp.com/map/?city=北京返回json串 {"x":"116.403874","y":"39.914889"} 注1.城市名请用UTF-8编码否则会出错2.如返回 please reload