【问题标题】:Trying to create an array of latitudes and longitudes from cities contained in a mySQL database尝试从 mySQL 数据库中包含的城市创建纬度和经度数组
【发布时间】:2013-01-14 19:56:25
【问题描述】:

我正在尝试使用 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 从哪里开始?
  • 您真的想在每次从数据库中获取所有城市时对其进行地理编码吗?我会为所有城市做一次,并将经纬度保存在数据库中。也许你从一个开放的数据库中获取经纬度数据。
  • 我想在每次获取城市时对其进行地理编码,因为我希望地图最终为不同的用户显示不同的标记。
  • 如果您每次加载页面时都运行此脚本,您可能会被列入黑名单。每天还有 2500 个请求限制。如果您的查询返回 250 个用户(城市),则地理编码将在 10 人访问您的网站后停止:developers.google.com/maps/documentation/geocoding
  • @user1072337:但城市的位置不会改变。仅仅因为您使用“粉红色独角兽”图标来表示纽约并不意味着它会神奇地移动到南半球,因为另一个用户上面有一只卡其色大象。

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


【解决方案1】:

在您的帖子中,您将 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 地理编码器获取 lat、lng 信息:

$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;

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

【讨论】:

  • 谢谢你。我可以使用 echo 在 javascript 中从这些值中创建一个数组吗?示例:echo "{ lat: ".$lat.", lng: ".$long.", name: ".'"'.$row['city'].", ".$row['state'] .'"'."},";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
相关资源
最近更新 更多