php - 尝试从 mySQL 数据库中包含的城市创建经纬度数组

标签 php javascript mysql google-maps-api-3

我正在尝试使用 Google Maps API 创建一个纬度和经度数组(来自城市的 mySQL 数据库),我可以将其用作标记。

我不确定如何在 PHP 中动态提取城市并在 javascript 中对它们进行地理编码。

这就是我目前所拥有的。我知道地理编码器行不正确,但我不确定如何使用它。任何建议或解决方案都会非常有帮助。

  var geocoder = google.maps.Geocoder();

    var markers = [

    <?php

    //orgnize fans by city
    $query = "SELECT city, state, COUNT(*) fans FROM users GROUP BY city ORDER BY fans DESC";
    $result = mysql_query($query) or die(mysql_error());
    while($row = mysql_fetch_array($result)){

    //pulls the city, state code from the database and stores it as a string in $address
    $address = '"' . $row['city'] . ", " . $row['state'] . '"';


       //  "$row['city'].", ".$row['state']";


        geocoder.getLatLng($address, function(point) {
                           $latitude = point.y;
                           $longitude = point.x;
        });
        echo "{ lat: \"".$latitude.", lng: ".$longitude.", name: "'"'.$row['city'].", ".$row['state'].'"'"},\n ";
        echo "<br/>";
    }

    ?>

    ];

    //var locationNameArray = ['Portland','Seattle','Los Angeles','San Diego','Las Vegas'];

    // Create the markers ad infowindows.
    for (index in markers) addMarker(markers[index]);
    function addMarker(data) {
        // Create the marker
        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(data.lat, data.lng),
            map: map,
            title: data.name
        });

最佳答案

在您的帖子中,您将 PHP 与 Javascript 混合使用。 您不能在 PHP 标记内使用 Javascript 函数 geocoder.getLatLng

要用 lat、lng 信息填充数据库,我建议使用 PHP 地理编码。 所以你需要一张城市表。

Table city:

id_city
name
state
lat
lng

而用户表只有一个指向id_city的外键:

Table users:

id_user
fi_city
...

这里是一个简单粗暴的示例,说明如何使用 PHP 从 Google 地理编码器获取经纬度信息:

$address = urlencode('New York');
$googleApi = 'http://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=false';

$json = file_get_contents(sprintf($googleApi, $address));

$resultObject = json_decode($json);

$location = $resultObject->results[0]->geometry->location;

$lat = $location->lat;
$lng = $location->lng;

echo 'Lat: '.$lat.', Lng: '.$lng;

没有错误检查,但我希望你能明白我的意思。 有了这个结果,您可以更新您的数据库。 我希望您知道如何连接多个表以从用户和城市表中获取结果。

关于php - 尝试从 mySQL 数据库中包含的城市创建经纬度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14613525/

相关文章:

php - laravel 从 3 个表中选择所有行

php - Oracle中 "mysql_real_escape_string"的等效命令是什么?

php - 使用 PHP SplFileObject 和 READ_CSV 标志时如何删除多余的行?

javascript - 如何创建一个正则表达式来选择不以 '#' 或 '.' 开头的单词

php - 如何将逗号分隔的字符串与另一个逗号分隔的字符串匹配

php - º,又名阳性序数指示符,破坏 PHP 中的 XML 节点创建

javascript - jQuery 隐藏 div,删除背景并在单击时更改页面宽度

javascript - 为什么 Angular 中的 SVG 元素的模板渲染出现错误

python - 使用lambda python将文件上传到s3后用表单数据更新mysql

mysql - 如果不存在则创建表返回 "the table doesn´t exist"