0

有没有办法通过一个地理编码请求发送多个地址:

geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        addMarker(results[0].geometry.location); 
        var the_string = generate_string(elements, a, address);

        infowindow[a] = new google.maps.InfoWindow({
            content: the_string
        });     

        google.maps.event.addListener(markersArray[a], "click", function() {
            infowindow[a].open(map, markersArray[a]);
        });
    } else {
        alert("Geocode was not successful for the following reason: " + status);
    }
});       

其中地址包含地址数组。原因是我在使用 google maps和 here Google Map Javascript API v3 - OVER_QUERY_LIMIT时遇到了“OVER_QUERY_LIMIT”

我想知道我是否应该开始使用客户端的服务器端版本或继续使用 javascript api 并获得通过地理编码器调用发送地址数组的帮助?

根据您的意见或经验,如果我有一个应用程序,您可以在字段中输入无数地址,然后按“绘图到地图”按钮,您将如何在 api 调用、地理编码等方面执行此操作?

编辑:////////////////////////

我现在正在使用这段代码:

class geocoder{
    static private $url = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=";

    static public function getLocation($address){
        $url = self::$url.urlencode($address);

        $resp_json = self::curl_file_get_contents($url);
        $resp = json_decode($resp_json, true);

        if($resp['status']='OK'){
            return $resp['results'][0]['geometry']['location'];
        }else{
            return false;
        }
    }

    static private function curl_file_get_contents($URL){
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        curl_close($c);

        if ($contents) return $contents;
            else return FALSE;
    }
}      

并这样称呼它:

$address = urlencode($field_set["value"]);
$loc = geocoder::getLocation($address);

在每个地址的循环中(在这种情况下为 20 次)。

它只在地图上放置 10 个标记,无论循环是否正确具有 2 个不同的 lngs 和 lats。

它为最后 10 个 lat lngs 返回 null :s

编辑:///////////////////////////

我在调用这个的循环中放置了一个睡眠:

$loc = geocoder::getLocation($address);

每进行第 8 次地理编码,它会暂停一秒钟然后继续。这似乎允许正确呈现所有地理编码器位置......但这似乎是一个绒毛。

有任何想法吗?

4

2 回答 2

1

使用地理编码的最佳方法是将经度和纬度值存储在您的服务器上,这样您就不必在每次脚本运行时发送一堆地理编码请求

于 2012-11-19T13:25:44.747 回答
0

不,地址必须是文档中指定的地址。

地理编码器将返回一个结果数组,但是您不能将地址数组输入到地理编码/反向地理编码,无论如何都不太合乎逻辑,人们会使用它来利用限制。

你不应该对 query_limit 太担心,因为只要它是 javascript api 并且没有后端,它就按 IP/天计算。因此,如果您有多个用户使用此功能,则会为他们单独设置限制,并且不会累加。

如果你因为有本地环境而超出了很多限制,那么我认为你可能需要为每天有多达 10 万个请求的商业服务租用谷歌地图。

于 2012-11-19T13:28:06.067 回答