2014-01-27 4 views
0

У моего друга есть сайт под названием http://jobifly.com. Теперь проблема заключается в том, что при входе на сайт вы увидите карты Google на панели навигации и показываете рабочие места, которые доступны, но их Пин-указатели один за другим, не может ли он показать все вместе?Google Display Pinpoint Display

В ожидании ответа ..

С уважением,

Zain Sohail

+0

Пожалуйста, пост кода (предпочтительно [Minimal, Complete, испытана и читаемый примера] (http://stackoverflow.com/ help/mcve), о котором вы просите, а не только ссылку на ваш сайт. Конечно, похоже, что поведение, о котором вы спрашиваете, - это поведение, которое было закодировано. Измените код, чтобы изменить поведение. – geocodezip

ответ

0

Проблема со страницей в том, что все места будут gecoded при загрузке страницы. Чтобы избежать OVER_QUERY_LIMIT, это будет сделано с задержкой.

Чтобы показать их вместе, вы должны подождать, пока все местоположения будут геокодированы.

Так что ваш друг может:

  • использовать текущее геокодирование-стратегию и инициализировать карту, когда все адреса были геокодированной (я не думаю, что это вариант для вашего друга)
  • или хранить где-то LatLng, когда они были геокодированные, так что он может использовать их непосредственно без задержки (Примечание: это разрешено только до 30 дней)

также можно использовать FusionTable для хранения этих данных , геокодирование будет выполнено автоматически там.

Другой вариант, чтобы иметь возможность хранить постоянный LatLng: предоставить пользователям, которые предлагают работу, карту, где они могут выбрать местоположение вручную, щелкнув по карте, возвращенный LatLng может храниться без ограничений.

0

Итак, у меня есть этот код, я вижу, что он не хранит адрес задания в любом месте, а просто создает новый экземпляр.

Так как я применяю таблицы Fusion для хранения этих наборов данных ..

<?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();