123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- This file describes the public API for the CivicSpace location system as defined by
- in the library implemented by "location.inc" and its supporting files.
- For a example of this API's usage, please consult "location.module"
- FUNCTION SPECIFICATIONS DESCRIBED IN THIS FILE:
- ----------------------------------------------
- location_get_postalcode_data(): A function that takes a (postalcode,country) pair an returns lat/lon, city, province. This
- function is meant to replace location_latlon_rough(); see below.
- location_latlon_rough(): A function that returns the latitude and longitude of the specified postal-code/country pair.
- This latitude and longitude will be of the approximate center of the postal-code's area. This function
- will soon be removed from the API as it has been replaced by the more comprehensive
- location_get_postalcode_data() described above. [TO BE DEPRECATED]
- location_latlon_exact(): A function that returns the latitude and longitude of the given full location. Typically implemented
- on top of a web-service. [TO BE IMPLEMENTED]
- location_map_link(): A function that returns, based on the site configuration, either NULL or 1 or more deep-links to mapping
- web sites for the parameter location array.
- location_driving_directions_link(): A function that returns, given 2 locationes, a deep-link to Yahoo! Maps or some other site
- that provides driving directions. The site chosen depends on the implementation at the country-level.
- location_proximity_form(): A function that generates a form for collecting proximity search parameters.
- location_valid(): A function for validating locationes. [TO BE SPECIFIED]
- theme_location(): A function that takes in an location and themes it. (e.g., $output .= theme('location', $location)).
- location_distance_between(): A function that, given a pair of lat/lon pairs, returns the distance between them.
- "[TO BE SPECIFIED]" => Function spec has not been completed and may possibly be eliminated from spec.
- "[TO BE IMPLEMENTED]" => Function spec exists but is to be implemented in a future release.
- "[TO BE DEPRECATED]" => This function will soon be removed from the API.
- ----------------------------------------------
- IMPORTANT NOTES:
- ----------------
- Formats
- ---
- In the following API, a 'location' is merely an associative array with the following keys:
- 'street' => A string for the street portion of an location
- 'additional' => A string for the additional street portion of an location
- 'province' => An upper-case, standard postal abbreviation of a state/province/territory
- 'postal_code' => A string or integer for the postal code
- 'country' => The lower-case of the ISO 3166 two-letter alpha code (e.g., 'us' for U.S., 'ca' for Canada).
- For locations that are passed to location_form() for the $prefilled_values parameter, the same format applies
- except that the 'province' field is the concatenation of the country code, '-', and the province abbreviation.
- For example, 'CA' is the value for California for all purposes, but when passing this in a location for prefilled
- values, it should be 'us-CA'. There are two functions to help convert back and forth between these formats:
- location_form2api() and location_api2form(). These are described further below.
- Delegation
- ---
- With the exception of location_form() and location_proximity_form(), the calls to functions listed here are, in the end,
- dispatched to country-specific location libraries which are implemented in country-specific '.inc' files. For example,
- location_latlon_rough(), when given a U.S. location, really returns a result that is determined by call to
- "location_latlon_rough_us()" which is implemented in the file "location.us.inc".
- Current Implementation
- ---
- Currently, the only country supported is the United States. For the future, however, there will be documentation for how to
- implement a country-specific include file that can be plugged into the system to support these calls for new countries. This
- scheme will revolve around method signatures for a handful of simple-to-write functions.
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- function location_get_postalcode_data($location = array()); +
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Takes a location and uses the combination of postal code and country to return an array that gives the
- city, province, and lat/lon dat for that postal code.
- @param $location
- An associative array $location where
- 'street' => the street portion of the location
- 'additional' => additional street portion of the location
- 'province' => the province, state, or territory
- 'country' => lower-cased two-letter ISO code (REQUIRED)
- 'postal_code' => international postal code (REQUIRED)
- @return
- NULL if data cannot be found.
- Otherwise, an associative array where
- 'lat' => is a floating point of the latitude coordinate of this location
- 'lon' => is a floating point of the longitude coordinate of this location
- 'city' => is a string for the city this postalcode is in (or the most recognized city at the given postal)
- 'province' => the province of the given postal code.
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- function location_latlon_rough($location = array()); +
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Takes an location and returns a "rough" latitude/longitude pair based on the postal code
- data available for the given country.
- @param $location
- An associative array $location where
- 'street' => the street portion of the location
- 'additional' => additional street portion of the location
- 'province' => the province, state, or territory
- 'country' => lower-cased two-letter ISO code (REQUIRED)
- 'postal_code' => international postal code (REQUIRED)
- @return
- NULL if data cannont be found.
- Otherwise, an associative array where
- 'lat' => is a floating point of the latitude coordinate of this location
- 'lon' => is a floating point of the longitude coordinate of this location
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- function location_latlon_exact($location = array()); +
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Currently, this is not a priority until there is an implementable use for exact longitude,
- latitude coordinates for an location. The idea is that this call will eventually retrieve
- information through a web-service. Whereas location_latlon_rough() returns an approximate
- lat/lon pair based strictly on the postal code where this lat/lon pair is pulled from a
- database table, this function is intended to send the entire location to a web-service and
- to retrieve exact lat/lon coordinates.
- @param $location
- An array where
- -> the key values are 'street', 'additional', 'province', 'country', 'postal_code'
- -> the values are:
- 'street' => the string representing the street location (REQUIRED)
- 'additional' => the string representing the additional street location portion in the location form
- 'city' => the city name (REQUIRED)
- 'province' => the province code defined in the country-specific include file
- 'country' => the lower-case of the two-letter ISO code (REQUIRED)
- 'postal_code' => the postal-code (REQUIRED)
- @return
- NULL if the delegated-to function that does the actual look-up does not exist.
- If the appropriate function exists, then this function returns an associative array where
- 'lon' => A floating point number for the longitude coordinate of the parameter location
- 'lat' => A floating point number for the latitude coordinate of the parameter location
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- function location_map_link($location = array(), $link_text = 'See map'); +
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Get deep-links to a mapping services such as Yahoo! Maps or MapQuest (actual providers depend on configuration
- of location module) given a location. The call is delegated based on the 'country' value in the $location parameter.
- @param $location
- An associative array where
- 'street' => A string representing the street location
- 'additional' => A string for any additional portion of the street location
- 'city' => A string for the city name
- 'province' => The standard postal abbreviation for the province
- 'country' => The two-letter ISO code for the country of the location (REQUIRED)
- 'postal_code' => The international postal code for the location
- @return
- NULL if there are not mapping providers configured for the country or if no links could be generated.
- A string of the form "See map: Yahoo! Maps, MapQuest" where Yahoo! Maps and Mapquest are links to the
- given location and can be replaced with other options (e.g., Google) available in the location module settings.
- The idea is to encode the appropriate parameters as HTTP GET variables to the URL.
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- function location_driving_directions_link($locationA = array(), $locationB = array(), $link_text = 'Get directions');
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Takes two locationes and tries to return a deep-link to driving directions.
- Parameters:
- @param $locationA
- An associative array that represents an location where
- 'street' => the street portions of the location
- 'additional' => additional street portion of the location
- 'city' => the city name
- 'province' => the province, state, or territory
- 'country' => lower-cased two-letter ISO code (REQUIRED)
- 'postal_code' => the postal code
- @param $locationB
- An associative array that represents an location in the same way that
- parameter $locationA does.
- @param $link_text
- The text of the HTML link that is to be generated.
- @return
- A deep-link to driving directions on Yahoo! or some other mapping service, if enough fields are filled in the parameters.
- A deep-link to a form for driving directions with information pre-filled if not enough, but some fields are filled in the parameters.
- The empty string if no information is provided (or if so little information is provided that there is no function to which to delegate
- the call.
- We dispatch the call to a country-specific function. The country-specific function, in this case,
- will be the one reflected by the country parameter of the first function. We require that
- both locationes supplied have a country field at the minimum.
- The country-specific functions will ultimately decide, with the parameters given, whether to
- to link to a form for driving directions is provided, where this form will be
- pre-populated with whatever values were available or whether to link directly to the driving
- directions themselves if enough fields are filled for each location.
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- function location_proximity_form($location_form = '', $label = '', $description = '', $prefilled_values = array(), $form_name = 'location');
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- This function generates a form for doing proximity searches within a certain distance
- of a specified point.
- Depending on the context within which this function is called, the search-point can either
- be user-supplied via the location form that is passed (if one is available) or done within
- a search-point extracted from a contact table or some other location source specified by
- the programmer calling this function.
- @param $location_form
- An optional location form, preferably generated by location_form(). If the script processing this
- form also needs a user-supplied location, this parameter is used to specify a form for collecting the
- search-point about which this search is being done. If the caller does not supply a form, it is
- assumed that the caller already has a search point in mind and that this will be made clear in
- the $description parameter.
- @param $label
- The label you want to apply to the form group that is returned (passed as $legend param to form_group()).
- @param $description
- A text description of what is being searched for (e.g., 'Find all upcoming events near you.')
- @param $prefilled_values
- An associative array for prefilled values for the proximity search parameters, where
- 'distance' => is the prefilled int value to be selected for the distance scalar
- 'distance_unit' => is 'km' or 'mile'
- @param $form_name
- An additional parameter to help prevent HTML input name collisions. If the caller is using this
- function to generate more than 1 location proximity form on a page, then the generated name for
- each HTML input's "name" attribute will be $form_name. Allowing the caller to pass $form_name allows
- the caller the flexibility of using more than one location proximity search form on one page.
- @return
- An HTML form (generated by Drupal form functions) that lets users specify proximity search parameters that include distance,
- the unit of distance, and a search-point if the optional $location_form parameter is passed. If one is not passed,
- the caller of this function will be assumed to already have one.
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- function theme_location($location = array()); +
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Generates HTML for the passed location.
- @param $location
- An associative array where
- 'street' => A string representing the street location
- 'additional' => A string for any additional portion of the street location
- 'city' => A string for the city name
- 'province' => The standard postal abbreviation for the province
- 'country' => The two-letter ISO code for the country of the location (REQUIRED)
- 'postal_code' => The international postal code for the location
- @return
- An HTML string with special tags for locationes.
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- function location_distance_between($latlonA = array(), $latlonB = array(), $distance_unit = 'km'); +
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Given two points in lat/lon form, returns the distance between them.
- @param $latlonA
- An associative array where
- 'lon' => is a floating point of the longitude coordinate for the point given by latlonA
- 'lat' => is a floating point of the latitude coordinate for the point given by latlonB
- @param $latlonB
- Another point formatted like $latlonB
- @param $distance_unit
- A string that is either 'km' or 'mile'.
- If neither 'km' or 'mile' is passed, the parameter is forced to 'km'
- @return
- NULL if sense can't be made of the parameters.
- An associative array where
- 'scalar' => Is the distance between the two lat/lon parameter points
- 'distance_unit' => Is the unit of distance being represented by 'scalar'.
- This will be 'km' unless 'mile' is passed for the $distance_unit param
|