2014-01-27 271 views
0

我的朋友有一個網站名爲http://jobifly.com。現在的問題是,當你進入該網站,你會看到導航面板上的谷歌地圖,並顯示了可用的工作,但其針引導他們一個接一個,不能把它們全部展現在一起嗎?谷歌地圖Pinpoint顯示

等待迴應..

問候,

Zain公司蘇海爾

+0

請張貼代碼(最好是[最小的,完整的,經過測試和讀示例](http://stackoverflow.com/幫助/ mcve),而不只是一個鏈接到你的網站,當然看起來你所問的行爲是編碼的行爲,改變代碼來改變行爲。 – geocodezip

回答

0

與頁面的問題是,所有的位置將頁面加載時gecoded。爲了避免OVER_QUERY_LIMIT,這將延遲完成。

要一起顯示它們,您必須等到所有位置都經過地理編碼。

所以你的朋友可以選擇:

  • 使用當前的地理編碼策略,當所有地址已被地理編碼初始化地圖(我不認爲這是你的朋友的一個選項)
  • 或存儲經緯度的地方時,他們已經地理編碼,這樣他就可以不加延遲直接使用(注:這是隻允許最多30天)

它也可以使用FusionTable來存儲這些數據,地理編碼將自動完成那裏。

另一種可以存儲LatLng永久的選項:給提供作業的用戶一個地圖,他們可以通過點擊地圖手動選擇位置,返回的LatLng可以不受限制地存儲。

0

所以我有這個代碼,我可以看到它沒有存儲任何地方的工作,它只是創建一個新的實例。

那麼,如何運用融合表來存儲這些數據集..

<?php 

if (! defined('ABSPATH')) exit; // Exit if accessed directly 

/** 
*  WP_Job_Manager_Geocode 
* 
* Obtains Geolocation data for posted jobs from Google. 
*/ 
class WP_Job_Manager_Geocode { 

/** 
* Constructor 
*/ 
public function __construct() { 
    add_action('job_manager_update_job_data', array($this,      'update_location_data'), 20, 2); 
    add_action('job_manager_job_location_edited', array($this, 'change_location_data'), 20, 2); 
} 

/** 
* Update location data - when submitting a job 
*/ 
public function update_location_data($job_id, $values) { 
    if (apply_filters('job_manager_geolocation_enabled', true)) { 
     $address_data = self::get_location_data($values['job']  ['job_location']); 
     self::save_location_data($job_id, $address_data); 
    } 
} 

/** 
* Change a jobs location data upon editing 
* @param int $job_id 
* @param string $new_location 
*/ 
public function change_location_data($job_id, $new_location) { 
    if (apply_filters('job_manager_geolocation_enabled', true)) { 
     $address_data = self::get_location_data($new_location); 
     self::clear_location_data($job_id); 
     self::save_location_data($job_id, $address_data); 
    } 
} 

/** 
* Checks if a job has location data or not 
* @param int $job_id 
* @return boolean 
*/ 
public static function has_location_data($job_id) { 
    return get_post_meta($job_id, 'geolocated', true) == 1; 
} 

/** 
* Called manually to generate location data and save to a post 
* @param int $job_id 
* @param string $location 
*/ 
public static function generate_location_data($job_id, $location) { 
    $address_data = self::get_location_data($location); 
    self::save_location_data($job_id, $address_data); 
} 

/** 
* Delete a job's location data 
* @param int $job_id 
*/ 
public static function clear_location_data($job_id) { 
    delete_post_meta($job_id, 'geolocated'); 
    delete_post_meta($job_id, 'geolocation_city'); 
    delete_post_meta($job_id, 'geolocation_country_long'); 
    delete_post_meta($job_id, 'geolocation_country_short'); 
    delete_post_meta($job_id, 'geolocation_formatted_address'); 
    delete_post_meta($job_id, 'geolocation_lat'); 
    delete_post_meta($job_id, 'geolocation_long'); 
    delete_post_meta($job_id, 'geolocation_state_long'); 
    delete_post_meta($job_id, 'geolocation_state_short'); 
    delete_post_meta($job_id, 'geolocation_street'); 
    delete_post_meta($job_id, 'geolocation_zipcode'); 
} 

/** 
* Save any returned data to post meta 
* @param int $job_id 
* @param array $address_data 
*/ 
public static function save_location_data($job_id, $address_data) { 
    if (! is_wp_error($address_data) && $address_data) { 
     foreach ($address_data as $key => $value) { 
      if ($value) { 
       update_post_meta($job_id, 'geolocation_' . $key, $value); 
      } 
     } 
     update_post_meta($job_id, 'geolocated', 1); 
    } 
} 

/** 
* Get Location Data from Google 
* 
* Based on code by Eyal Fitoussi. 
* 
* @param string $raw_address 
* @return array location data 
*/ 
public static function get_location_data($raw_address) { 
    $invalid_chars = array(" " => "+", "," => "", "?" => "", "&" => "", "=" => "" , "#" => ""); 
    $raw_address = trim(strtolower(str_replace(array_keys($invalid_chars), array_values($invalid_chars), $raw_address))); 

    if (empty($raw_address)) 
     return false; 

    $transient_name = 'jm_geo_' . md5($raw_address); 

    try { 
     if (false === ($result = get_transient($transient_name))) { 
      $result = wp_remote_get( 
       "http://maps.googleapis.com/maps/api/geocode/xml?address=" . $raw_address . "&sensor=false", 
       array(
        'timeout'  => 20, 
        'redirection' => 5, 
        'httpversion' => '1.1', 
        'user-agent' => 'WordPress/WP-Job-Manager-' . JOB_MANAGER_VERSION . '; ' . get_bloginfo('url'), 
        'sslverify' => false, 
       ) 
      ); 
      $result = wp_remote_retrieve_body($result); 
      $xml = new SimpleXMLElement($result); 

      switch ($xml->status) { 
       case 'ZERO_RESULTS' : 
        throw new Exception(__("No results found", 'wp-job-manager')); 
       break; 
       case 'OVER_QUERY_LIMIT' : 
        throw new Exception(__("Query limit reached", 'wp-job-manager')); 
       break; 
       default : 
        set_transient($transient_name, $result, 24 * HOUR_IN_SECONDS * 365); 
       break; 
      } 
     } else { 
      $xml = new SimpleXMLElement($result); 
     } 
    } catch (Exception $e) { 
     return new WP_Error('error', $e->getMessage()); 
    } 

    $address      = array(); 
    $address['lat']    = sanitize_text_field($xml->result->geometry->location->lat); 
    $address['long']    = sanitize_text_field($xml->result->geometry->location->lng); 
    $address['formatted_address'] = sanitize_text_field($xml->result->formatted_address); 

    if (! empty($xml->result->address_component)) { 
     $address_data    = $xml->result->address_component; 
     $street_number   = false; 
     $address['street']  = false; 
     $address['city']   = false; 
     $address['state_short'] = false; 
     $address['state_long'] = false; 
     $address['zipcode']  = false; 
     $address['country_short'] = false; 
     $address['country_long'] = false; 

     foreach ($address_data as $data) { 
      switch ($data->type) { 
       case 'street_number' : 
        $address['street']  = sanitize_text_field($data->long_name); 
       break; 
       case 'route' : 
        $route = sanitize_text_field($data->long_name); 

        if (! empty($address['street']))  
         $address['street'] = $address['street'] . ' ' . $route; 
        else 
         $address['street'] = $route; 
       break; 
       case 'locality' : 
        $address['city']   = sanitize_text_field($data->long_name); 
       break; 
       case 'administrative_area_level_1' : 
        $address['state_short'] = sanitize_text_field($data->short_name); 
        $address['state_long'] = sanitize_text_field($data->long_name); 
       break; 
       case 'postal_code' : 
        $address['postcode']  = sanitize_text_field($data->long_name); 
       break; 
       case 'country' : 
        $address['country_short'] = sanitize_text_field($data->short_name); 
        $address['country_long'] = sanitize_text_field($data->long_name); 
       break; 
      } 
     } 
    } 

    return $address; 
} 
} 

new WP_Job_Manager_Geocode();