我需要从地址获取纬度和经度

Posted

技术标签:

【中文标题】我需要从地址获取纬度和经度【英文标题】:I need to obtain Latitude and Longitude from an Address 【发布时间】:2020-02-06 03:24:29 【问题描述】:

我是新来的。这是我的第一篇文章,但我多年来一直是读者。

多年来,我一直在使用 html、CSS、JS 和 php,但这已经让我在网上寻求帮助时感到难过。我的问题是,我需要获取传入代码的街道地址的纬度和经度坐标(例如,77 Massachusetts Ave, Cambridge, MA 02139)。

我已经环顾了数周(或数月)并尝试了几个人的建议,这些建议通常是用 JS 或 PHP 编写的。我有一个有效的 Google API 应该可以正常工作(我团队中的其他人已经在 android 中成功使用它,并且它被标记为能够在我们的网站上工作)。我在多个网站上找到了很多示例,但没有一个有效。

我尝试的一切都没有结果。我意识到谷歌对使用 API 的要求是新的,有些示例没有使用,但即使我应用了我的,也没有任何效果。我正在寻找一个干净、现代的例子来说明如何让这个函数工作。

以下是我尝试过的几个示例。它们什么也没产生,我不确定我是否可以通过错误报告来找出原因:

<?php
function getLatLong($address)
if (!is_string($address))die("All Addresses must be passed as a string");
$_url = sprintf('http://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=true&key=[MY_API_KEY]',rawurlencode($address));
if($_result = file_get_contents($_url)) 
$_result = json_decode($_result);
if($_result !== false || !empty($_result->results)) 
return $_result->results[0]->geometry->location;


return false;

$address = "77 Massachusetts Ave, Cambridge, MA 02139";
print_r(getLatLong($address));

$coordinates = getLatLong($address);

$lat = $coordinates['lat'];
$long = $coordinates['long'];
echo $lat.", ".$long;
echo "--";
?>

<?php
$address = '77 Massachusetts Ave, Cambridge, MA 02139'; // Address
$apiKey = '[MY_API_KEY]'; // Google maps now requires an API key.
// Get JSON results from this request
$geo = file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address='.urlencode($address).'&sensor=false&key='.$apiKey);
$geo = json_decode($geo, true); // Convert the JSON to an array

if (isset($geo['status']) && ($geo['status'] == 'OK')) 
  $latitude = $geo['results'][0]['geometry']['location']['lat']; // Latitude
  $longitude = $geo['results'][0]['geometry']['location']['lng']; // Longitude

?>
    <?php
$dlocation = "77 Massachusetts Ave, Cambridge, MA 02139";
     // Get lat and long by address         
        $address = $dlocation; // Google HQ
        $prepAddr = str_replace(' ','+',$address);
        $geocode=file_get_contents('https://maps.google.com/maps/api/geocode/json?address='.$prepAddr.'&sensor=false&key=[MY_API_KEY]');
        $output= json_decode($geocode);
        $latitude = $output->results[0]->geometry->location->lat;
        $longitude = $output->results[0]->geometry->location->lng;
echo $latitude;
?>

任何帮助将不胜感激!如果您有任何示例代码可以做到这一点,我当然希望看到它。

非常感谢, 发展历程

【问题讨论】:

Everything I tried produces nothing。你具体得到什么结果。例如,您能否发布实际结果,因为 nothing 对 Google 来说尤其不寻常。他们返回什么结果?在$output 上执行print_r 或在$geocode 上执行echo。然后将其发布到您的问题。 【参考方案1】:

我最近在我的项目中使用 google api 从下车和取货地址获取纬度 lng。这是代码 sn-p 。 希望它可以帮助任何人

// url encode the address
$address = urlencode($address);

// google map geocode api url
$url = "https://maps.googleapis.com/maps/api/geocode/json?address=$address&key=YOUR_API_KEY";

// get the json response
$resp_json = file_get_contents($url);

// decode the json
$resp = json_decode($resp_json, true);

// response status will be 'OK', if able to geocode given address 
if($resp['status']=='OK')

    // get the important data
    $lati = isset($resp['results'][0]['geometry']['location']['lat']) ? $resp['results'][0]['geometry']['location']['lat'] : "";
    $longi = isset($resp['results'][0]['geometry']['location']['lng']) ? $resp['results'][0]['geometry']['location']['lng'] : "";
    $formatted_address = isset($resp['results'][0]['formatted_address']) ? $resp['results'][0]['formatted_address'] : "";

    // verify if data is complete
    if($lati && $longi && $formatted_address)

        // put the data in the array
        $data_arr = array();            

        array_push(
            $data_arr, 
                $lati, 
                $longi, 
                $formatted_address
            );

        return $data_arr;

    else
        return false;
    



else
    echo "<strong>ERROR: $resp['status']</strong>";
    return false;

【讨论】:

丹麦语,谢谢!这很有帮助!我认为这会起作用,但我收到一条错误消息说 REQUEST_DENIED,这可能意味着我的 API 有问题。同时,我可以使用 Google 提供的沙盒 API 或测试来尝试代码吗? 这可能没有什么原因......其中之一可能是 API_KEY。您可以使用您的地址和 API_KEY 直接在浏览器 URL 选项卡中点击 URL。确保您的 api 密钥有效【参考方案2】:

我使用这个api来获取用户输入的城市的经纬度。请参阅文档以获得正确的预期结果。

使用帐户注册,您将获得您的唯一密钥。链接:https://account.mapbox.com/auth/signup/

https://api.mapbox.com/geocoding/v5/mapbox.places/city.json?access_token=key&limit=1`

【讨论】:

以上是关于我需要从地址获取纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章

从地理编码纬度和经度获取地址

使用纬度和经度获取特定地址[重复]

从IP地址获取用户纬度和经度的最简单方法是啥[关闭]

如何使用地址和纬度/经度获取世界上所有的公园

如何获取地址的纬度和经度?

如何从输入地址获取纬度和经度