TerriaJS / terriajs

A library for building rich, web-based geospatial data platforms.
https://terria.io
Apache License 2.0
1.18k stars 362 forks source link

Geocoder - update #5107

Closed AnaBelgun closed 12 months ago

AnaBelgun commented 3 years ago

We're currently using Bing geocoder along GNAF. Options:

AnaBelgun commented 3 years ago

Related tickets and PRs:

hardreddata commented 3 years ago

For reference there is currently batch geocoder functionality in v7 with gnaf. I mention it because it might not be well known.

My index.js contains the additional

import GnafAddressGeocoder from 'terriajs/lib/Map/GnafAddressGeocoder.js';
terriaOptions.batchGeocoder = new GnafAddressGeocoder();

and I can drag in a .csv file with an address column per https://github.com/TerriaJS/terriajs/pull/1755

In time this would be nice to retain (use with Bing?). I appreciate the priority is to implement the switch.

AnaBelgun commented 3 years ago

For NationalMap NationalMap uses now superseded 2012 dataset of official place names for one of its geocoders: https://ecat.ga.gov.au/geonetwork/srv/eng/catalog.search#/metadata/76695

This dataset is not maintained and was replaced with National Composite Gazetteer of Australia (https://placenames.fsdf.org.au/). Data in the Composite Gazetteer is updated more dynamically by individual jurisdictional custodians, hence there is no longer a yearly dataset published by Geoscience Australia, the most up-to-date data is always available from the app.

However, GA did provide a Linked Data API to the Composite Gazetteer which could be used to facilitate search/geocoding: https://ecat.ga.gov.au/geonetwork/srv/eng/catalog.search#/metadata/144182 http://fsdf.org.au/dataset/

tephenavies commented 3 years ago

We will continue to use Bing geocoder with a new key. If we approach usage limits we'll reconsider other geocoders.

stevenjh commented 3 years ago

Hi @steve9164 can you provide any further details about where you've generated the new Bing/Microsoft Key from? I've created a new Azure Maps Account in our portal but it generates a Primary and Secondary Key that do not seem to swap in and work.

Were there other code changes I've missed? Thanks!

stevenjh commented 3 years ago

Ah, the answer to this is don't go down the Azure Maps path, but the Bing Maps path, who knew they weren't synonyms of each other...

hardreddata commented 3 years ago

I am thoroughly confused.

Are these tickets because of https://blogs.bing.com/search-quality-insights/october-2020/Bing-Search-APIS-are-Transitioning or because of something specific to D61/CSIRO and their Bing agreements for their deployments?

Put differently, will the Bing search in the map I maintain stop working anytime soon? It uses a key we sourced from our Azure services. I appreciate you may not have all the answers

stevenjh commented 3 years ago

I ended up here because the Bing token I had issued via Azure Marketplace portal services had expired, in line with the details here https://docs.microsoft.com/en-us/bingmaps/articles/bing-maps-on-azure-marketplace

In looking to replace this I ended up going down the Azure Maps path which was a different product offering.

Anyway, if you're using a Bing token sourced through Azure Portal Services, then yes, I would have expected it to stop working and that you'd need to generate a new key via https://www.bingmapsportal.com/

hardreddata commented 3 years ago

Thanks @stevenjh

It has stopped working and it was too subtle for me to realise.

The CSIRO hosted GNAF geocoder must still be ok as our address searches are going somewhere.

nf-s commented 1 year ago

Before looking into other services we should try Cesium ion geocoder - as it would most likely be easiest option to implement - maps will also already have (in vast majority of cases) a cesium ion account/token

nf-s commented 1 year ago

The Cesium ion geocoder forwards to Bing these days, so that might be an easy option for you.

We already have a cesium ion plan, so I think the best first step is to implement the Cesium Ion Geocoder.

https://cesium.com/learn/cesiumjs/ref-doc/IonGeocoderService.html

AnaBelgun commented 1 year ago

Update 17 Oct 23:

ljowen commented 1 year ago

Looking into docs there's this guide: https://developers.arcgis.com/cesiumjs/geocode-and-search/search-for-an-address/ but it seems that requires an ArcGIS developer key.

I've found this endpoint https://api.cesium.com/v1/geocode/autocomplete?text=123 fake street&access_token=<cesium acces token> but looks like it's subject to the following conditions:

Geocoding

You may only use responses from the Geocoding API (“Geocodes”) in conjunction with Your Content.

You may not export, store or cache Geocodes.

You may use latitude and longitude information from Geocodes to position results on a map, but you may not display the latitudes or longitudes directly to others.

You may only query the Geocoding API in response to human user queries and human app interactions; you may not perform bulk or automated queries.

https://cesium.com/legal/terms-of-service/

nf-s commented 1 year ago

Hi @ljowen

The first link is for using the ArcGIS Geocoding service inside CesiumJS. We want to use the Cesium Ion Geocoder service. The documentation is pretty terrible, I can't even find a page describing the Cesium Ion Geocoder API.

You should be able to just create a IonGeocoderService in TerriaJS and set the accessToken parameter to terria.configParameters.cesiumIonAccessToken

zoran995 commented 1 year ago

Hi @nf-s I don't see the https://github.com/TerriaJS/terriajs/pull/5145 listed here. Still, it might be good to mention it as a proposed alternative to handling geocoders as part of the generic search providers definition, which will be entirely configurable through config/init files the same way the catalog items currently work. In that case, terriajs would only give search providers to users and what is used can be easily changed between environments. p.s. Of course, the current state of that PR is pretty old and it should be updated to new code structure to fit the recent changes but is it something terriajs team would consider adopting in the current codebase?

nf-s commented 1 year ago

HI @zoran995

Sorry for the delayed reply. Absolutely, I think it would be a great improvement!

I would like to also review your PRs for adding new search providers

Do you have a preference for adding these before or after your new configurable search providers

zoran995 commented 1 year ago

Hi @nf-s, I would most definitely prioritise the configurable search providers, in that case, we might be able to defer new search providers to plugin based approach (still need to verify if it is possible)

nf-s commented 1 year ago
nf-s commented 1 year ago

There is this tool to compare different providers - https://getlon.lat/

irbian commented 5 months ago

are there plans for pelias?