0

我正在尝试创建一种方法来遍历一堆地址并输出与另一个地址在设定距离内的地址列表。所以在 WordPress 中,我有一个自定义的帖子类型,我正在循环并创建一个这样的地址数组,

<?php
$args = array( 'post_type' => 'friday_location', 'posts_per_page' => '-1' );
$arr = array();
$i=0;
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();

$meta = get_post_meta( $post->ID);

$string = $meta['_cmb_address'][0] . '+' . $meta['_cmb_city'][0] . '+' .$meta['_cmb_state'][0] . '+' .$meta['_cmb_zip'][0];
$string = str_replace(' ', '+', $string);

$arr[$i] = $string;
$i++;

endwhile; 
wp_reset_postdata();
?>

在此之后,在脚本标签内部,我正在像这样转换数组

var locations = <?php echo json_encode($arr ); ?>;

现在我有一个地址的 JS 数组,我想将此数组传递给 Google Maps API 距离矩阵,https://developers.google.com/maps/documentation/javascript/distancematrix#distance_matrix_requests

相关的代码看起来像,

function calculateDistances() {
    var opts = {
    center: new google.maps.LatLng(38.6,-98),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById('map'), opts);
    geocoder = new google.maps.Geocoder();

    var service = new google.maps.DistanceMatrixService();
    service.getDistanceMatrix(
    {
    origins: [origin2],
    destinations: locations,
    travelMode: google.maps.TravelMode.DRIVING,
    unitSystem: google.maps.UnitSystem.IMPERIAL,
    avoidHighways: false,
    avoidTolls: false
    }, callback);
}

我知道目的地可以带一个数组,所以我试图给它一个动态制作的,但是我不确定为什么它不工作,因为我在脑海中看到它:)

4

1 回答 1

0

这个:

var locations = <?php echo json_encode($arr ); ?>;

应该是:

var locations = '<?php echo json_encode($arr ); ?>';

但这只是一个字符串,要获得一个数组:

var locations = '<?php echo json_encode($arr ); ?>',
         JSON = JSON.parse(locations),
    loc_array = [];

for(var key in JSON) {
    if(JSON.hasOwnProperty(key)) {
        loc_array.push(JSON[key]);
    }
}

现在将该数组传递给 Google 函数:

service.getDistanceMatrix( 
{
   origins: loc_array,
......
于 2012-12-07T05:42:13.033 回答