Gmaps (Google Maps) Data

With the Gmaps Data module your can convert your entries in searchable locations. The Module comes with a default 1 location fieldtype, but when you have installed the Gmaps Fieldtype, the module save the locations automatically from out your Gmaps fieltype. This way you can have multiple locations per enty.

How it works

Using the Gmaps Data module is very easy and very powerfull to create for example a store locator. There are 2 options to do that;

What those 2 options does, is just saving your locations to a readable format (latlng) in your database. Later we can just use any method, that comes with the Gmaps Data module to get your result out of the database with the assigned entry.

Limitations

Because we are using geocoding to get the right latlng, there is a limitation. The Gmaps Module will try to handle this very good, but it is not always working due some strict rules from Google. So keep in mind, that when you have 100 addresses or more, there is a change that not all addresses are saved correctly. (https://developers.google.com/maps/documentation/geocoding/usage-limits)

Installation

Prerequisites

Make sure your system meets the minimum requirements:

Installation Instructions

Update instructions

Fieltype template tag

To get the location values from your entry.

Example

 {exp:channel:entries dynamic="no" entry_id="2"}
    {your_field_type_name}
        address: {your_field_type_name:address}<br>
        postal_code: {your_field_type_name:postal_code}<br>
        city: {your_field_type_name:city}<br>
        country: {your_field_type_name:country}<br>
    {/your_field_type_name}

Tag Variables

Below are the Tag Variables. Those Variables can be used inside the tag described above.

address

{your_field_type_name:address}

postal_code

{your_field_type_name:postal_code}

city

{your_field_type_name:city}

country

{your_field_type_name:country}

state

{your_field_type_name:state}

Query tag

Simply query your entry locations

The tag

{exp:gmaps_data:query}

Tag Parameters

Below are the Tag Parameters. Those parameters can be used in the tag described above

lat

the Langitude

lat=""

lng

lng=""

city

city=""

street_name

street_name=""

postal_code

postal_code=""

country

country=""

country_code

country_code=""

Tag Variables

Below are the Tag Variables. Those Variables can be used inside the tag described above.

entry_id

{entry_id}

lat

{lat}

lng

{lng}

city

{city}

street_name

{street_name}

street_number

{street_number}

postal_code

{postal_code}

country

{country}

country_code

{country_code}

Example

{exp:gmaps_data:query country_code="nl"}
    {if no_results}
        No result
    {/if}

    entry_id: {entry_id}<br>
    lat: {lat}<br>
    lng: {lng}<br>
    city: {city}<br>
    street_name: {street_name}<br>
    street_number: {street_number}<br>
    postal_code: {postal_code}<br>
    country: {country}<br>
    country_code: {country_code}<br>
{/exp:gmaps_data:query}

Radius tag

Show locations based on a radius

The tag

{exp:gmaps_data:radius}

Tag Parameters

Below are the Tag Parameters. Those parameters can be used in the tag described above

location

locations=""

radius

radius=""

sort

Order by is by radius

sort="asc"

limit

For use with the paging tags https://docs.expressionengine.com/latest/templates/pagination.html

limit=""

Tag Variables

Below are the Tag Variables. Those Variables can be used inside the tag described above.

entry_id

{entry_id}

lat

{lat}

lng

{lng}

city

{city}

street_name

{street_name}

street_number

{street_number}

postal_code

{postal_code}

country

{country}

country_code

{country_code}

Example

{exp:gmaps_data:radius location="amsterdam" radius="50"}
    {if no_results}
        No result
    {/if}

    entry_id: {entry_id}<br>
    distance: {distance}<br>
    lat: {lat}<br>
    lng: {lng}<br>
    city: {city}<br>
    street_name: {street_name}<br>
    street_number: {street_number}<br>
    postal_code: {postal_code}<br>
    country: {country}<br>
    country_code: {country_code}<br>
{/exp:gmaps_data:radius}

Search form tag

Search your location via user form

The tag

{exp:gmaps_data:search_form}

Tag Parameters

Below are the Tag Parameters. Those parameters can be used in the tag described above

metric

set the type of metrics km or mile

metric="km"

channel

Give the channel(s) to search. seperate with a pipeline (|) for mulitple channels.

channel=""

location_field

Set the location field name of your input field of your form. This will be used to search against the entries.

location_field=""

radius_field_max

Set the radius max field name of your input field of your form.

radius_field_max=""

search_type_field

Set the search type field, that hold the values. radius locality admin_level sub_locality

search_type_field=""

search_category_field

the category field that holds the categories to select

search_category_field=""

result_url

set the url of your result page

result_url=""

Tag Variables

Below are the Tag Variables. Those Variables can be used inside the tag described above.

location

the location value

{location}

radius

the radius value

{radius}

search_type

the search_type value

{radius}

search_category:id

The Category id you are searching

{search_category:id}

search_category

If searching multiple categories, this holds a loop of data

{search_category}
    {search_category:search_category:id}
{/search_category}

Example

{exp:gmaps_data:search_form
    metric="km"
    channel="channel_1|channel_2"
    location_field="location_field"
    radius_field_max="radius_field_max"
    search_type_field="search_type_field"
    result_url="locations/result"
}
    <label>Location to search with (this location will be geocoded</label><br>
    <input type="text" name="location_field" value="{location}"/> 

    <br><br>

    <label>Radius (only uses when the search_type is set to 'radius')</label><br>
    <select name="radius_field_max">
        <option {if radius == 20}selected{/if} value="20">20</option>
        <option {if radius == 50}selected{/if} value="50">50</option>
        <option {if radius == 100}selected{/if} value="100">100</option>
        <option {if radius == 5000}selected{/if} value="5000">5000</option>
    </select>

    <br><br>

    <label>Search type</label><br>
    <select name="search_type_field">
        <option {if search_type == 'radius'}selected{/if} value="radius">Radius</option>
        <option {if search_type == 'locality'}selected{/if} value="locality">Within a City</option>
        <option {if search_type == 'admin_level'}selected{/if} value="admin_level">Within a state or province</option>
        <option {if search_type == 'sub_locality'}selected{/if} value="sub_locality">Within a city_district</option>
    </select>

    <br><br>

    <input type="submit"/>
{/exp:gmaps_data:search_form}

Search result tag

Show your result from the search_form method.

The tag

{exp:gmaps_data:search_result}

Tag Parameters

Below are the Tag Parameters. Those parameters can be used in the tag described above

sort

Order by is by radius

sort="asc"

limit

For use with the paging tags https://docs.expressionengine.com/latest/templates/pagination.html

limit=""

Tag Variables

Below are the Tag Variables. Those Variables can be used inside the tag described above.

entry_id

{entry_id}

lat

{lat}

lng

{lng}

Calculated radius

{radius}

Posted radius by the user

{post_radius}

admin_level_n:name

indicates the number of order civil entity below the country level. Within the United States, these administrative levels are states. Not all nations exhibit these administrative levels.

{admin_level_1:name} // prints the first admin level, for us this is the state
{admin_level_2:name} // prints the second admin level, for us this is the state

city

{city}

street_name

{street_name}

street_number

{street_number}

postal_code

{postal_code}

country

{country}

country_code

{country_code}

Example

{!-- include the Gmaps module and show a default map with the center on holland and a max zoom of 15 --}
{!-- (otherwise the zoom would be max when placing the markers)--}
{exp:gmaps:init}
{exp:gmaps:geocoding address:center="holland" max_zoom="15"}

{exp:gmaps_data:search_result}
    {if no_results}
        No result
    {/if}

    entry_id: {entry_id}<br>
    radius: {radius}<br>
    lat: {lat}<br>
    lng: {lng}<br>
    city: {city}<br>
    street_name: {street_name}<br>
    street_number: {street_number}<br>
    postal_code: {postal_code}<br>
    country: {country}<br>
    country_code: {country_code}<br>

    {!-- Data from the native gmaps_data fieldtype --}
    {exp:channel:entries dynamic="no" entry_id="{entry_id}"}
        {gmaps_data_test}
            address: {gmaps_data_test:address}<br>
            postal_code: {gmaps_data_test:postal_code}<br>
            city: {gmaps_data_test:city}<br>
            country: {gmaps_data_test:country}<br>
        {/gmaps_data_test}
    {/exp:channel:entries}

    {!-- place markers with the Gmaps module --}
    {exp:gmaps:add_marker map:id="1" latlng="{lat},{lng}" fit_map="yes"}

{/exp:gmaps_data:search_result}

Changelog

2.0.0 (04-12-2017)

1.4.0 (01-11-2017)

1.3.3 (23-08-2017)

1.3.2 (16-08-2017)

1.3.1 (26-07-2017)

1.3.0 (16-06-2017)

1.2.3 (30-05-2017)

1.2.2 (24-04-2017)

1.2.1 (07-04-2017)

1.2.0 (17-02-2017)

1.1.0 (18-01-2017)

1.0.2 (06-10-2016)

1.0.1 (11-08-2016)

1.0.0