New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

esri-leaflet-geocoder

Package Overview
Dependencies
Maintainers
1
Versions
48
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

esri-leaflet-geocoder

Esri Geocoding utilities and search plguin for Leaflet.

  • 1.0.0-rc.4
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
27K
decreased by-5%
Maintainers
1
Weekly downloads
 
Created
Source

Esri Leaflet Geocoder

The Esri Leaflet Geocoder is a small series of API helpers and UI controls to interact with the ArcGIS Online geocoding services.

Travis CI

Currently Esri Leaflet Geocoder is in development and should be thought of as a beta or preview

Esri Leaflet Geocoder relies on the minimal Esri Leaflet Core which handles abstraction for requests and authentication when neccessary. You can find out more about the Esri Leaflet Core on the Esri Leaflet downloads page.

Example

Take a look at the live demo.

Example Image

<!DOCTYPE html>
<html>
  <head>
    <title>Esri Leaflet Geocoder</title>

    <!-- Load Leaflet from their CDN -->
    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet-src.js"></script>

    <!-- Make the map fill the entire page -->
    <style>
      #map {
        position: fixed;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
      }
    </style>

    <!-- Esri Leaflet Core -->
    <script src="http://cdn-geoweb.s3.amazonaws.com/esri-leaflet/0.0.1-beta.5/esri-leaflet-core.js"></script>

    <!-- Esri Leaflet Geocoder -->
    <script src="http://cdn-geoweb.s3.amazonaws.com/esri-leaflet-geocoder/0.0.1-beta.3/esri-leaflet-geocoder.js"></script>
    <link rel="stylesheet" type="text/css" href="http://cdn-geoweb.s3.amazonaws.com/esri-leaflet-geocoder/0.0.1-beta.3/esri-leaflet-geocoder.css">
  </head>
  <body>
    <div id="map"></div>
    <script>
      var map = L.map('map').setView([45.5165, -122.6764], 12);

      var tiles = L.tileLayer("http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png").addTo(map);

      // create the geocoding control and add it to the map
      var searchControl = new L.esri.Controls.Geosearch().addTo(map);

      // create an empty layer group to store the results and add it to the map
      var results = new L.LayerGroup().addTo(map);

      // listen for the results event and add every result to the map
      searchControl.on("results", function(data){
        results.clearLayers();
        for (var i = data.results.length - 1; i >= 0; i--) {
          results.addLayer(L.marker(data.results[i].latlng));
        };
      });
    </script>
  </body>
</html>

L.esri.Geocoding.Controls.Geosearch

Constructor

Extends L.Control

ConstructorOptionsDescription
new L.esri.Controls.Geosearch(options)
L.esri.Controls.geosearch(options)
<GeosearchOptions>Creates a new Geosearch control.

Options

OptionTypeDefaultDescription
positionStringtopleftOne of the valid Leaflet control positions.
zoomToResultBooleantrueIf true the map will zoom the result after geocoding is complete.
useMapBoundsBoolean or
Integer
12Determines if and when the geocoder should begin using the bounds of the map to enchance search results. If true the geocoder will always return results in the current map bounds. If false it will always search the world. If an integer like 11 is passed in the geocoder will use the bounds of the map for searching if the map is at a zoom level equal to or greater than the integer. This mean the geocoder will prefer local results when the map is zoomed in.
collapseAfterResultBooleantrueIf the geocoder is expanded after a result this will collapse it.
expandedBooleantrueStart the control in an expanded state.
maxResultsInteger25The maximum number of results to return from a geocoding request. Max is 50.
allowMultipleResultsBooleantrueIf set to true and the user submits the form without a suggestion selected geocodes the current text in the input and zooms the user to view all the results.
useArcgisWorldGeocoderBooleantrueUse the ArcGIS Online World Geocoder by default in the array of providers.
providersArraySee DescriptionAn array of EsriLeafletGeocoding.Controls.Geosearch.Providers objects. These additional providers will also be searched for possible results and added to the suggestion list.
placeholderString'Search for places or addresses'Placeholder text for the search input.
titleStringLocation SearchTitle text for the search input. Shows as tool tip on hover.

Methods

MethodOptionsDescription
clear()nullClears the text currently in the geocoder and collapses it if collapseAfterResult is true.

Events

EventDataDescription
loadnullA generic event fired when a request to the geocoder starts.
loadingnullA generic event fired when a request to the geocoder finished.
results<ResultsEvent>Fired when a result is returned from the geocoder.

Styling

For reference here is the internal structure of the geocoder...

<div class="geocoder-control leaflet-control">

  <input class="geocoder-control-input leaflet-bar">

  <ul class="geocoder-control-suggestions leaflet-bar">
    <li class="geocoder-control-suggestion geocoder-control-selected">The Selected Result</li>
    <li class="geocoder-control-suggestion">Another Result</li>
  </ul>
</div>

Providers

The Geosearch control can also search for results from a varity of sources including Feature Layers and Map Services. This is done with plain text matching and is not "real" geocoding. But it allows you to mix custom results into search box.

var gisDay = new L.esri.Geocoding.Controls.Geosearch.Providers.FeatureLayer('https://services.arcgis.com/uCXeTVveQzP4IIcx/arcgis/rest/services/GIS_Day_Final/FeatureServer/0', {
  searchFields: ['Name', 'Organization'], // Search these fields for text matches
  label: 'GIS Day Events', // Group suggestions under this header
  formatSuggestion: function(feature){
    return feature.properties.Name + ' - ' + feature.properties.Organization; // format suggestions like this.
  }
});

L.esri.Geocoding.Controls.geosearch({
  providers: [gisDay]
}).addTo(map);
Available Providers
  • L.esri.Geocoding.Controls.Geosearch.Providers.ArcGISOnline - Included by default unless the useArcgisWorldGeocoder option is set to false.
  • L.esri.Geocoding.Controls.Geosearch.Providers.FeatureLayer - Gets results by querying the Feature Layer for text matches.
  • L.esri.Geocoding.Controls.Geosearch.Providers.MapService - Uses the find and query methods on the Map Service to get text matches.
  • L.esri.Geocoding.Controls.Geosearch.Providers.GeocodeService - Use a ArcGIS Server Geocode Service. This option does not support suggestions.
Provider Options
OptionTypeDefaultDescription
searchFieldsArray[Strings]NoneAn array of fields to search for text. Not valid for the ArcGISOnline and GeocodeService providers.
layerInteger0Only valid for MapService providers, the layer to find text matches on.
labelStringProvider TypeText that will be used to group suggestions under.
maxResultsInteger5Maximum number of results to show for this provider.
bufferRadius,IntegerIf a service or layer contains points, buffer points by this radius to create bounds. Not valid for the ArcGISOnline and GeocodeService providers
formatSuggestionFunctionSee DescriptionFormating function for the suggestion text. Receives a feature and returns a string.
Results Event
PropertyTypeDescription
boundsL.LatLngBoundsThe bounds around this suggestion. Good for zooming to results like cities and states.
latlngL.LatLngThe center of the result.
results[<ResultObject>]An array of result objects.
Result Object

A single result from the geocoder. You should not rely on all these properties being present in every result object.

PropertyTypeDescription
textStringThe text that was passed to the geocoder.
boundsL.LatLngBoundsThe bounds around this suggestion. Good for zooming to results like cities and states.
latlngL.LatLngThe center of the result.

The result object will also contain any additional properties from the provider. So when geocoding you will also get address breakdowns and when text matching features you will get the additional fields from that feature.

L.esri.Geocoding.Services.Geocoding

A basic wrapper for ArcGIS Online geocoding services. Used internally by L.esri.Controls.Geosearch.

Constructor

ConstructorDescription
new L.esri.Geocoding.Geocoding(url, options)
L.esri.Controls.geosearch(url, options)
new L.esri.Services.Geocoding(options)
L.esri.Controls.geosearch(options)
Creates a new Geosearch control. You can pass the url as the first parameter or as url in the options to a custom geocoding endpoint if you do not want to use the ArcGIS Online World Geocoding service.

Options

You can pass any options you can pass to L.esri.Services.Service.

Methods

MethodReturnsDescription
geocode()L.esri.Geocoding.Tasks.GeocodeReturns a new Geocode task bound to this server.
suggest()L.esri.Geocoding.Tasks.SuggestReturns a new Suggest task bound to this server.
reverse()L.esri.Geocoding.Tasks.ReverseGeocodeReturns a new ReverseGeocode task bound to this server.

Events

L.esri.Services.FeatureLayer fires all L.esri.Services.service events.

L.esri.Geocoding.Tasks.Geocode

Constructor

ConstructorDescription
new L.esri.Geocoding.Tasks.Geocode(url, options)
L.esri.Geocoding.Tasks.geocode(url, options)
Creates a new Geocode task. L.esri.Geocoding.WorldGeocodingService can be used as a reference to the ArcGIS Online World Geocoder.

Options

You can pass any options you can pass to L.esri.Tasks.Task.

Methods

MethodReturnsDescription
text(text <String>)thisThe text to geocode. If you specify text all other params like address, city, subregion, and region, postal, and country will be ignored.
address(text <String>)Specify the street and house number to be geocoded.
neighborhood(text <String>)Specify the neighborhood to be geocoded.
city(text <String>)Specify the city to be geocoded.
subregion(text <String>)Specify the subregion to be geocoded. Depending on the country, subregion can represent a county, state, or province.
region(text <String>)Specify the region to be geocoded. Typically a state or province
postal(text <String>)Specify the postal code to be geocoded.
country(text <String>)Specify the country to be geocoded.
category(category <String>)The category to search for suggestions. By default no category. A list of categories can be found here https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm#ESRI_SECTION1_502B3FE2028145D7B189C25B1A00E17B
within(bounds <L.LatLngBounds>)A bounding box to search for suggestions in.
nearby(latlng <L.LatLng>, distance <Integer>)Searches for suggestions only inside an area around the LatLng. distance is in meters.
run(callback <Function>, context <Object>)XMLHttpRequestExecutes this request chain and accepts the response callback.

Examples

L.esri.Geocoding.Tasks.geocode(L.esri.Geocoding.WorldGeocodingService).text('380 New York St, Redlands, California, 92373').run(function(err, results, response){
  console.log(results);
});
L.esri.Geocoding.Tasks.geocode(L.esri.Geocoding.WorldGeocodingService).address('380 New York St').city('Redlands').region('California').postal(92373).run(function(err, results, response){
  console.log(results);
});
//Using .within()
var southWest = L.latLng(37.712, -108.227),
    northEast = L.latLng(41.774, -102.125),
    bounds = L.latLngBounds(southWest, northEast); // Colorado

L.esri.Geocoding.Tasks.geocode(L.esri.Geocoding.WorldGeocodingService).text("Denver").within(bounds).run(function(err, response){
  console.log(response);
});
//Using .nearby()
var denver = L.latLng(37.712, -108.227);

L.esri.Geocoding.Tasks.geocode(L.esri.Geocoding.WorldGeocodingService).text("Highlands Ranch").nearby(denver, 20000).run(function(err, response){
  console.log(response);
});

Results Object

In the above examples the results object will look like this.

{
  results: [
    {
      latlng: L.LatLng,
      text: 'Formated Address',
      score: 100, // ranking of the certainty of the match
      properties: {
        // additonal info like specific address components like Country Code ect...
      }
    }
  ]
}

L.esri.Geocoding.Tasks.Suggest

Constructor

ConstructorDescription
new L.esri.Geocoding.Tasks.Suggest(url, options)
L.esri.Geocoding.Tasks.suggest(url, options)
Creates a new Suggest task. L.esri.Geocoding.WorldGeocodingService can be used as a reference to the ArcGIS Online World Geocoder.

Options

You can pass any options you can pass to L.esri.Tasks.Task.

Methods

MethodReturnsDescription
text(text <String>)thisThe text to recive suggestions for.
category(category <String>)The category to search for suggestions. By default no categogy. A list of categories can be found here https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm#ESRI_SECTION1_502B3FE2028145D7B189C25B1A00E17B
within(bounds <L.LatLngBounds>)A bounding box to search for suggestions in.
nearby(latlng <L.LatLng>, distance <Integer>)Searches for suggestions only inside an area around the LatLng. distance is in meters.
run(callback <Function>, context<Object>)XMLHttpRequestExecutes this request chain and accepts the response callback.

Example

L.esri.Geocoding.Tasks.suggest().text('trea').nearby([45,-121], 5000).run(function(error, response){
  // response matches the suggest API response https://developers.arcgis.com/rest/geocode/api-reference/geocoding-suggest.htm#ESRI_SECTION1_FC3884A45AD24E62BD11C9888F1392DB
});

L.esri.Geocoding.Tasks.ReverseGeocode

Constructor

ConstructorDescription
new L.esri.Geocoding.Tasks.ReverseGeocode(url, options)
L.esri.Geocoding.Tasks.reverseGeocode(url, options)
Creates a new ReverseGeocode task. L.esri.Geocoding.WorldGeocodingService can be used as a reference to the ArcGIS Online World Geocoder.

Options

You can pass any options you can pass to L.esri.Tasks.Task.

Methods

MethodReturnsDescription
latlng(latlng <L.LatLng>)The L.LatLng object for which the address will be looked up.
distance(distance <Integer>)The distance (in meters) around the point for which addresses will be looked up.
language(language <String>)thisThe language to return the address in.
run(callback <Function>, context <Object>)XMLHttpRequestExecutes this request chain and accepts the response callback.

Example

L.esri.Geocoding.Tasks.reverseGeocode().latlng([48.8583,  2.2945]).run(function(error, result, response){
  // callback is called with error, result, and response.
  // result.latlng contains the latlng of the located address
  // result.address contains the address information
});

Development Instructions

  1. Fork and clone Esri Leaflet Geocoder
  2. cd into the esri-leaflet-geocoder folder
  3. Install the dependencies with npm install
  4. The example at /index.html should work
  5. Make your changes and create a pull request

Dependencies

Esri Leaflet Geocoder relies on the minimal Esri Leaflet Core which handles abstraction for requests and authentication when neccessary. You can find out more about the Esri Leaflet Core on the Esri Leaflet downloads page.

Resources

Issues

Find a bug or want to request a new feature? Please let us know by submitting an issue.

Contributing

Esri welcomes contributions from anyone and everyone. Please see our guidelines for contributing.

Terms and Conditions

In order the use the ArcGIS Online Geocoding Service you should signup for an ArcGIS for Developers account or purchase an ArcGIS Online Organizational Subscription.

  1. Once you have an account you are good to go. Thats it!
  2. Your users can search for as many places as they want. Esri defines this as "Geosearch" and its free. You only consume credits when you want to store the result of geocodes.
  3. You are allowed to store the results of any geocoding you do if you pass the forStorage flag and a valid access token.
  4. If you use this library in a revenue generating application or for goverment use you must upgrade to a paid account. You are not allowed to generate revenue while on a free plan.

This information is from the ArcGIS for Developers Terms of Use FAQ and the ArcGIS Online World Geocoder documentation

Licensing

Copyright 2013 Esri

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

A copy of the license is available in the repository's license.txt file.

[](Esri Tags: ArcGIS Web Mapping Leaflet Geocoding) [](Esri Language: JavaScript)

FAQs

Package last updated on 09 Jan 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc